Monorepositorios como herramienta de gestión de código fuente
Clase 3 de 29 • Curso de Arquitectura de Software Aplicada
Resumen
Seleccionar la estructura de gestión de código es una de las primeras decisiones arquitectónicas en cualquier proyecto relevante. Elegir entre un monorepositorio o un enfoque alternativo impacta la comunicación, la colaboración y la trazabilidad, afectando tanto el ciclo de vida como la evolución del software. Aquí te contaremos más sobre los puntos clave para tomar y documentar esta decisión estratégica.
¿Qué es un monorepositorio y por qué es relevante en proyectos de software?
Un monorepositorio permite gestionar muchos proyectos de software bajo un solo sistema de control de versiones. Este enfoque, adoptado por grandes compañías, no implica una arquitectura monolítica sino una mejor colaboración y comunicación.
- Agrupa el código y las dependencias en un solo repositorio.
- Facilita el seguimiento y la gestión de múltiples productos y sus interdependencias.
- Reduce la carga mental y la complejidad asociada a mantener muchos repositorios diferentes.
- Favorece la unificación de herramientas y procesos de construcción, despliegue y colaboración.
¿Cuándo y cómo elegir una herramienta para monorepositorio?
La selección debe responder al contexto del equipo y las restricciones técnicas. Hay herramientas específicas para lenguajes como Java o TypeScript y otras políglotas, que permiten gestionar proyectos en varios lenguajes, ofreciendo mayor flexibilidad.
- Evalúa las capacidades y necesidades del equipo antes de elegir.
- Si necesitas flexibilidad y multiplataforma, un monorepositorio políglota es recomendable.
- Considera la existencia de código legado que podría limitar opciones.
Herramientas como Pants Build destacan por su soporte para múltiples lenguajes y seguridad en la gestión de dependencias. Su capacidad para prevenir ataques en la cadena de suministro es ideal para entornos que manejan código de diferentes fuentes.
¿Cómo configurar y mantener un monorepositorio con Pants Build?
Pants Build se configura mediante archivos TOML, donde defines versiones, entornos soportados y backends por lenguaje.
- Permite exigir versiones de intérprete específicas, como Python mayor a 3.10 y menor que 3.13.
- Automatiza instalación de dependencias, validación de código, ejecución de pruebas y formateo.
- Favorece entornos de desarrollo repetibles y promueve la estandarización.
Puedes gestionar proyectos simples, como una web en Python que responde "hello" en la página de inicio, y escalar a arquitecturas con más lenguajes y herramientas.
¿Cómo documentar decisiones arquitectónicas en tu proyecto?
Registrar tus elecciones es clave para la transparencia y la transferencia de conocimiento.
- Utiliza registros como los Architectural Decision Records para documentar problemas, alternativas, criterios de selección y responsables.
- Sé explícito con los decision drivers y los fundamentos para elegir o descartar alternativas.
- Haz visible esta documentación en el archivo README u otros espacios accesibles.
¿Cuáles son las alternativas al monorepositorio y sus implicaciones?
Puedes optar por polirepositorios (un repositorio independiente por producto) o repositorios colocalizados (muchos proyectos bajo una misma carpeta). Cada modelo tiene ventajas y retos:
- Polirepositorios facilitan versiones independientes pero pueden fragmentar procesos y comunicación.
- Repositorios colocalizados dan independencia, pero suelen carecer de procesos unificados.
La decisión afecta cómo colaboran las personas y cómo evolucionan los productos. Coméntanos cuál es tu experiencia con estas formas de organizar tus proyectos, los problemas que has enfrentado y las soluciones que has encontrado.