Я много думал об этом точном вопросе.
Я думаю, что важно проводить различие между разделением по групповым обязанностям и разделением по групповым обязанностям. Я сосредоточу этот ответ в основном на разделении команд.
Для некоторой предыстории: я работал в проектах с разработчиками полного стека, одноуровневыми разработчиками, вертикальными (полными) командами, горизонтальными (одноуровневыми) командами и диагональными командами. Под диагональной командой я имею в виду все уровни, необходимые для истории, но не обязательно все уровни в системе, а также, возможно, несколько разработчиков, сосредоточенных на одном и том же уровне; другими словами, вертикальный по духу, но может быть несколько горизонтальный по внешнему виду или в деталях реализации
Недавно я работал в группе, которая перешла от горизонтальных команд к диагональным (почти вертикальным) командам. Было особенно поучительно видеть, что одна и та же группа людей выровнена двумя разными способами. Это делает некоторые преимущества и недостатки совершенно ясными.
До сих пор я округлю свое мнение следующим сравнением:
Горизонтальные команды
Преимущества:
- Способствует хорошему разделению проблем и слабо связанных уровней
- Гораздо проще управление распределением нагрузки
- Легко для специалиста технического руководства для управления
- Способствует внутриуровневому сотрудничеству, лучшим практикам, гордости и культуре превосходства
- Соответствует естественным / возникающим моделям общения
Недостатки:
- Может привести к изоляции уровней и, таким образом, препятствовать межуровневой связи.
- Включает культуру "пузыря" уровня, если не пропущено
- Трудно воспользоваться преимуществом общего руководства
- Мешает универсалам
Вертикальные / Диагональные Команды
Преимущества:
- Все части пользовательского рассказа в одной команде («одна остановка»)
- Специально помогает доставлять n-уровневые истории в одном спринте (хотя вам это действительно нужно?)
- Способствует межуровневому сотрудничеству и развитию общих навыков
- Поддерживает универсалов
Недостатки:
- Гораздо сложнее управление распределением рабочей нагрузки
- Обеспечивает плохое разделение проблем и тесно связанные уровни
- Препятствует специализации, сокращая внутриуровневое общение; трудно понять, как культура превосходства могла возникнуть из этой структуры без добавления смягчающего горизонтального / специализированного поведения
Я не думаю, что членство в команде имеет универсальное решение. Однако кажется довольно простым, что вертикальная команда лучше подходит для организаций, требующих обобщения. Если ваши инженеры - универсалы и любят работать на полную ставку, это очень хорошая причина для рассмотрения вертикальных команд. Горизонтальная команда лучше подходит для организаций, которым требуются специалисты. Если ваши инженеры - специалисты, это очень хорошая причина, чтобы рассмотреть горизонтальные команды.
Как уже упоминали другие, вторичные структуры / поведения, которые срезают другое направление, могут помочь смягчить недостатки любой системы. Одним из интересных смягчающих факторов является продолжительность спринта. Короткие спринты делают некоторые недостатки горизонтальных команд более терпимыми. Если вы можете создать бэкэнд на этой неделе и фронтенд на следующей неделе, это может быть достаточно быстро?
Чтобы применить некоторые из этих предложенных принципов к реальной проблеме ... Я скажу, что горизонтальные срезы работали очень хорошо для очень реальной команды разработчиков SaaS, над которой я работал, которая решала очень сложные технические проблемы на каждом уровне ( где специализация была, на мой взгляд, невероятно важной), где частота доставки (и надежность при высокой степени детализации / частоте) имела решающее значение для успеха в бизнесе. Обратите внимание, что этот вывод предназначен для очень конкретной команды реального мира, а не общего утверждения о превосходстве горизонтальной нарезки.
Одно предостережение: я, вероятно, пристрастен к вере в утверждения универсалистских способностей любого человека в современном мире разработки программного обеспечения без существенных доказательств, хотя я знал нескольких редких исключительных универсалистов. Я чувствую, что общность - это действительно высокий (вертикальный?) Порядок, особенно когда каждый уровень усложняется и с распространением альтернативных языков / платформ / сред / развертываний, каждый из которых отвечает различным потребностям. Особенно в эти дни мастер на все руки может легко стать мастером. Кроме того, я обнаружил, что большинство людей хотят специализироваться совсем немного, опять же с некоторыми исключениями.