Publicité
Publicité

Contenu connexe

Publicité

Los reinos de finizens - Nuestro stark tecnológico

  1. Los reinos de Finizens Nuestro stark tecnológico
  2. Rodrigo Gómez finizens.com Software Engineer en Finizens desde el “git init” @rodrigm @rodri_rod
  3. Javier Anaya finizens.com Backend, frontend and coffee maker en Finizens @janayama @ja_anaya
  4. Agenda finizens.com 1. Reinos de Finizens 2. Infraestructura 3. API 4. WebApp 5. Apps móviles
  5. finizens.com Reinos de Finizens Infraestructura API WebApp Web App Nativas ...
  6. Infraestructura
  7. ¿Qué es importante para nosotros? INFRAESTRUCTURA ● Escalable ● Entorno reproducible y actualizable ● CI/CD ● Monitoring
  8. APP NATIVAS ¿Qué usamos para conseguirlo? @rodri_rod
  9. Escalable ● Autoscaling - Escalado Horizontal ● RDS => Replicable ● S3 @rodri_rod
  10. @rodri_rod AWS
  11. @rodri_rod Web
  12. @rodri_rod WebApp
  13. @rodri_rod API
  14. Y todo esto multiplicado por 3 Staging Demo Prod @rodri_rod
  15. Y a su vez por cada B2B @rodri_rod ? ?
  16. Reproducible y actualizable ● Docker ● Contenedores propios, iguales en desarrollo y producción ● Vagrant (Local) ● Replicamos servicios que nos ofrece Amazon @rodri_rod
  17. Continuous Integration / Continuous Delivery ● Desde el 1º día ● Usamos Codeship conectado con Github en cada Repo @rodri_rod
  18. Monitoring ● CloudWatch ● Estado de las máquinas ● Estado de los servicios (RDS, etc.) ● Guardamos todos los logs @rodri_rod
  19. Monitoring ● NewRelic ● Estado de los contenedores En nuestro caso, php-fpm, php-cli, nginx @rodri_rod
  20. Monitoring ● RollBar ● Nos permite guardar todos los errores y sus ocurrencias. ● Conectado con GitHub @rodri_rod
  21. Cosas a mejorar INFRAESTRUCTURA ● Son muchos entornos y deberíamos de automatizar ● Bajar el tiempo de deploy
  22. API
  23. ¿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
  24. APP NATIVAS ¿Qué usamos para conseguirlo? @rodri_rod
  25. 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
  26. 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
  27. 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
  28. 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
  29. Extensible y mantenible ● Tenemos un buen coverage de Test (principalmente en Domain, nuestro core) ● Nos permite refactorizar, sin miedo @rodri_rod
  30. Rápida ● No renderizamos ● Workers => Intentamos procesar todo en asíncrono ○ Integraciones con 3s ○ Emails, SMS, generación de documentos @rodri_rod
  31. Cosas a mejorar API ● Alguna abstracción inadecuada (bounded context) en el pasado ● GraphQL
  32. Webapp
  33. @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.
  34. ¿Qué es importante para nosotros? WEBAPP ● Que no dependa del backend ● Cargue de manera casi instantánea ● Apariencia móvil 100%
  35. ¿Qué usamos para conseguirlo? @ja_anaya
  36. El framework @ja_anaya Donde... no es el problema
  37. @ja_anaya Repito El framework es el problemaNO
  38. @ja_anaya Error 1 No mantener el código
  39. 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
  40. @ja_anaya Error 2 Programar para el framework
  41. 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
  42. Beneficios @ja_anaya ● Encapsulación ● Código testable ● Código mantenible ● Flexibilidad
  43. Error 3 Descuidar los estilos @ja_anaya
  44. 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
  45. Test ● Test unitarios: Jasmine y Karma ● Test de integración: En partes fundamentales del negocio En cada deploy a prod @ja_anaya
  46. Cosas a mejorar WEBAPP ● Más progressive Webapp: Offline y notificaciones ● Más componentes y documentar con Storybook
  47. App nativas
  48. ¿Qué es importante para nosotros? APP NATIVAS ● Prueba de concepto funcional ● Equilibrio entre negocio y desarrollo ideal
  49. ¿Qué usamos para conseguirlo? @ja_anaya
  50. ¿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
  51. 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
  52. ¡SORPRESA! ¡Estamos contratando! @ja_anaya ● Backend engineer ● Frontend engineer Enlace: https://angel.co/finizens/jobs
  53. Gracias :) @rodri_rod @ja_anaya ¿Preguntas?
Publicité