Home »

ΠWEEK postmortem: EVE

La semana pasada vivimos intensamente la sexta piweek en Kaleidos. El reto, como siempre, era tener un MVP que poder presentar el viernes, fruto de una buena idea y trabajo duro.

Este año, nuestro equipo estaba formado por Antonio de la Torre, Pablo Alba, Juan de la Cruz y yo mismo. ¿La idea a desarrollar? Una plataforma de gestión de eventos, para que cualquier conferencia pudiera dar de alta sus charlas y sus speakers y los usuarios tuvieran la información de todas las conferencias en el mismo sitio. La plataforma debía exponer un API, que sería consumida por una aplicación web y una aplicación móvil. Nacía EVE.

Además del reto del desarrollo en sí mismo, quisimos tomarnos nuestra ración “piweekera” de iocaína aprovechando para probar herramientas y metodologías nuevas.

En el back, partimos de SpringBoot y trabajamos con una arquitectura hexagonal, intentando modularizar y separar nuestra lógica de negocio del resto de la aplicación.

Implementamos también el patrón repositorio, nuestro propio módulo de autenticación stateless en base a un artículo de nuestro compañero Andrey y nos inspiramos en la mónada Either para desarrollar el flujo de lógica de la aplicación y su gestión de errores, aunque la implementación dista de ser formalmente correcta. Al final, de SpringBoot solo utilizamos la inyección de dependencias, y más por inercia que por necesidad.

Como preprocesador de HTML, CSS y JavaScript se utilizó Grunt.js. Como motor de plantillas, para agilizar el trabajo con el HTML utilizamos Jade y para el CSS se utilizó SASS. Todos los diseños se realizaron íntegramente en InkScape.

Para el móvil utilizamos Apache Cordova como base para la aplicación web. Cordova básicamente nos construye una aplicación nativa Android con un webview donde pintar nuestro código. Pese a que el navegador de Android llega hasta donde llega y hay cosas que no pinta correctamente (flexbox, te estoy mirando a ti), nos resultó fácil trabajar con Cordova, dado que al final utilizamos HTML, CSS y JavaScript, herramientas que conocemos bien.

Toda la lógica del móvil se construyó con JavaScript y HTML5, lo que nos permitió portarla muy fácilmente a la aplicación web. Un par de cambios bastaron para tenerla funcionando, y como el diseño se pensó y maquetó para que fuera 100% responsive, la transición fue muy directa.

De esta aventura salimos con una aplicación funcionando, la intención de continuar con la idea y alcanzar un MVP que podamos poner a prueba en varias conferencias y muchas conclusiones, tanto técnicas como metodológicas:

  • Una arquitectura basada en un conjunto de bibliotecas independientes puede ser tan productiva y sencilla de usar como la que te proporciona un framework.
  • La arquitectura hexagonal añade muy poco sobrecoste a cambio de independizar la lógica de la aplicación de los elementos externos. Sin usar ningún ORM, en determinado punto del desarrollo cambiamos nuestra base de datos reescribiendo unas pocas clases y sin tocar la lógica de negocio.
  • Por desgracia, la iocaína nos ha obligado a aislarnos y los de back no hemos podido trabajar demasiado en front (móvil y web) y los de front tampoco en back.
  • Olvidarnos completamente de Spring y picar todos los componentes de la aplicación a mano ha sido una experiencia enriquecedora. Si bien hay componentes como el ORM que merece la pena reutilizar por lo complejos que son y la cantidad de casuísticas que resuelven (pasamos un mal rato implementando lo mínimo necesario para funcionar, dejando atrás grandes problemas sin resolver como la transaccionalidad, por ejemplo), hay otros como el sistema de plantillas o la autenticación que muchas veces utilizamos por inercia y que puede costar más integrar que codificar a mano.
  • Para sacarle partido a la programación funcional no es necesario cambiar de lenguaje ni poner nuestros desarrollos patas arriba; basta con explorar las ideas que propone para encontrar métodos o flujos concretos que podemos optimizar y mejorar con ella sin salirnos de nuestro ecosistema o forma de trabajar.
  • Respecto a la metodología, tenemos que mejorar. Pablo Alba nos contó el lunes de qué iba el proyecto y qué quería hacer y empezamos inmeditamente a trabajar todos a la vez el lunes dividiéndonos sobre todos temas de infraestructura: cordova from scratch, autenticación, SpringBoot y repositorio. Para tener un poco más de visión de lo que quedaba por hacer, el miércoles creamos un backlog, que intentamos repartirnos. Pero al poco nos dimos cuenta que las historias importantes dependían fuertemente unas de otras y que no eran muy paralelizables, teniendo que empezar otras que no eran importantes para la demo.
  • Como siempre, ha sido un placer y un privilegio compartir backlog y cruzar commits con Juan, Toño y Pablo, pedazo de cracks. Con compañeros así cualquier reto parece fácil.

Cerramos las conclusiones con una impresionante creatividad que se ha currado Juan para explicar visualmente en qué consiste Eve.

Infografía explicativa de Eve

Infografía explicativa de Eve