"... concluímos que vários repositórios pequenos são a opção mais barata".
Isso é ótimo. Dividir e conquistar. Você divide o esforço em peças lógicas, entrega cada peça a uma equipe diferente, trabalha como louca por alguns meses, reúne tudo e ...
e...
Bem, será um maldito pesadelo. Definitivamente não será mais barato. Por que seria?
O maior "custo" em qualquer projeto de software é a comunicação. Você não economiza dinheiro escrevendo código mais rapidamente. Esses são os programadores secretos que não admitem. ( Psst. Não conte a ninguém. Realmente não importa a rapidez com que você escreve código. ) O tempo gasto escrevendo código é absolutamente diminuído pelo tempo gasto planejando, conversando, negociando, lutando, conversando, conhecendo e conversando um pouco mais. comprometer e perceber que você não deveria ter comprometido e prometer fazer melhor, gritando, desejando e "resolvendo" (isso não é uma palavra, caramba) e dando voltas, pingando, conversando e não conseguindo dormir.
Então, você divide seu trabalho em partes discretas e entrega cada parte para uma equipe separada. O que você acabou de fazer? Você adicionou um fardo de comunicação. Se você tiver sorte esuas equipes são perfeitas, não há absolutamente nenhuma diferença de custo entre um grande repositório e alguns pequenos repositórios. Se você não tiver sorte (poucas são), dividir equipes separadas custará mais. Já é bastante difícil ficar sincronizado quando todos estão na mesma base de código, pisando nos dedos uns dos outros. Agora imagine como será difícil quando três equipes diferentes acharem que os requisitos significam algo um pouco diferente (sem nenhuma maneira de corrigir rapidamente porque não estão quebrando o material das outras equipes), tiverem culturas um pouco diferentes e, no final, muito motivados para evitar culpas quando as coisas dão errado, então eles estão mais do que dispostos a jogar as outras equipes embaixo do ônibus.
Eu sei, eu sei ... suas equipes são melhores que isso. Mas eles são mesmo? Você está confiante o suficiente para apostar dinheiro nisso?
Veja, em qualquer uma das abordagens (grandes acordos de recompra / muitos acordos de recompra), você terá que zombar de um monte de porcaria no começo. Você começa a trabalhar às cegas. Assim que possível, assim que estiverem disponíveis, você deverá começar a usar implementações concretas das outras camadas. Isso identificará problemas e mal-entendidos cedo. Claro, será um pouco acidentado, mas é muito menos acidentado do que se desenvolver independentemente com uma especificação instável e um aperto de mão, e depois dobrar as coisas tarde.
O que quero dizer é que grandes repositórios / pequenos repositórios não são o problema. O que importa é como você estrutura suas equipes. Idealmente, suas equipes têm pequenas identidades independentes, dentro de uma identidade coesa maior. Como órgãos em um organismo ou talvez um mofo . Independentemente de como você estrutura o código, dê a todos a chance de se depararem. Facilite a comunicação. Cometer erros juntos e corrigi-los cedo e frequentemente.