Introducción: por qué esta historia puede ahorrarte dolores de cabeza
Si has trabajado en una base de código grande, seguro que te suena esto: el código funciona pero cada cambio tarda muchísimo más de lo que debería. Actualizar una funcionalidad rompe otra. Añadir una dependencia implica preocuparse por conflictos. Herramientas de compilación antiguas siguen ahí y nadie se siente seguro actualizando paquetes de los que depende gran parte del sistema.
En nuestro monorepo journey monorepo nos encontramos exactamente con eso. Dependencias conectadas de maneras inconsistentes, equipos que habían introducido herramientas solapadas y librerías sin tocar desde hace años. Proponer una limpieza se sentía como pedir que se rediseñe una ciudad mientras todavía vive gente en ella: arriesgado, disruptivo y fácil de posponer indefinidamente.
¿Por qué nos molestamos entonces?
Porque el desarrollo iba tan lento que las builds consumían demasiado tiempo. Esperar minutos para ver un cambio en el navegador mataba la productividad. Cada cambio se sentía peligroso: la telaraña de dependencias hacía que una pequeña modificación en un paquete pudiera romper múltiples aplicaciones. Incorporar nuevos desarrolladores era doloroso: tenían que aprender múltiples bundlers, configuraciones de tests y rarezas de herramientas obsoletas. La deuda técnica bloqueaba nuevas funcionalidades y los costes crecían por tiempos largos en CI y mantenimiento.
Resumen del monorepo
Journey monorepo es el repositorio central de la plataforma que alberga todo lo relacionado con journeys. Contenía aplicaciones principales como journey app y journey builder, más paquetes compartidos para renderizado, configuradores, utilidades y lógica. Al crecer rápido, el repo se expandió sin un plan claro y las dependencias y herramientas se mezclaron.
La configuración antes de la limpieza
Teníamos varias apps y paquetes interconectados y, para colmo, múltiples herramientas de build: Webpack, Craco, Tsup, Tsx, Tsdx. Esto produjo una red de riesgos del tipo si cambias esto puede romper aquello y aquello podía estar en cualquier sitio.
Cómo lo afrontamos
Empezamos con un RFC para documentar objetivos y plan. Nuestros dos grandes objetivos fueron unificar la herramienta y desenredar dependencias para permitir que los equipos trabajaran sin pisarse entre sí.
Paso 1: cortar dependencias innecesarias
Mapeamos las conexiones y eliminamos enlaces innecesarios, reduciendo las dependencias cruzadas que generaban builds frágiles. Trasladamos configuradores de bloques a journey builder porque nunca estuvieron pensados para uso externo. Movimos renderizadores a journey app para simplificar la arquitectura. Eliminamos paquetes pequeños o los fusionamos en otros, y reemplazamos librerías antiguas por alternativas mantenibles. Fue doloroso pero el repositorio quedó más ligero y fácil de razonar.
Paso 2: estandarizar el tooling
Tras recortar dependencias, abordamos las herramientas. Migramos de Craco, Tsup y Tsdx a Vite para conseguir builds más rápidos y configuraciones sencillas. Sustituimos Jest por Vitest para tests rápidos y mejor integración con Vite. Unificar el tooling redujo la carga cognitiva: los desarrolladores ya no tenían que recordar qué herramienta usar en cada paquete y la experiencia diaria mejoró.
Resultado después de la reestructuración
El monorepo quedó más ordenado, con menos dependencias cruzadas y la mayoría de variaciones en herramientas eliminadas. Cambiar cosas dejó de sentirse peligroso. Las builds y los tests dejaron de ser un castigo gracias al servidor de desarrollo de Vite y a los tiempos de test reducidos con Vitest. El onboarding pasó de lento a aceptable porque los nuevos podían configurarse sin aprender cuatro bundlers.
Qué aprendimos
Victorias inmediatas: menos riesgo al cambiar código, feedback instantáneo en desarrollo, tests más rápidos y onboarding más fácil. Pagos más lentos: no todo encaja perfectamente en la nueva herramienta, algunos plugins de Webpack no tenían equivalente y hubo que replantear o sacrificar funciones. Vitest reveló tests frágiles que antes pasaban por peculiaridades de Jest. Realidad y concesiones: no todo se migró, algunas apps siguen en setups legacy porque el riesgo de migrarlas ahora no compensa. Además, ahora aplicamos la regla antes de crear un paquete compartido: realmente necesita ser compartido.
Consejos si piensas hacerlo
Dibuja el grafo de dependencias antes de empezar, ayuda a convencer a otros. Espera retrocesos y PRs que rompan cosas temporalmente. Automatiza chequeos de paquetes sin uso y obsoletos. Celebra pequeñas victorias.
Sobre Q2BSTUDIO y por qué te interesa
En Q2BSTUDIO somos una empresa de desarrollo de software especializada en aplicaciones a medida y software a medida para empresas que necesitan soluciones personalizadas. Ofrecemos servicios avanzados en inteligencia artificial e ia para empresas, creamos agentes IA y soluciones de inteligencia artificial integradas para mejorar procesos y experiencia de usuario. También somos expertos en ciberseguridad para proteger aplicaciones y datos, y contamos con servicios cloud aws y azure para desplegar y escalar proyectos de manera segura y eficiente. Además entregamos servicios inteligencia de negocio y dashboards con power bi para transformar datos en decisiones accionables.
Nuestro enfoque al enfrentar un monorepo desordenado fue el mismo que aplicamos con clientes: entender el problema, priorizar impacto y aplicar soluciones iterativas. Si necesitas una migración de arquitectura, optimización de pipelines CI, implementación de IA para empresas, agentes IA conversacionales o crear aplicaciones a medida seguras en cloud aws y azure, en Q2BSTUDIO podemos ayudarte a diseñar una estrategia que reduzca riesgo y aumente velocidad de entrega.
Palabras clave y posicionamiento
Este artículo incluye términos relevantes para buscadores como aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA y power bi para mejorar el posicionamiento y conectar con quienes buscan soluciones profesionales en desarrollo de software y analítica avanzada.
Reflexión final
La limpieza del monorepo no fue una tarea ligera ni rápida, fue un proceso de medio año realizado junto con el trabajo cotidiano. El resultado fue mayor velocidad de desarrollo, menos zonas intocables y la sensación de que el repositorio volvió a ser algo nuestro y no un monstruo. Si tuviera que dejar una sola recomendación diría: mantenerlo simple. Cada dependencia, herramienta o paquete adicional que evites hoy es una cosa menos que tendrás que desenredar mañana.
Si quieres llevar tu monorepo a la claridad, optimizar builds, implementar inteligencia artificial o asegurar tus aplicaciones con ciberseguridad y servicios cloud aws y azure, contacta con Q2BSTUDIO y hablamos de cómo convertir el caos en claridad.