Ich habe viel über genau diese Frage nachgedacht.
Ich denke, es ist wichtig, zwischen dem Schneiden nach individuellen Verantwortlichkeiten und dem Schneiden nach Teamverantwortlichkeiten zu unterscheiden. Ich werde diese Antwort hauptsächlich auf das Schneiden von Teams konzentrieren.
Einige Hintergrundinformationen: Ich habe in Projekten mit Full-Stack-Entwicklern, Single-Tier-Entwicklern, vertikalen (Full-Stack) Teams, horizontalen (Single-Tier) Teams und diagonalen Teams gearbeitet. Mit diagonalem Team meine ich, alle Ebenen zu enthalten, die für eine Story benötigt werden, aber nicht unbedingt alle Ebenen im System, und möglicherweise auch mehrere Entwickler, die sich auf dieselbe Ebene konzentrieren. Mit anderen Worten: vertikal im Geist, aber möglicherweise etwas horizontal im Erscheinungsbild oder im Implementierungsdetail.
Kürzlich habe ich in einer Gruppe gearbeitet, die von horizontalen Teams zu diagonalen (fast vertikalen) Teams gewechselt ist. Es war besonders lehrreich zu sehen, wie dieselbe Gruppe von Menschen auf zwei verschiedene Arten ausgerichtet wurde. Es macht einige Vor- und Nachteile deutlich.
Ich werde meine bisherige Meinung mit dem folgenden zusammenfassenden Vergleich abrunden:
Horizontale Teams
Vorteile:
- Fördert eine gute Trennung von Bedenken und lose gekoppelten Ebenen
- Viel einfacheres Workload-Verteilungsmanagement
- Einfach für spezialisierte technische Leiter zu verwalten
- Fördert die Zusammenarbeit innerhalb der Ebene, Best Practices, Stolz und eine Kultur der Exzellenz
- Passt sich den natürlichen / entstehenden Kommunikationsmustern an
Nachteile:
- Kann zur Isolation von Ebenen führen und somit die Kommunikation zwischen Ebenen behindern
- Aktiviert die Tier "Bubble" -Kultur, wenn sie nicht aktiviert ist
- Es ist schwierig, die Führung der Generalisten auszunutzen
- Verhindert Generalisten
Vertikale / Diagonale Teams
Vorteile:
- Alle Teile einer User Story in einem Team ("One-Stop-Shop")
- Unterstützt speziell die Bereitstellung von n-Tier-Storys in einem einzigen Sprint (obwohl Sie das wirklich brauchen?)
- Fördert die Zusammenarbeit zwischen den Ebenen und das Wachstum allgemeiner Fähigkeiten
- Unterstützt Generalisten
Nachteile:
- Viel schwierigeres Workload-Verteilungsmanagement
- Ermöglicht eine schlechte Trennung von Bedenken und eng gekoppelten Ebenen
- Verhindert die Spezialisierung durch Einschränkung der Kommunikation innerhalb der Ebene; Es ist schwer zu erkennen, wie aus dieser Struktur eine Kultur der Exzellenz entstehen kann, ohne das horizontale / fachliche Verhalten zu mildern
Ich glaube nicht, dass die Teammitgliedschaft eine einheitliche Lösung bietet. Es scheint jedoch ziemlich einfach zu sein, dass das vertikale Team besser für Organisationen aufgestellt ist, die eine Verallgemeinerung benötigen. Wenn Ihre Ingenieure Generalisten sind und gerne Full Stack arbeiten, ist dies ein guter Grund, vertikale Teams in Betracht zu ziehen. Das horizontale Team ist besser für Organisationen geeignet, die Spezialisten benötigen. Wenn Ihre Ingenieure Spezialisten sind, ist dies ein guter Grund, horizontale Teams in Betracht zu ziehen.
Wie andere bereits erwähnt haben, können sekundäre Strukturen / Verhaltensweisen, die in die andere Richtung schneiden, dazu beitragen, die Nachteile beider Systeme zu mindern. Ein interessanter mildernder Faktor ist die Sprintdauer. Kurze Sprints machen einige der Nachteile horizontaler Teams erträglicher. Wenn Sie das Backend diese Woche und das Frontend nächste Woche erstellen können, ist das möglicherweise schnell genug?
Um einige dieser vorgeschlagenen Prinzipien auf ein reales Problem anzuwenden ... Ich werde sagen, dass die horizontalen Schichten für ein sehr reales SaaS-Entwicklungsteam, an dem ich gearbeitet habe und das sehr herausfordernde technische Probleme in jeder Ebene gelöst hat, recht gut funktioniert haben ( wo Spezialisierung meiner Meinung nach unglaublich wichtig war), wo die Häufigkeit der Lieferung (und die Zuverlässigkeit bei hoher Granularität / Häufigkeit) entscheidend für den Geschäftserfolg war. Bitte beachten Sie, dass diese Schlussfolgerung für ein ganz bestimmtes reales Team gilt und keine allgemeine Aussage über die Überlegenheit des horizontalen Schneidens.
Eine Einschränkung: Ich bin wahrscheinlich voreingenommen gegen die Annahme von Behauptungen allgemeiner Fähigkeiten durch eine Person in der modernen Softwareentwicklungswelt ohne signifikante Beweise, obwohl ich einige seltene außergewöhnliche Generalisten gekannt habe. Ich bin der Meinung, dass Allgemeinheit in der Tat eine große (vertikale?) Ordnung ist, insbesondere da jede Ebene an Komplexität zunimmt und mit der Verbreitung alternativer Sprachen / Plattformen / Frameworks / Bereitstellungen unterschiedliche Anforderungen erfüllt werden. Gerade in diesen Tagen kann ein Alleskönner ganz leicht ein Meister sein. Anekdotisch finde ich auch, dass die meisten Menschen sich mit einigen Ausnahmen ziemlich stark spezialisieren wollen.