Component Driven Software viene a quitarnos la idea de que todo debe ser un Microservicio/Microfrontend, por lo que deberíamos tener bien claro si un microservicio tiene sentido de existencia, esté gastando dinero y recursos vs un componente de Bit instalable, documentado y desacoplado con 0 costo.
Según la propia documentación Bit es un sistema de compilación de próxima generación para software componible bajo la idea principal de “Construir en cualquier lugar. Úselo en todas partes”. Veamos la superioridad de utilizar Component Driven Software con Bit.dev.
El nacimiento del software componible se considera necesario por diversos desafíos y demandas surgidos en el desarrollo de software. Aquí se detallan algunos dolores o razones claves:
Debido a la popularidad de los microservicios, muchas empresas los adoptaron sin un análisis profundo de su implementación correcta o su verdadera necesidad. Esto derivó en malas prácticas como copiar y pegar código entre microservicios, imposibilitando el mantenimiento adecuado y generando un caos que incrementó gastos. En algunos casos, se crearon microservicios innecesarios que aumentaron la infraestructura de red y trajeron nuevos desafíos
¿Por qué estamos gastando tanto dinero en este proyecto?
Las empresas comenzaron a adoptar los microservicios cada vez más pequeños y si bien la idea parece “buena”, hemos visto de un CRUD y un login con hasta 6 microservicios. Claro está que el costo de mantenimiento es caro, no solo por el pago de infraestructura sino por los expertos que necesitas para crear nuevos desarrollos, mantener, debugear errores profundos y testear una arquitectura de microservicios. Con Bit la idea de que todo debe ser un microservicio desaparece ya que podríamos dejar reservado esa idea para la lógica de negocio.
La colaboración entre equipos o células dentro de una misma empresa se vuelve cada vez más crucial. Es frecuente que un equipo esté desarrollando algo que otro ya ha realizado previamente. Cuando podría haberse hecho para haber sido aprovechada de forma componible.
Esta falta de comunicación y colaboración conlleva a una pérdida de tiempo, dinero y recursos. La posibilidad de compartir componentes de forma aislada facilita enormemente la colaboración entre equipos y proyectos, permitiendo un uso más eficiente de los recursos disponibles.
El software componible ofrece una ventaja significativa en este aspecto. Cuando un microservicio experimenta una falla grave y comete un error, es muy probable que todo el sistema se vea afectado debido al denominado "falso desacoplamiento". A menudo caemos en la trampa de pensar que, al implementar microservicios, todo estará bien, cuando en realidad estamos operando con una red de monolitos que se comunican de manera síncrona, dependiendo unos de otros y, en última instancia, compartiendo una única base de datos debido a un diseño arquitectónico deficiente. Esta situación es bastante común.
Debido a malas experiencias pasadas y a los falsos desacoplamientos muchas empresas (basadas en malos diseños) tienen temor a implementar un nuevo desarrollo que rompa con los esquemas con headless, SSR, Server Component, etc.
El Software Componible te da la solución, ya que no sólo te obliga a desacoplar microservicios, sino cada paquete, modelo o componente de nuestra aplicación, lo que sí o sí nos ayuda a crear nuestra APP como un rompecabezas, siempre pensando que un paquete puede usarlo otro equipo, por lo que debería ser Componible y Extensible exportando las piezas pequeñas para que puedas rearmar o reorganizar un componente de otra manera.
Si bien todos estamos de acuerdo en que es una ventaja poder tener varios frameworks y lenguajes en una arquitectura de Microservicio/Microfrontend, no es que debamos hacerlo.
Pero a pesar de ello, un desarrollador de microservicios no solo debe saber desarrollar bien; también debe saber sobre Cloud, K8s, Serverless, algo de Redes, Patrones de Diseño y Arquitectónicos, varios lenguajes de programación, entre otros.
Esto da lugar a desarrolladores que no son profundamente expertos en nada o, de todo lo anterior, son expertos al menos en algo, por lo que solucionar errores complejos y profundos suele ser muy doloroso.
Con Bit, muchas configuraciones ya vienen por defecto, lo que nos permite concentrarnos en lo importante que es desarrollar valor. Entre las herramientas que integra Bit están jest, eslint, typescript, react, angular, node, etc.
Bit.dev proporciona herramientas para documentar componentes de manera efectiva. Esto es esencial para comprender rápidamente cómo utilizar un componente y garantizar una integración sin problemas en otros proyectos. Además, desde la plataforma de Bit, puedes ver versiones, compararlas, visualizar un mapa de dependencias y mucho más. Todo esto te permite tener un control más granular y fino de tus paquetes, módulos, microservicios, microfrontends, etc.
Bit.dev proporciona información detallada sobre el estado y la versión de cada componente. Esto facilita el seguimiento de cambios, la identificación de problemas y la implementación de actualizaciones de forma controlada.
En resumen, la combinación de Component Driven Software y Bit.dev ofrece una arquitectura robusta basada en componentes, promoviendo la reutilización, la colaboración efectiva y un desarrollo más eficiente. Esto es especialmente beneficioso en proyectos grandes donde la modularidad y la gestión de dependencias son críticas para el éxito del desarrollo de software. Bit.dev maneja las dependencias de componentes de manera eficiente, reduciendo los problemas relacionados con la gestión de dependencias y garantizando la coherencia en todo el proyecto.
CDS facilita la creación de pruebas para cada componente de forma individual. Integrar estas pruebas con Bit.dev garantiza que los componentes funcionen correctamente y que los cambios no introduzcan errores o bugs.
La adopción de Component Driven Software con Bit.dev no solo promueve un desarrollo más eficiente y colaborativo, sino que también sienta las bases para una arquitectura de software robusta y escalable. Es una inversión estratégica que puede marcar la diferencia en la capacidad de una organización para innovar y mantenerse competitiva en un entorno empresarial en constante evolución.