Somos uma organização composta por cerca de 200 desenvolvedores que estão trabalhando continuamente em um único produto (usando o controle de revisão Git), que está planejado para ser lançado em uma determinada data.
Devido ao grande número de desenvolvedores, estamos tentando criar equipes "multifuncionais", com cerca de 10 desenvolvedores em cada equipe, resultando em cerca de 20 equipes de desenvolvimento na organização.
Como gostaríamos de manter um continuamente "alto padrão" (ou seja, quando o desenvolvedor faz um puxão, o produto deve ser compilável, etc.) do produto no repositório principal, gostaríamos de usar algum tipo de porta de qualidade.
Estou um pouco inseguro sobre como formular a pergunta, mas gostaria de saber se poderia obter alguns conselhos sobre metodologias de desenvolvimento para um grupo tão grande de desenvolvedores trabalhando em um único produto.
Em nossa opinião, uma extremidade do espectro é permitir que cada desenvolvedor se comprometa diretamente com o repositório principal, no entanto, tememos que, devido ao grande número de desenvolvedores / confirmações, o "repositório principal" esteja constantemente em um estágio quebrado, devido não podemos ter um "portão de qualidade" exigente para cada confirmação.
A outra extremidade do espectro pode ser (achamos que Linus Torvalds / Linux faz isso) uma árvore ou uma estrutura de pirâmide, onde o "repositório principal" tem apenas três fontes de recebimento, esses três apenas um punhado de fontes de recebimento confiáveis, etc. Entretanto, sentimos que, com uma estrutura como essa, as mudanças têm uma longa cadeia de escalar para entrar no "repositório principal". Além disso, se ocorrer um conflito de mesclagem, o problema cairá em outro desenvolvedor que não seja o "desenvolvedor original".
Com todas essas informações e opiniões básicas declaradas, como podemos aprender e ler as metodologias de desenvolvimento recomendadas para tantos desenvolvedores? Como as grandes organizações (Microsoft, Facebook, Ubuntu, etc?) Estruturam seu desenvolvimento?