Reproducible y actualizable
● Docker
● Contenedores propios, iguales en desarrollo y producción
● Vagrant (Local)
● Replicamos servicios que nos ofrece Amazon
@rodri_rod
Continuous Integration / Continuous Delivery
● Desde el 1º día
● Usamos Codeship conectado con Github en cada Repo
@rodri_rod
¿Qué es importante
para nosotros?
API
● Sea flexible para negocio y entendible para desarrollo
● Sea extensible y nos permita crecer
● Sea mantenible y nos permita contratar
● Sea rápida
Flexible para negocio
● Nuestro core es nuestro negocio (Focus on business)
● Mantenemos la simplicidad (Esto es duro)
● DDD - Domain Driven Development - Parte estratégica
● Lenguaje ubicuo => Negocio y desarrollo hablamos el
mismo idioma
@rodri_rod
Entendible para desarrollo
● SOLID
● También usamos la parte táctica de DDD
○ Bounded Contexts, Entities, …
○ Arquitectura hexagonal (Ports & Adapters)
○ CQS => Command Query Separation
@rodri_rod
Extensible y mantenible
● Mantenemos el código sano y todo lo que ello conlleva
● Lo tenemos muy actualizado, al día (PHP 7.1, sf 3.3)
● Nos apoyamos en el framework pero no nos acoplamos
@rodri_rod
Extensible y mantenible
● Tenemos una buena bateria de tests que
nos permite refactorizar
● Test de integración para partes críticas
(sqlite)
● Test unitarios (phpunit)
@rodri_rod
Extensible y mantenible
● Tenemos un buen coverage de Test
(principalmente en Domain, nuestro core)
● Nos permite refactorizar, sin miedo
@rodri_rod
Rápida
● No renderizamos
● Workers => Intentamos procesar todo en asíncrono
○ Integraciones con 3s
○ Emails, SMS, generación de documentos
@rodri_rod
@ja_anaya
¿Qué es una webapp?
Responsive
El contenido se adapta al
dispositivo. La experiencia
debe ser lo más parecida a
una app nativa.
Se comunica por API
No se carga ni compila
desde el servidor. Es una
pieza totalmente
separada. Consume una
api.
Optimizada
Está totalmente optimizada
para dispositivos móviles
reduciendo al máximo
tamaños de JS y CSS para
que funcione sobre redes
3G/4G.
¿Qué es importante
para nosotros?
WEBAPP ● Que no dependa del backend
● Cargue de manera casi instantánea
● Apariencia móvil 100%
Invertir tiempo en mantener el código actualizado
¿Cómo?
@ja_anaya
¿Qué estamos haciendo nosotros?
● De GULP a WEBPACK
● DE ES5 a ES6
● De directivas a Componentes
● Uso de hot-reloading
No acoplarte al framework cuando puedes hacerlo tu mismo
¿Cómo?
@ja_anaya
¿Qué estamos haciendo nosotros?
● No poner tu código en los controladores
● Usar servicios
● Tu lógica de negocio
Dar una función clara a los elementos
¿Cómo?
@ja_anaya
¿Qué estamos haciendo nosotros?
● Dando significado y propósito semántico
● DRY: Un bloque es reusable y autocontenido
● Desacoplar el CSS del HTML
● SRP: Los elementos solo se preocupan de ellos mismos
● Open/Close: Modificadores solo extienden
BLOCK ELEMENT MODIFIER: BEM
Test
● Test unitarios: Jasmine y Karma
● Test de integración:
En partes fundamentales del negocio
En cada deploy a prod
@ja_anaya
Cosas a
mejorar
WEBAPP
● Más progressive Webapp: Offline y notificaciones
● Más componentes y documentar con Storybook
¿Qué hemos hecho?
@ja_anaya
● Alinear el desarrollo de IOS y Android con React-
Native
● Cargar nuestra Webapp dentro de una webview
nativa
● Comunicar la webview con la app nativa
Cosas a
mejorar
APPS NATIVAS
● Más y mejores test. Corrimos ahora toca mejorar.
● Mejorar integración continua para deploys de
apps en Beta.
● Añadir funcionalidades nativas: Notificaciones,
login con huella dactilar