私はこの正確な質問についてたくさん考えてきました。
個人の責任によるスライスとチームの責任によるスライスを区別することが重要だと思います。この答えは主にスライスチームに焦点を当てます。
背景について:私は、フルスタック開発者、シングルティア開発者、垂直(フルスタック)チーム、水平(シングルティア)チーム、および斜めのチームと一緒にプロジェクトに携わってきました。対角線のチームとは、ストーリーに必要なすべての層を含むが、必ずしもシステムのすべての層を含む必要はなく、場合によっては同じ層に焦点を当てた複数の開発者も含むことを意味します。言い換えれば、精神的には垂直ですが、外観や実装の詳細はやや水平です。
最近、私は水平チームから対角線(ほぼ垂直)チームに移行したグループで働いています。同じグループの人々が2つの異なる方法で連携するのを見るのは、特に教育的でした。これにより、いくつかの利点と欠点が明確になります。
これまでの私の意見を以下の要約比較でまとめます。
水平チーム
利点:
- 懸念と疎結合の層の適切な分離を促進します
- はるかに簡単なワークロード分散管理
- 専門の技術リードが管理しやすい
- 階層内コラボレーション、ベストプラクティス、プライド、卓越性の文化を育む
- 自然/緊急のコミュニケーションパターンに合わせる
短所:
- 層の分離につながり、層間の通信を妨げる可能性がある
- 軽減されない場合は、層の「バブル」カルチャを有効にします
- ジェネラリストのリーダーシップを活用するのが難しい
- ジェネラリストを妨げる
垂直/対角チーム
利点:
- 1つのチーム内のユーザーストーリーのすべての部分(「ワンストップショップ」)
- 具体的には、単一のスプリントでn層のストーリーを提供するのを支援します(本当に必要ですか?)
- 階層間のコラボレーションとジェネラリストスキルの成長を促進します
- ジェネラリストをサポート
短所:
- はるかに難しいワークロード分散管理
- 懸念事項と密接に結合された階層の分離が不十分
- 層内のコミュニケーションを削減することによって専門化を妨げます。水平/専門家の行動を軽減することなく、この構造から卓越性の文化がどのように生まれるかを確認することは困難です
チームのメンバーシップが万能なソリューションを持っているとは思いません。ただし、垂直化チームは、一般化を必要とする組織に適しています。エンジニアがジェネラリストであり、フルスタックで作業するのが好きな場合、それは垂直チームを検討するかなり良い理由です。水平方向のチームは、スペシャリストを必要とする組織に適しています。エンジニアがスペシャリストである場合、それは水平的なチームを検討するかなり良い理由です。
他の人が述べたように、他の方向をスライスする二次構造/動作は、いずれかのシステムの欠点を軽減するのに役立ちます。興味深い緩和要因の1つは、スプリント期間です。スプリントが短いと、水平チームの短所の一部が許容できるようになります。今週バックエンドを構築し、来週フロントエンドを構築できるとしたら、それで十分な速度でしょうか?
これらの提案された原則のいくつかを実際の問題に適用するには...私が取り組んできた非常に実際のSaaS開発チームにとって水平スライスは非常にうまく機能し、すべての層で非常に困難な技術的問題を解決しました(私の意見では、専門性が非常に重要である場合)、配信の頻度(および高い粒度/頻度での信頼性)がビジネスの成功に不可欠である場合。この結論は、非常に特定の実際のチームに対するものであり、水平スライシングの優位性に関する一般的な記述ではないことに注意してください。
注意点の1つ:私は、いくつかのまれな例外的なジェネラリストを知っていたとしても、現代のソフトウェア開発の世界では、個人のジェネラリスト能力の主張を信じることに対して、大きな証拠はありません。特に、各層が複雑になり、代替言語/プラットフォーム/フレームワーク/デプロイメントが急増し、それぞれが異なるニーズに対応するようになるにつれて、一般性は確かに高い(垂直?)順序であると感じています。特に最近では、すべての取引のジャックは非常に簡単にどれのマスターにもなり得ません。また、事例によっては、ほとんどの人がかなり専門になりたいと思っていますが、いくつか例外はあります。