Dużo myślałem o tym właśnie pytaniu.
Myślę, że ważne jest, aby rozróżniać podział na poszczególne obowiązki od podziału na obowiązki zespołowe. Skoncentruję tę odpowiedź głównie na zespołach krojenia.
Dla pewnego tła: pracowałem w projektach z programistami z pełnym stosem, programistami z jednym poziomem, zespołami pionowymi (z pełnym stosem), zespołami poziomymi (z jednym poziomem) i zespołami ukośnymi. Przez zespół diagonalny rozumiem, że zawiera wszystkie poziomy potrzebne do opowieści, ale niekoniecznie wszystkie poziomy w systemie, a także prawdopodobnie zawiera wielu programistów skupiających się na tych samych poziomach; innymi słowy w pionie w duchu, ale może nieco poziomo w wyglądzie lub w szczegółach wykonania.
Ostatnio pracowałem w grupie, która przekształciła się z zespołów poziomych w zespoły diagonalne (prawie pionowe). Szczególnie pouczające było obserwowanie tej samej grupy ludzi na dwa różne sposoby. To sprawia, że niektóre zalety i wady są dość wyraźne.
Uzupełnię moją dotychczasową opinię następującym podsumowaniem:
Zespoły poziome
Zalety:
- Pomaga w dobrym rozdzieleniu problemów i luźno powiązanych poziomów
- Znacznie łatwiejsze zarządzanie dystrybucją obciążenia
- Łatwy w obsłudze specjalistyczny przewodnik techniczny
- Wspiera współpracę między poziomami, najlepsze praktyki, dumę i kulturę doskonałości
- Dopasowuje się do naturalnych / pojawiających się wzorców komunikacji
Niedogodności:
- Może prowadzić do izolacji poziomów, a tym samym utrudniać komunikację między poziomami
- Włącza kulturę „bąbelkową” poziomu, jeśli nie jest narzucona
- Trudno skorzystać z przywództwa ogólnego
- Utrudnia generalistów
Zespoły pionowe / ukośne
Zalety:
- Wszystkie części historii użytkownika w jednym zespole („one stop shop”)
- W szczególności pomaga dostarczać historie n-tier w jednym sprincie (chociaż czy naprawdę tego potrzebujesz?)
- Wspiera współpracę między poziomami i rozwój umiejętności ogólnych
- Wspiera generalistów
Niedogodności:
- Znacznie trudniejsze zarządzanie dystrybucją obciążenia
- Umożliwia słabą separację problemów i ściśle powiązane poziomy
- Utrudnia specjalizację poprzez ograniczenie komunikacji między poziomami; trudno jest zobaczyć, jak kultura doskonałości mogłaby powstać z tej struktury bez dodawania łagodzących zachowań horyzontalnych / specjalistycznych
Nie sądzę, aby członkostwo w zespole miało jedno uniwersalne rozwiązanie. Wydaje się jednak dość proste, że pionowy zespół jest lepszy dla organizacji wymagających uogólnienia. Jeśli twoi inżynierowie są generalistami i lubią pracować na pełnym stosie, to całkiem dobry powód, aby rozważyć zespoły pionowe. Zespół poziomy jest lepiej dopasowany do organizacji wymagających specjalistów. Jeśli twoi inżynierowie są specjalistami, to całkiem dobry powód, aby rozważyć poziome zespoły.
Jak wspomnieli inni, drugorzędne struktury / zachowania, które przecinają drugi kierunek, mogą pomóc złagodzić wady obu systemów. Jednym z interesujących czynników łagodzących jest czas trwania sprintu. Krótkie sprinty sprawiają, że niektóre wady zespołów poziomych są bardziej tolerowane. Jeśli możesz zbudować backend w tym tygodniu, a frontend w przyszłym tygodniu, może to być wystarczająco szybkie?
Aby zastosować niektóre z tych proponowanych zasad do rzeczywistego problemu ... Powiem, że przekroje poziome działały całkiem dobrze dla bardzo prawdziwego zespołu programistów SaaS, nad którym pracowałem, rozwiązując bardzo trudne problemy techniczne na każdym poziomie ( gdzie specjalizacja była moim zdaniem niezwykle ważna), gdzie częstotliwość dostaw (i niezawodność przy wysokiej szczegółowości / częstotliwości) była kluczowa dla sukcesu firmy. Należy pamiętać, że ten wniosek dotyczy bardzo konkretnego zespołu w świecie rzeczywistym, a nie ogólne stwierdzenie wyższości cięcia poziomego.
Jedno zastrzeżenie: prawdopodobnie jestem stronniczy w stosunku do przekonania o zdolnościach ogólnych u dowolnej osoby we współczesnym świecie tworzenia oprogramowania bez znaczącego dowodu, chociaż znam kilku rzadkich wyjątkowych generalistów. Wydaje mi się, że ogólność jest rzeczywiście wysokim (pionowym?) Porządkiem, szczególnie gdy każdy poziom rośnie w złożoności, a wraz z rozprzestrzenianiem się alternatywnych języków / platform / platform / wdrożeń, każdy spełnia inne potrzeby. W dzisiejszych czasach jack wszystkich transakcji może z łatwością być mistrzem żadnego. Co więcej, anegdotycznie stwierdzam, że większość osób chce się trochę specjalizować, również z pewnymi wyjątkami.