"... concluimos que varios repositorios pequeños es la opción más barata".
Eso es genial. Divide y conquistaras. Divide el esfuerzo en piezas lógicas, entrega cada pieza a un equipo duro diferente, trabaja como loco durante unos meses, reúne todo y ...
y...
Bueno, será una maldita pesadilla. Definitivamente no será más barato. ¿Por qué sería?
El mayor "costo" en cualquier proyecto de software es la comunicación. No ahorras dinero escribiendo código más rápido. Esos son los programadores secretos que no admitirán. ( Psst. No se lo digas a nadie. Realmente no importa lo rápido que escribas el código ) . El tiempo dedicado a escribir el código se ve absolutamente eclipsado por el tiempo dedicado a planificar y hablar y negociar y luchar y hablar y reunirse y hablar un poco más y comprometiéndote y dándote cuenta de que no deberías haber comprometido y prometiendo hacerlo mejor y gritando y deseando y "resolviendo" (eso no es una palabra, maldita sea) y retrocediendo y haciendo ping y hablando y no poder dormir.
Entonces, divide su trabajo en partes discretas y entrega cada parte a un equipo separado. ¿Que acabas de hacer? Agregaste una carga de comunicación. Si tienes suerte ysus equipos son perfectos, no hay absolutamente ninguna diferencia de costo entre un repositorio grande y algunos repositorios pequeños. Si no tiene suerte (pocos lo son), dividirse en equipos separados en realidad costará más. Es bastante difícil mantenerse sincronizado cuando todos están en la misma base de código, pisando los dedos de los demás. Ahora imagine lo difícil que será cuando tres equipos diferentes piensen que los requisitos significan algo ligeramente diferente (sin forma de corregirlo rápidamente porque no están rompiendo las cosas de los otros equipos), tienen culturas ligeramente diferentes y, al final, son muy motivados para evitar la culpa cuando las cosas van mal, por lo que están más que dispuestos a tirar a los otros equipos debajo del autobús.
Lo sé, lo sé ... tus equipos son mejores que eso. ¿Pero son realmente? ¿Tienes la confianza suficiente para apostar dinero?
Mire, en cualquier enfoque (gran repositorio / muchos repositorios pequeños) tendrá que burlarse de un montón de basura al principio. Empiezas a trabajar a ciegas. Tan pronto como sea posible, tan pronto como estén disponibles, debe comenzar a usar implementaciones concretas de las otras capas. Esto identificará problemas y malentendidos temprano. Claro, será un poco irregular, pero es mucho menos irregular que desarrollar de forma independiente con una especificación inestable y un apretón de manos, y luego doblar las cosas tarde.
Mi punto es que los grandes repositorios / pequeños repositorios no son el problema. Lo que importa es cómo estructurar sus equipos. Idealmente, sus equipos tienen pequeñas identidades independientes dentro de una identidad cohesiva más grande. Un poco como órganos en un organismo o tal vez un molde de limo . Independientemente de cómo estructura el código, dé a todos la oportunidad de toparse entre sí. Facilita la comunicación. Cometen errores juntos y corríjalos temprano y con frecuencia.