He estado pensando mucho en esta pregunta exacta.
Creo que es importante distinguir entre segmentar por responsabilidades individuales versus segmentar por responsabilidades de equipo. Centraré esta respuesta principalmente en cortar equipos.
Para algunos antecedentes: he trabajado en proyectos con desarrolladores full-stack, desarrolladores de un solo nivel, equipos verticales (full-stack), equipos horizontales (single-tier) y equipos diagonales. Por equipo diagonal quiero decir que contiene todos los niveles necesarios para una historia, pero no necesariamente todos los niveles en el sistema, y posiblemente también contiene múltiples desarrolladores que se centran en los mismos niveles; en otras palabras, vertical en espíritu pero quizás algo horizontal en apariencia o en detalles de implementación.
Recientemente he trabajado en un grupo que pasó de equipos horizontales a equipos diagonales (casi verticales). Ha sido particularmente instructivo ver al mismo grupo de personas alineado de dos maneras diferentes. Deja algunas ventajas y desventajas bastante claras.
Completaré mi opinión hasta ahora con la siguiente comparación resumida:
Equipos horizontales
Ventajas:
- Fomenta una buena separación de las preocupaciones y niveles sueltos
- Gestión de distribución de carga de trabajo mucho más fácil
- Fácil de manejar para el líder técnico especializado
- Fomenta la colaboración dentro del nivel, las mejores prácticas, el orgullo y una cultura de excelencia
- Se alinea con patrones de comunicación naturales / emergentes.
Desventajas
- Puede conducir al aislamiento de los niveles y, por lo tanto, obstaculizar la comunicación entre niveles
- Habilita la cultura de nivel "burbuja" si no se mitiga
- Difícil de aprovechar el liderazgo generalista
- Obstaculiza a los generalistas
Equipos verticales / diagonales
Ventajas:
- Todas las partes de una historia de usuario en un equipo ("ventanilla única")
- Específicamente ayuda a entregar historias de n niveles en un solo sprint (aunque ¿realmente lo necesitas?)
- Fomenta la colaboración entre niveles y el crecimiento de habilidades generalistas
- Apoya a generalistas
Desventajas
- Gestión de distribución de carga de trabajo mucho más difícil
- Permite una separación deficiente de las preocupaciones y niveles estrechamente acoplados
- Impide la especialización al restringir la comunicación dentro del nivel; Es difícil ver cómo una cultura de excelencia podría surgir de esta estructura sin agregar comportamientos atenuantes horizontales / especializados
No creo que la membresía del equipo tenga una solución única para todos. Sin embargo, parece bastante sencillo que el equipo vertical se alinee mejor para las organizaciones que requieren generalización. Si sus ingenieros son generalistas y les gusta trabajar en stack completo, esa es una buena razón para considerar equipos verticales. El equipo horizontal se alinea mejor para organizaciones que requieren especialistas. Si sus ingenieros son especialistas, esa es una buena razón para considerar equipos horizontales.
Como otros han mencionado, las estructuras / comportamientos secundarios que cortan la otra dirección pueden ayudar a mitigar los inconvenientes de cualquiera de los sistemas. Un factor mitigante interesante es la duración del sprint. Los sprints cortos hacen que algunas de las desventajas de los equipos horizontales sean más tolerables. Si puede construir el backend esta semana y el frontend la próxima semana, ¿podría ser lo suficientemente rápido?
Para aplicar algunos de estos principios propuestos a un problema del mundo real ... Diré que los cortes horizontales han funcionado bastante bien para un equipo de desarrollo de SaaS muy real en el que he trabajado que estaba resolviendo problemas técnicos muy desafiantes en cada nivel ( donde la especialización era, en mi opinión, increíblemente importante), donde la frecuencia de entrega (y la confiabilidad a una granularidad / frecuencia alta) era crítica para el éxito del negocio. Tenga en cuenta que esta conclusión es para un equipo del mundo real muy particular, no una declaración general de superioridad del corte horizontal.
Una advertencia: probablemente estoy predispuesto en contra de creer en las afirmaciones de habilidades generalistas por parte de cualquier persona en el mundo moderno del desarrollo de software sin pruebas significativas, aunque he conocido a algunos generalistas excepcionales raros. Creo que la generalidad es un orden alto (¿vertical?) De hecho, particularmente a medida que cada nivel crece en complejidad y con la proliferación de lenguajes / plataformas / marcos / implementaciones alternativas, cada una de las cuales satisface diferentes necesidades. En estos días, especialmente, un jack de todos los oficios puede ser fácilmente un maestro de ninguno. Además, anecdóticamente, creo que la mayoría de las personas quieren especializarse un poco, de nuevo con algunas excepciones.