Cómo funciona

En lugar de tener un repositorio por proyecto, todo queda en uno solo. Herramientas como Turborepo, Nx y Bazel gestionan dependencias, builds y pruebas. Empresas como Google y Meta usan monorepos para miles de proyectos.

La estructura típica tiene una carpeta por proyecto o paquete, con compartición de código a través de paquetes internos. Los cambios que afectan a múltiples proyectos se hacen en un único commit y se prueban juntos.

Los monorepos exigen herramientas adecuadas. Sin ellas, builds lentos y conflictos de merge hacen la experiencia mala. Con ellas, la coordinación entre equipos mejora significativamente.

Ejemplo práctico

Una startup de IA puede tener un monorepo con el backend (API), frontend (dashboard), una biblioteca compartida de prompts y scripts de entrenamiento. Los cambios que afectan a múltiples proyectos se hacen en un único commit y se prueban juntos.

Si un desarrollador cambia la interfaz de la API, el CI/CD prueba automáticamente el frontend que consume esa API. Esto evita que los cambios rompan la integración entre proyectos.

Para qué sirve

Simplificar el compartir código, garantizar consistencia y facilitar refactorizaciones a gran escala. Para equipos de IA, el monorepo permite versionar código de modelos, prompts y aplicaciones juntos.

Para los desarrolladores, esto significa menos overhead al gestionar múltiples repositorios. Para los equipos, significa mejor colaboración y visibilidad de lo que sucede en todo el proyecto.

Diferencia entre monorepo y multirepo

Monorepo: un repositorio para todo. Facilita el compartir y la coordinación, pero puede ser pesado para equipos grandes sin las herramientas correctas. Multirepo: un repositorio por proyecto. Es más simple de gestionar individualmente, pero dificulta el compartir código y la coordinación.

La elección depende del tamaño del equipo, de la complejidad del proyecto y de las herramientas disponibles. Los equipos pequeños suelen preferir monorepo. Los equipos grandes pueden usar multirepo con herramientas de sincronización.