Somos una organización que consta de alrededor de 200 desarrolladores que trabajan continuamente en un solo producto (usando el control de revisión Git) que se planea lanzar en una fecha determinada.
Debido a la gran cantidad de desarrolladores, estamos tratando de crear equipos "multifuncionales" con alrededor de 10 desarrolladores en cada equipo, lo que resulta en alrededor de 20 equipos de desarrollo en la organización.
Dado que nos gustaría mantener un "alto estándar" continuo (es decir, cuando el desarrollador hace una extracción, el producto al menos debe ser compilable, etc.) del producto en el repositorio principal, nos gustaría utilizar algún tipo de puertas de calidad.
No estoy seguro de cómo formular la pregunta, pero me pregunto si podría obtener algunos consejos sobre metodologías de desarrollo para un grupo tan grande de desarrolladores que trabajan en un solo producto.
En nuestra opinión, un extremo del espectro es permitir que cada desarrollador se comprometa directamente con el repositorio principal, sin embargo, tememos que debido al alto número de desarrolladores / compromisos que el "repositorio principal" pueda estar constantemente en una etapa interrumpida, debido no podemos tener una exigente "puerta de calidad" para cada compromiso.
El otro extremo del espectro podría ser (creemos que Linus Torvalds / Linux lo hace) un árbol o una estructura piramidal, donde el "repositorio principal" solo tiene tres fuentes de extracción, estas tres solo tienen un puñado de fuentes de extracción confiables, etc. Sin embargo, creemos que con una estructura como esa los cambios tienen una larga cadena que escalar para entrar en el "repositorio principal". Además, si se produce un conflicto de fusión, el problema recae en otro desarrollador que no sea el "desarrollador original".
Con toda esta información de fondo y opiniones, ¿cómo podemos aprender y leer las metodologías de desarrollo recomendadas para tantos desarrolladores? ¿Cómo estructuran su desarrollo las grandes organizaciones (Microsoft, Facebook, Ubuntu, etc.)?