ペアを毎日ローテーションさせたらどうなるか?

実験を通して頻繁なペアローテーションの利点を明らかにする

ペアプログラミングの利点は広く受け入れられていますが、ペアローテーションに関するアドバイスは依然として議論の的となっています。 チームメイトはいつ、どのくらいの頻度でペアをローテーションするべきでしょうか? そして…ペアを毎日ローテーションさせたらどうなるでしょうか? 私たちは3つのチームと協力して、毎日のペアローテーションを実施しました。 チームがペアリングの利点と課題、そしてそれらを解決する方法を考察するのに役立つ軽量な方法論を開発しました。当初の懸念は克服され、チームはペアを頻繁にローテーションすることの利点を見つけました。 私たちは、ペアを頻繁に交換することで、ペアリングの利点が大幅に向上することを学びました。ここでは、私たちが開発した方法論、私たちの観察、そして参加チームメンバーによって共有された一般的な懸念と洞察を紹介します。

2024年3月6日


Photo of Gabriel Robaina

ガブリエル・ロバイナは、ブラジルのThoughtworksのシニアコンサルタントであり、テックリード兼開発者として活躍しています。現在、サーバーレス技術に焦点を当てた応用コンピューティングの修士号を取得中で、ペアリング技術と分散システムに情熱を注いでいます。ガブリエルは、強力な開発プラクティスと創造性を、クライアントに革新的で効率的なソリューションを提供するための鍵と考えています。

Photo of Kieran Murphy
キーラン・マーフィー

キーラン・マーフィーは、シカゴを拠点とするThoughtworksのプリンシパルコンサルタントです。キーランは、長年のXP実践者、ソフトウェア開発者、テックリード、そしてコーチです。キーランは、人々が優れたソフトウェアデリバリーに喜びを見出すのを支援することに情熱を注いでいます。


大多数の開発者は単独で作業しています。タスクは一般的に、「ソロコーディング」と呼ばれる方法で個人に割り当てられます。ソロコーディングを実践する開発者は、多くの場合、チーム全体で知識を共有することを妨げるサイロに隔離されています。これらのサイロは、特にリモートワーク環境では、チームメンバーが絆を深め、個人的な関係を築くことを困難にします。新しいチームメンバーのオンボーディングは複雑で、コードレビューのような品質ゲートの確立は、デリバリー効率のボトルネックになります。さらに、作業を個々のチームメンバーに結び付けることは、この人がチームを離れる場合(例:休暇や病気休暇)のリスクも生み出します。最終的に、個人はシステムの特定領域の所有者となり、機能固有の知識を得るために行くべき人物になります。

ペアプログラミングは、ソロコーディングに代わる実行可能な選択肢です。ペアプログラミングについては、その利点と課題を探っています。ペアで開発する場合、人々は知識と情報を常に共有することを目標に、緊密に協力して作業できます。これにより、全員が必要なコンテキストを持って貢献できるため、ストーリーの改善につながります。また、すべてのコードがその場でレビューされるため、特定のコードレビュープロセスは必要ありません。ペアリングは、人々がお互いを知り、個人的な絆を深める機会を増やし、チームの結束力を高めます。ペアリングプロセスには、ペアの切り替えが行われるように、定期的なペアローテーションセレモニーが伴う必要があります。これにより、チームの全員と協力する経験をすることができます。このセレモニーの後、開発者は現在のタスクのコンテキストと進捗状況を新しいペアと共有して、配信フローを継続できるようにする必要があります。

ペアローテーションの頻度は、チームによって異なる場合があります。ペアリングの利点を最大限に活用するために、頻繁なペアローテーションが推奨されていますが、一部のチームは、ペアを頻繁にローテーションすると摩擦が生じると報告しています。毎日、または1日おきにペアをローテーションすることは、週に1回ローテーションするよりもコストがかかり、難しいという認識があります。一方、月に一度ペアをローテーションするチームもあります。これは、この期間中にペアが繰り返されないことを前提として、個人がチームの他の5人と少なくとも1回ペアになるまでに少なくとも5か月かかることを意味します。別のルーチンは、ペアがタスクを完了したときにのみローテーションする場合で、これにより頻度が不確定になります。他のペアが同時に終了する可能性は低いため、タスク完了時にペアをローテーションすることも現実的ではありません。

私たちは、ペアローテーションがまれなチームは、ソロコーディングを行うチームで見られるのと同様の症状を示す傾向があることに気づき始めました。長寿命のペアは「共犯者」になり始めます。コンテキストの共有は、ペアの切り替えに時間がかかるほど難しくなります。開発者は、毎月のローテーションのコンテキストで、前月のすべてのコンテキストを新しいペアと共有する必要があります。ペアの切り替え方法が望ましい結果をもたらしていないという証拠があったため、ペアリングのベストプラクティスを通じてチームのパフォーマンスを向上させることを目標に実験を行うことにしました。

私たちの実験

実験の一環として、まれなペアローテーションを実践しているチームに、この頻度を根本的に増やすように挑戦することにしました。2週間、ペアを毎日ローテーションさせたらどうなるでしょうか?この期間中に見つかった困難は何ですか?そして、それらに対処するために何ができますか?この期間中にペアリングの利点を得ることができましたか?今後、チームはペアを毎日ローテーションし続けるか、以前の頻度に戻りたいですか?

チームが頻繁なペアローテーションを検討し、その影響を批判的に分析するのに役立つように設計された演習を開発しました。演習は、1時間のファシリテーションによるホワイトボードセッションから始まります。このセッション中に、チームメンバーは次の3つの質問について考えを書き留め、話し合います。

  • ペアリングはなぜ価値があるのですか?
  • ペアリングを難しくしているのは何ですか?
  • ペアリングを容易にするのは何ですか?

これらの質問は順番に提示されます。チームは各質問に対する回答をボードに投稿するのに3分、話し合うのに7分かかります。

図2:ペアローテーション実験中のチームのフィードバックを表示するMuralボード

演習の翌日から、チームはペアを毎日ローテーションしながら、バックログの作業を続けます。進行中のタスクについては、ペアの1人のメンバーが「アンカー」としてタスクにとどまり、もう1人のメンバーは別のタスクにローテーションします。タスクの「アンカー」は1日おきにローテーションし、チームメンバーが単一のタスクで3日以上連続して作業しないようにします。

チームは毎朝30分間、次の3つの質問についてホワイトボードセッションでミーティングを行います。

  • ペアリングを難しくしているのは何ですか?
  • ペアリングを容易にするのは何ですか?
  • ペアリングをより簡単かつ効果的にするために、今日どのようなプラクティスを試してみるべきですか?

これらの質問は順番に提示され、それぞれにアイデアをボードに投稿するのに3分、話し合うのに5分かかります。これが完了すると、チームは進行中の各タスクのアンカーを特定し、新しいペアの割り当てを促進します。

毎日同じボードを使用して、毎日異なる色の付箋を使用して、この毎日の振り返りを促進しました。これにより、チームメンバーは毎日各領域で提起されたポイントを確認することができ、チームの学習と批判的思考を1週間を通して視覚化することができました。

エクササイズの最終日には、最後のホワイトボードセッションを促進し、チームに継続するペアローテーション頻度を決定するように依頼しました。その後、チームは将来のチームの振り返りでペアローテーション頻度を再検討し続けるように奨励しました。

実験結果

2022年から2023年の間に、3つの個別のチームに、それぞれ1週間この実験を試してもらいました。これらのチームはすべて完全に分散しており、オンラインで協力していましたが、直接会うことはありませんでした。これらのチームのうち2つは、米国とブラジルに配置されていました。

各チームは実験の開始時に同様の懸念を表明しました。以下の最初のセクションでは、これらの懸念のいくつかを共有し、実験の過程でチームの立場がどのように進化したかを説明します。2番目のセクションでは、ペアリングと頻繁なペアローテーションの認識された利点を示すフィードバックをいくつか紹介します。

私たちの実験に参加したすべてのチームは、JiraやTrelloなどのシステムを使用して作業項目を文書化および追跡し、すべて「カード」という用語を使用してそのシステムのレコードを説明しました。以下のフィードバックと結果は、この意味で「カード」という言葉を使用しています。

ペアリングを難しくする要因と認識の変化

「共感、連携、コミュニケーションの不足がペアリングを困難にする」

頻繁なペアローテーションは、より強力なチームダイナミクスを構築するための強力なツールになり得ます。当初、共感と連携の不足は、特にチームメンバーがお互いの作業パターン、ペース、専門分野に慣れていない場合、ペアリングを困難にする可能性があります。ただし、ペアを頻繁に切り替えることで、チームメンバーはお互いをよりよく、そして迅速に知ることができます。この親しみやすさにより、共感し、お互いに連携しやすくなり、最終的にはチーム内のより強力な絆を育みます。さらに、頻繁なペアローテーションの実践は、フィードバックの文化を促進します。チームメンバーは、ペアリングセッションの終わりに短いセッション中に意図的にフィードバックを共有し、継続的な改善とより良いコラボレーションに貢献することを提案しました。

「ペアリング時間の中断が多い」

チームは、長時間の uninterrupted な作業時間の不足による頻繁な中断が原因で、ペアリングに課題があると報告しました。この問題に対処するために、チームは午後にコアタイムを設定し、中断を最小限に抑えました。その結果、会議は午前中または終業時にシフトされました。さらに、チーム内のペアは、ポモドーロテクニックやその他の明示的なタイムボクシング手法を利用して、限られた作業時間中の効率と生産性を最大化しました。

「ペアを毎日交代すると作業が遅くなる」

プロダクトチームの認識として、ローテーションの頻度を増やすとデリバリーパフォーマンスが低下するという考えがあります。彼らは、ローテーションを増やすと効率が低下し、アウトプットが遅くなると考えています。

また、開発者の間には、頻繁なローテーションは追加のオーバーヘッドをもたらし、結果としてチームの速度を低下させるという認識があります。これは、進行中の作業の進化するコンテキストを常に共有する必要があるためであり、これは時間のかかるプロセスと認識されています。

しかし、より頻繁なローテーションの支持者は、コンテキストの共有は頻度が増すにつれてより効率的になると主張します。これは、ペアの切り替えが頻繁に行われる場合、通常、伝達するコンテキスト情報が少なくなるという事実によるものです。さらに、すべてのチームメンバーが進行中のタスクをより包括的に理解している場合、コンテキスト共有の効率はさらに向上します。加えて、頻繁なペアの切り替えは、チームメンバーがコンテキスト共有を促進するためのプロセスを確立する機会を生み出します。

頻繁なローテーションの実践は、時間とともに管理しやすく、合理化されます。チームがこのアプローチに慣れるにつれて、頻繁なローテーションに伴う初期の課題は軽減され、プロセスは徐々に容易かつ効果的になります。

頻繁なペアローテーションによる経験的なメリット

「コンテキスト共有は、頻繁に行うほど簡単かつ迅速になる」

3つのチームすべてから聞いた懸念事項の1つは、進行中の作業でペアメンバーを交換すると、新しいペアメンバーとのコンテキスト共有の問題が発生するということでした。実際、各チームにとって、これは長期的なペアの最も強い動機付けとなっているようでした。

各チームのボードでは、この懸念が最初の数日で提起されることがわかりました。チームメンバーはコンテキスト共有を容易にするための一般的な方法を提案し、実験の終わりまでにそれはもはや懸念事項ではなくなりました。各チームで生まれたプラクティスは、ペアがその日の作業と決定を簡単にまとめてカード自体にメモを追加することで1日を終了することでした。また、カードに保持されているTo Doリストから項目を追加または削除する場合もあります。これらの簡単な実践により、コンテキストが特定のチームメンバーにあるのではなく、カード自体が進行中の作業のコンテキストを伝えることができました。

各チームがカードに関連する新しいプラクティスを発見したことがわかりました。毎日の議論の中で、チームメンバーはカードにより多くのコンテキストを保持すること、より小さなカードにすること、カードに継続的なコメントを追加することを求めていました。

「情報がチーム全体に流れる」

これは、私たちが聞いた中で最も刺激的で洞察に満ちたコメントの1つです。チームは、実際には、アンカーがコーディングセッションの開始時に新しいペアとコンテキストを共有するのにそれほど時間はかからないことを発見しました。共有する新しいコンテキストはそれほど多くありませんでした。また、チームのバックログの他の多くのカードで作業した後、どのカードでも理解しやすくなることがわかりました。頻繁なペアローテーションにより、チームメンバーは毎週より多様なタスクに取り組むことができるため、この経験の獲得が加速されます。

「知識のサイロ化は維持できない」

各チームには、さまざまな経験レベルと専門分野のメンバーが含まれていました。チームは当初、この多様性を頻繁なペアローテーションの課題と考えていました。実験前は、各チームは誰がジュニアまたはシニアチームメンバーか、誰がフロントエンド、バックエンド、またはDevOpsのスペシャリストか、誰がコードベースの特定の領域で以前に経験があるかなどを考慮して、ペアとペアに割り当てられたカードを編成していました。この複雑なマトリックスを維持することで、ペアを頻繁に切り替えることが難しくなり、チーム内の知識のサイロ化が強化されました。

実験の毎日のペアローテーションでは、これらのルールを維持することは不可能でした。ペアが毎日ローテーションすることで、チームメンバーはコードベースの不慣れな領域で作業することを余儀なくされました。さらに、チームメンバーはカードに1日か2日しか滞在せずに他のメンバーに渡すため、不慣れな領域で作業するチームメンバーのリスクははるかに少なくなりました。

私たちのチームは、頻繁なペアローテーションが、人々がカードに与える経験の影響を平準化することを発見しました。長期的なチームメンバーは、新しいメンバーのブロッカーを取り除き、コードベースと開発ツールの成長と学習曲線を加速するのに役立つ知識を共有することができました。

実験の数か月後、1つのチームが興味深いフィードバックをくれました。本番環境で問題が発生した場合、調査と修正を1人の担当者に依存する必要がなくなったことがわかりました。チームは誰でも問題のトラブルシューティングに割り当てることができました。さらに、別のフィードバックでは、今後のペアローテーションによって新しいコンテキストがもたらされ、実装の方向性が変更され、機能開発の初期段階で問題を解決するのに役立ち、チームの時間と手戻りを大幅に節約できたと述べられています。これらは、チーム間で知識を広めることの利点を浮き彫りにしています。

「作業がチームメンバー間で移動する」

チームメンバーは、全員が各カードで作業する前でさえ、進行中のすべてのカードに関連するコンテキストを開発したことを発見しました。これにより、毎日のスタンドアップセッションの有効性が高まりました。チームメンバーは洞察を共有し、事前にリスクを特定し、ブロッカーの削除を互いに支援しました。これは、すべての開発者がすべてのカードについて十分なコンテキストと所有権を持っている場合にのみ可能です。単一の個人はどの作業も所有しておらず、チームの全員がタスク全体の進捗に責任を負います。

結論

実験には毎日のペアローテーションが含まれていましたが、参加した3つのチームは最終的にこの頻度で継続することを選択しませんでした。1つのチームは3日間のローテーションに落ち着き、他の2つのチームは2日間のローテーションに落ち着きました。頻繁なローテーションにより、チームの開発プロセスにおけるボトルネックと摩擦点が明らかになったことに気付きました。毎日ではなく3日ごとにローテーションすることを選択することは、これらのブロッカーを回避することに関連しています。

チームメンバーがペアリングできるのは、1日に数時間だけで、多くの場合、1日を通して断片化されているのが一般的です。チームメンバーは、意味のあるペアリング体験を実現するには1日以上が必要だと感じました。逆に、これは、日中の開発時間の断片化が激しいことも示している可能性があります。これは、チームが実験で行われたよりも低い頻度を選択した理由の1つです。

実験中の認識されている課題の多くは絶対的なものではなく、正面から対処すれば減少します(逆に、回避すれば増加します)。この実験は、参加者がペアリングの課題を振り返り、解決策についてチームとして話し合うための毎日の機会を提供しました。実験の儀式に費やされた時間と労力は、高い投資収益率をもたらしました。

一般的に、実験を実行することで、これらのチームのペアローテーションの頻度が劇的に向上しました。チームの1つは、月に1回ローテーションすることから3日ごとにローテーションすることに移行しました。この頻度の増加は、チームが知識の共有やチームビルディングの向上など、短命のペアの利点を認識した結果です。実験中、チームメンバーは実験に参加することでペアリングのベストプラクティスについてさらに学ぶことができたと報告しました。さらに、ペアリングの振り返りとフィードバック交換セッションを実行することで、チームのフィードバック文化が促進されました。


重要な改訂

2024年3月6日:mfcomに公開

2023年9月22日:Linkedinに公開