チーム内とチーム横断での協働手法
この記事では、避けるべき手法と試してみる価値のある代替案を取り上げる。自分たちのチームが今どこに立っているのかを把握し、取り入れる価値のある協働の手法を見つける助けにしてほしい。 はじめに チームはどのように協力してプロダクトを作るのだろうか。自律的なチームでは、どう働くかはチーム自身が決める。とはいえ、すべてをゼロから考え出さなければならないわけではない。チームは他のチームがこれまでに得た経験から学べるし、学ぶべきである。私は、いくつかの共通した手法が現れるのを見てきた。この記事ではそれらを取り上げ、3つのカテゴリーに分類する。 避ける: 個人主義的なチーム内の手法 試す: 協働的なチーム内の手法 試す: 協働的なチーム横断の手法 より協働的な手法を勧めてはいるが、「協働のための協働」ではない。協働的な手法を好むのには理由がある。 協働的な手法は知識の共有と学習を増やす。これにより、知識のサイロ化や、バス係数(何人いなくなると開発が止まってしまうかの数)の低さといったよくある問題が解消される。 協働的な手法は、チーム内およびチーム間で文脈が共有された状態を作る。これは仕掛かり作業(WIP)の削減につながり、ひいては価値提供の高速化と、アジリティ・柔軟性の向上をもたらす。 協働的な手法は、協働を通じた学習によって新しいメンバーのオンボーディングを速める。 緊密な協働は人と人との関係を強め、離職を減らす。 ここからは、避けるべき手法と試すべき手法をいくつか見ていく。自分たちのチームの現状を評価し、実験してみる協働のやり方を選ぶ材料にしてほしい。 協働手法 避ける: 個人主義的なチーム内の手法 これらの手法は、知識のサイロ化、過度な専門特化、そして高いWIPを招くことが多い。一見すると生産的に感じられるが、それは個人のタスクだけを測った場合の話であって、システム全体のパフォーマンスで見ればそうではない。残念なことに、こうした手法は非常によく見られるため、これが普通で問題ないのだと思い込まれてしまっている。 メンバーそれぞれが自分のアイテムを持つ スプリントの最初に、チームメンバーは自分が個人で取り組むアイテムを選ぶ。スプリント中は、それぞれがかなり独立して自分のアイテムに取り組む。 スプリント中のWIPは非常に高い。チームワークと学習は非常に少ない。 職能の専門特化によるシーケンシャルなプロセス 選んだアイテムを、ウォーターフォールのように逐次的に進める。多くの場合、UXデザイン → 実装 → テストという順序をたどる。チームの中には、これらの活動に対応する役割が明確に残っている。スプリント内で作業量に偏りが出るため、たいていUXの作業は実際のスプリントが始まる前(前のスプリント中)に行われ、テストの作業は次のスプリントで行われることになる。 これでは本当のチームも、本当のスプリントも存在しない状態である。 スプリント中のWIPは非常に高い。チームワークと学習は少ない。アイテムのリードタイムはたいてい3スプリントになる。 メンバーそれぞれが自分の単一スキルから出ない チームには専門特化したメンバーがいて、自分の専門分野から出ようとしない。よくある例はフロントエンド開発、バックエンド開発、DevOpsである。チームは各アイテムをタスクに分割し、各メンバーは自分の専門のタスクだけを取る。アイテムがまだ終わっていなくても、残っているタスクが自分の専門でなければ、その人は自分の専門が必要な次のアイテムに移ってしまう。 スプリント中のWIPは高い。チームワークは専門と専門の引き継ぎのときにしか起きないので、学習は少ない。 フィーチャーの抱え込み(別名「スプリントって何?」) チームは、完成までに何スプリントもかかる大きなフィーチャーに取り組む。フィーチャーをスプリントに収まる縦切りに分割するのではなく、タスクに分割して何スプリントも先まで計画してしまう。実質的にスプリントを無視して、大きなプロジェクトのようにそのフィーチャーに取り組む。毎スプリント、形式上は次のタスクを取るだけである。スプリントは報告のための儀式でしかなくなる。 WIPは高い。スプリントの終わりにプロダクトが本当に出荷可能な状態にはならないため、リードタイムは長い。ユーザーからの早期フィードバックの機会もない。たいていは、大きなフィーチャーの自分の担当部分に一人で取り組むことになる。 依存関係でブロックされる チームのスコープが狭い。プロダクトの定義が小さいチーム、マイクロサービスがチームに対応付けられている場合、あるいは「フロントエンドチーム」のような場合である。バックログのアイテムには他チームの作業も必要になるため、チームはしばしばブロックされる。ブロックされると、他チームが自分たちの分の作業を終えるまで、別のアイテムに移ってしまう。 チームのスコープは組織的に決められていることが多く、これを変えるにはチーム構造の変更が必要になる(後述の「協働的な文脈」を参照)。チーム構造の変更が実施されていない場合、他チームのコンポーネントのコードを自分たちで変更することで、依存を少し軽くするチームもある。その場合、依存は「他チームが変更してくれるのを待つ」から「他チームがレビューして承認してくれるのを待つ」に変わる。 WIPが高く、アイテムは出荷可能な状態でないことが多い。 試す: 協働的なチーム内の手法 これらのチーム内手法は、メンバー間で仕事と文脈が共有された状態を作り、それがさらに協働を生む。これらの手法は、(1) WIPを減らして柔軟性を高め、(2) 知識の共有と学習を増やして知識のサイロ化を減らし、オンボーディングを速める。 同じタスク・同じ文脈に複数人が関わることが多いため、一見すると生産的でないように感じられるかもしれない。しかし、文脈が共有され知識が行き渡ることが、全体としてより良いパフォーマンスにつながる。 協働的なチームは、これらの手法からどれか1つを選ぶというより、好み、都合、すでに持っている知識、アイテムの複雑さなどに応じて、1つのスプリントの中で組み合わせて使うのが普通である。 スプリント計画2での設計と粒度の細かいタスク スプリント計画2で、チーム全員がすべてのアイテムの設計と実装を詳しく議論する。これにより、各メンバーがそれぞれのアイテムについて何をすべきかを深く理解した状態(共通のイメージ)になる。そして、粒度の細かいタスク(たいてい数時間で終わる程度)を作り、それを作業の分担、見える化、同期に使う。チームはアイテムを1つずつ進めることにし、各メンバーは同じ1つ(あるいは少数)のアイテムのタスクを取る。チームは絶えず話し合い、作業を同期させる。これは継続的インテグレーションやトランクベース開発と特に相性がよい。チームが絶えず互いの作業を共有し合う必要があるからである(後述の「協働的な文脈」を参照)。 全員が個々に作業していても、チームの協働の度合いは高い。...
by
by