Microfrontends, la evolución hacia el frontend basado en microservicios
Hay una corriente de desarrollo frontend que viene tomando fuerza últimamente y que aporta mayor modularidad en las aplicaciones modernas para la web. Se trata de los denominados microfrontends, una manera de dividir las aplicaciones web mediante sus funcionalidades que puede aportar diversas ventajas, sobre todo a la hora de organizar los equipos de desarrollo. Sin embargo, como se dice popularmente «no todo el monte es orégano» y esta arquitectura debería usarse en determinados tipos de proyectos, algo de lo que también queremos hablar.
Evolución de la plataforma web
A medida que las aplicaciones web aumentan su complejidad, surgen arquitecturas que tratan de facilitar la superación de las dificultades que van apareciendo. Los microfrontends no son más que una de esas propuestas que tratan de resolver algunas situaciones que se dan en las aplicaciones modernas.
Anteriormente muchas parcelas de la gestión empresarial y el ocio eran desarrolladas exclusivamente en el marco de las aplicaciones de escritorio donde existían unas costumbres de desarrollo muy maduras. Sin embargo, la tendencia de las últimas décadas es traer más y más aplicaciones a la web, que tiene unas características completamente diferentes.
Mientras que en las aplicaciones de escritorio se había llegado a un nivel arquitectónico suficiente para conseguir resolver las situaciones comunes de ese marco de desarrollo, en la web se empezó una vez más todo de cero. Lenguajes como HTML o CSS fueron pensados para unos requisitos bastante elementales. JavaScript vino a aportar parcelas como la gestión de la interactividad pero, sin embargo, su enfoque era más pensado para resolver problemas sencillos, por medio de pequeños scripts, que las necesidades de aplicaciones complejas.
En el backend se produjo un movimiento similar. Cuando surgieron los primeros lenguajes del servidor la tendencia era cubrir de manera sencilla necesidades elementales, como representar datos de una base de datos y producir HTML mediante ellos. A medida que las necesidades de las aplicaciones fueron creciendo, estas prácticas no eran suficientes para crear software realmente complejo y mantenible.
Arquitectura monolítica
A medida que fueron mejorando las técnicas de desarrollo para la web, con las que satisfacer las demandas crecientes de las aplicaciones, básicamente trayendo arquitecturas ampliamente utilizadas en el desarrollo stand-alone, como MVC y similares, se hizo posible el desarrollo de proyectos más complejos.
La solución implementada se componía de un único proyecto en el que todo se realizaba con un mismo núcleo de aplicación. Este tipo de arquitecturas se conocen como monolíticas por estar compuestas por un único repositorio de código, generalmente una única base de datos y donde habitualmente se incorporaba tanto la parte del desarrollo del lado del cliente como del lado del servidor.
Qué son los microservicios
Los proyectos denominados monolíticos involucraban a decenas de desarrolladores, o cientos de ellos si las aplicaciones eran grandes. Sin embargo, los procesos de desarrollo actuales, principalmente Agile, buscan el desarrollo de aplicaciones pequeñas, en las que tenga equipos de desarrollo pequeños, capaces de tomar decisiones de manera más autónoma.
Así es como surgieron los denominados microservicios, que no es más que la idea de dividir toda la complejidad de una aplicación o servicio web en diversos pequeños proyectos más manejables.
La principal ventaja es que podemos obtener de los microservicios es agrupar un gran proyecto en equipos de desarrollo que se encarguen departes bien diferenciadas de las aplicaciones. Esto aporta diversas ventajas entre las que podemos destacar:
- Cada equipo de desarrollo puede avanzar de manera independiente
- Se puede escoger su stack de tecnologías para cada micro servicio, que facilite la resolución de sus problemas particulares
- Las tareas de despliegue de cada parte se pueden realizar de manera independiente, de modo que es mucho más sencillo aportar valor continuo a los proyectos, de manera constante
Qué son los microfrontends
En la arquitectura de microservicios generalmente lo que se dividía en partes era el backend, con diversos servicios web que eran consumidos por una única aplicación frontend.
Sin embargo, con la complejidad creciente del desarrollo del lado del cliente, nos hemos encontrado en una situación similar a la que se encontró el desarrollo del backend: las aplicaciones frontend realmente complejas involucran a decenas de desarrolladores en torno de soluciones que son necesariamente aplicadas de manera idéntica en cada parte de la aplicación.
Así pues, el mismo enfoque de los microservicios se ha incorporado más recientemente al desarrollo frontend, permitiendo dividir el código de las aplicaciones en diversos módulos que son capaces de desarrollarse de manera independiente. Así aparecen los microfrontends, que nos permiten aportar ventajas similares a las que se adquirieron mediante los microservicios.
Cuál es el problema que pueden traer los microfrontends
Igual que ocurre con los microservicios, en los microfrontends no todo son ventajas. Éstos añaden cierta complejidad arbitraria a los proyectos, por la necesidad de coordinar distintas partes de la aplicación, que existen en entornos independientes.
En las aplicaciones monolíticas compartir datos y procesos es sencillo, porque todo está en un mismo servidor o un mismo núcleo de aplicación. Sin embargo, no es algo tan sencillo en las aplicaciones con microservicios o microfrontends, por estar separadas.
Las ventajas que encontrarnos aplicando microservicios o microfrontends en aplicaciones grandes o muy grandes son de sobra superiores a las desventajas de aplicar estas arquitecturas. El problema lo encontramos cuando aplicaciones que no los necesitan los deciden aplicar, posiblemente porque el gestor del proyecto ha oído hablar que solucionan diversos problemas y decide que estar a la última es siempre la mejor opción.
Como todo en la vida, hay que sopesar las ventajas e inconvenientes de cada decisión que se toma en el desarrollo, de modo que se pueda decidir qué es lo que más conviene a cada proyecto. Si nos decidimos por aplicar microfrontends sería bueno antes plantearse si realmente los necesitamos. Incluso, si es posible, convendría experimentar con pequeñas soluciones que nos permita encontrar las dificultades de esta arquitectura y apreciar si realmente ha merecido la pena, o si se trata de una sobre ingeniería que quizás no resulte tan necesaria en el proyecto.