Por Dorian Bonanata, Gerente de Tecnología
Cuando me incorporé a Grupo RUA, en 2020 con el desafío de gerenciar el área de Tecnología lo primero que hicimos fue un análisis del estado general de las áreas tecnológicas en la compañía a todo nivel, con la intención de entender todas las oportunidades de mejora que había y la mitigación de riesgos que debíamos atacar primero.
Algo que cabe destacar ante un análisis de este tipo, es la necesidad intrínseca de una participación activa de los colaboradores que, al fin y al cabo, son los que viven en el día a día la entrega de valor desde las áreas de TI. También, el costo/dificultad que le acarrea al equipo de desarrollo la deuda técnica.
Uno de los principales desafíos que encontramos para uno de nuestros principales productos, al cual pretendíamos internacionalizar y escalar, era el de desacoplar o descomponer toda la lógica del negocio de un API monolítico (un solo repositorio de código con todas las responsabilidades centralizadas) hacia una arquitectura de microservicios, donde cada uno de estos conociera y fuera responsable de una pequeña parte del negocio. Es decir, un microservicio específico para la autenticación (SignUp, SignIn, logins, etc.), otro para la administración de contenidos (fotos, banners, etc.), otro para la lógica de cupones de descuentos y así sucesivamente.
La manera en que funcionan estos componentes se da generalmente por la «orquestación» desde un componente específico (como un API) que hace las peticiones a diferentes microservicios.
Lo que se intenta lograr con esta arquitectura es obtener «pequeños» componentes interactuando entre sí y/o con otros componentes, cada uno autónomo y especializado en ejecutar sus propios procesos asociados a un problema, servicio o funcionalidad específica, sin dejar de estar dentro de la lógica general del negocio, haciéndolo más sencillo de mantener, con varias virtudes:
- Escalar independientemente: cada microservicio puede ser mantenido y/o mejorado de manera independiente al resto del producto, minimizando riesgos durante despliegues.
- Elasticidad: es relativamente sencillo levantar más instancias de estos ante picos de demanda.
- Agilidad en el desarrollo: incorporando pequeñas mejoras y agregando valor en iteraciones acotadas de tiempo.
- Independencia tecnológica: si bien cada MS interactúa con otros componentes, estos pueden usar stacks o lenguajes diferentes según la característica del mismo. Algunos requieren tecnologías más robustas que otros, diferentes DBs, etc.
- Reciclado de código: Se reutilizan lógicas evitando reescribir múltiples veces lo mismo, como ejemplo simple, un microservicio de autenticación, que es responsable de todos los registros y accesos.
- Despliegue y entrega continua: los tiempos de despliegue son mucho menores y los errores son fáciles de revertir, lo que permite hacer «rollbacks» de manera rápida, ayudando a la experimentación y aprendizaje.
Todo esto es algo en lo que se avanzó en Grupo RUA y en lo que seguiremos trabajando cada vez que una unidad de negocio requiera una nueva funcionalidad o mejora en la lógica actual.
Es importante aclarar que no todo es color de rosas en esta arquitectura, tiene sus desafíos:
- Aumenta la complejidad del sistema que se desacopla.
- Conlleva un esfuerzo adicional respecto a monitorización y gestión de errores.
- Requiere de más recursos: Hardware físico o virtual (cloud o hybrid/cloud).
- Deben definirse nuevo Roles como el DevOps, responsables de la provisión, despliegue y release continuos que se hacen imprescindibles.
- Implementación de nuevas filosofías y metodologías de trabajo.
En conclusión, para lograr el objetivo de un producto escalable e internacional con respuesta a los cambios, sostenible, con la posibilidad de crecer de manera ágil, la empresa toda debe cursar por cambios enfrentando grandes desafíos. Se debe salir de la zona de confort, aprender nuevas metodologías y tecnologías, modificar flujos de trabajo, ajustar roles y responsabilidades, etc.
Desde mi perspectiva, el esfuerzo vale la pena, ya que habilita lo que buscamos los apasionados de la tecnología y los negocios: conformar estructuras y equipos de alto rendimiento que con la tecnología como aliada, genere impacto en el negocio y los clientes (internos o externos) con valor agregado a corto plazo.
Comentarios recientes