Somos uma equipe de baixo orçamento trabalhando em um aplicativo da web. Devido a algumas complicações, talvez seja necessário trabalhar remotamente a partir de janeiro. Após algumas consultas e pesquisas no Google, concluímos que vários repositórios pequenos são a opção mais barata. Estamos pensando em:
Back-end e serviços
Middleware
a parte dianteira
Dessa forma, podemos separar em equipes relevantes, cada uma trabalhando remotamente em seu repositório. Quão viável é ter nosso aplicativo em vários pequenos repositórios particulares?
Além disso, que considerações devemos tomar se trabalharmos dessa maneira?
Nota: Estou perguntando sobre um único grande projeto dividido em vários pequenos repositórios. Isso difere das perguntas relacionadas feitas neste site , porque eles estão solicitando vários projetos em um ou vários repositórios. Além disso, optamos por mergulhar no projeto, principalmente porque não estamos dispostos a investir em um único repositório particular grande, a menos que continuemos com ele.
Respostas:
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.
fonte
A meu ver, dividir o repositório depende muito de seus objetivos e das ferramentas que você está usando.
Por exemplo, se você estiver escrevendo um aplicativo Web Ruby on Rails sem nenhuma API pública (ou privada) que seu front-end consumirá (por AJAX, por exemplo), não vejo como você pode dividir o repositório sem causando uma enorme dor de cabeça para sua equipe. A estrutura do Rails realmente funciona melhor com uma arquitetura do tipo monolítico nesse caso.
No entanto, se você planeja escrever uma API no Rails ou no Node.js, mas deseja que o seu front-end seja escrito no Ember.js ou em qualquer outra coisa, faria sentido dividir o repositório. O mesmo se aplica se os dados do seu aplicativo da web forem compartilhados no futuro por outros clientes (como por meio de um aplicativo Android / iOS). Se você planeja escrever uma API para ser consumida por vários clientes, divida seu repositório. Alguns argumentam que mesmo dividir a API em um aplicativo completamente diferente é uma péssima idéia, com a qual eu discordo totalmente (e parece que sim por um bom motivo !
Dividir o repositório, se você já planejou desmembrar o aplicativo Web, como descrevi, é a única opção lógica. No entanto, lembre-se de que, como será mais difícil para as pessoas procurarem o código uma da outra, é necessário garantir uma excelente comunicação , mas ainda mais importante na documentação . Sem documentar a API, por exemplo, suas outras duas equipes ficarão irritadas muito rapidamente porque a equipe da API não documentou a arquitetura, e sua equipe da API ficará irritada porque todo mundo continua fazendo perguntas. Isso é ainda mais verdadeiro para equipes remotas .
Portanto, tudo depende de como você deseja estruturar o aplicativo em primeiro lugar. Se você estiver construindo um aplicativo Web monolítico (e souber ou tiver certeza de que ele continuará sendo um aplicativo Web ), tenha um repositório. Se você planejou criar coisas como microsserviços ou uma API REST consumida por vários clientes (ou planeja isso para o futuro ), divida o repositório.
fonte