¿Cuál es la forma correcta de manejar múltiples funciones simultáneas en el desarrollo paralelo?

Hemos estado usando git-flow para el desarrollo, con integración, control de calidad y entornos en vivo. No funciona para nosotros: con frecuencia tenemos equipos con características múltiples en desarrollo paralelo, y regularmente encontramos que algunas funciones están lists para funcionar, mientras que otras ya se han fusionado con la twig de desarrollo, pero aún no se han integrado lo suficiente. probado Luego, terminamos reteniendo el lanzamiento hasta que se testingn todas las características en la tubería y se desarrolla la congelación por el time, lo que es un inconveniente para los desarrolladores que están trabajando en nuevas funciones. Algunas personas han sugerido usar solo una twig y desarrollar con banderas de características en su lugar, pero eso presenta su propio set de desafíos.

¿Hay una buena manera de agrupar las confirmaciones para que puedan llevarse adelante como grupo? Tenemos cada característica en una twig separada, pero esa agrupación se pierde cuando la twig de características se fusiona para desarrollarse. Lo que creo que ayudaría es mantener intacta la twig y luego fusionarla con la maestra cuando esa característica haya sido probada y esté list para entrar en funcionamiento, pero esto no parece ser fácil.

También estamos abiertos a cambiar a un sistema de control de fuente diferente si hay algo más que lo haga más fácil, pero cualquiera que sea el sistema que finalice también debe admitir la fusión selectiva basada en el éxito o el fracaso de las testings automatizadas (utilizamos Jenkins para esto ahora )

¿Cuál es la mejor manera de abordar este problema?

Algunas personas han sugerido usar solo una twig y desarrollar con banderas de características en su lugar

Definitivamente deberías escuchar a esta gente. En mi experiencia, esta es la mejor forma de integrar software en cualquier proyecto más grande.

No solo facilitará la planificación de su lanzamiento, sino que también le brindará otros beneficios, tales como:

  • Permitirá que sus desarrolladores integren código temprano y a menudo e incluso sin terminar. Esto networkingucirá el riesgo de integración entre las twigs de desarrollo. Y ofrece una mejor visibilidad / synchronization entre las características.
  • Creará una competencia positiva para integrar sus cambios anticipadamente porque esa es la manera de evitar conflictos de fusión.
  • Si solo tiene una sucursal, puede concentrar todos sus esfuerzos de testing en esta twig.

Lectura recomendada: Martin Fowler acerca de las twigs destacadas