Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails以外の開発一般

ペアプロを極めて最強の開発チームをつくる(2/4)ペアプロのメリット(翻訳)

第2章: ペアプロのメリット

ペアプログラミング(以下ペアプロ)はどんなことに効果があるのでしょうか?考えられるメリットをひととおり押さえておくことは、ペアプロすべきかどうかを決めるうえでも、ペアプロをうまく回すうえでも、困難の中でペアプロするモチベーションを保つうえでも重要です。ペア作業で目指すものは、主に「ソフトウェアの品質」と「チームの作業フロー」です。

さて、ペア作業でどのようにして「ソフトウェアの品質」と「チームの作業フロー」を達成するのでしょうか?

1. 知識を共有できる

ペア作業のメリットとして、まずは最もわかりやすく議論の余地の少ないものから始めましょう。すなわち「知識の共有」です。ひとつのコード片に2人で取り組むことで、チーム内での知識(技術面およびビジネスドメイン面)の伝達が日々促進され、知識のタコツボ化を防げます。しかも、1つの問題を2人が理解して議論することで、よいソリューションを見つけるチャンスも増えます。さまざまな経験や視点があることで、より多くの別案を検討できるようになります。

役に立つヒント

ペアを組んでタスクに取り組むときは、タスクに関連する技術やビジネスドメインについての知識がなくても決して尻込みしないこと。自分が一番楽にやれる分野のタスクばかりやっていると、学びの機会がごっそり失われますし、ひいては知識がチーム内に定着する機会も失われてしまいます。

チームメンバーがいつも同じことばかりやりたがる傾向があることに気づいたら、その人の専門知識をチーム内に広めるために他のタスクもやってもらいましょう。それによってチームの「技術力」「業務知識」や「各メンバーの強み」「分野ごとのギャップ」を網羅したスキルマトリックスを作成できるようになります。このスキルマトリックスをチームの部屋の壁に貼っておけば知識の共有も広まって共同作業がはかどります。

2. 振り返りが促進される

ペアプロでは、アプローチやソリューションについて自分の頭だけで考えるのではなく、議論することを強制されます。声に出してはっきり説明することで、理解が本当に正しいかどうか、そのソリューションが本当によいものかどうかを見直せるようになります。これはコードや設計の話のみならず、ユーザーストーリーやストーリーがもたらす価値についても同様です。

役に立つヒント

自分がまだわからないことについてお互いが気兼ねなくオープンに話せる空気感を醸し出すためには、2人の間に信頼関係を築く必要があります。チーム内の人間関係構築が、ペアリングでさらに重要度を増す理由がこれです。定期的に1on1やフィードバックセッションの時間を設けましょう。

3. 集中力を維持できる

ペアを組むことで、さまざまな構造的アプローチをずっと楽に取り入れられます。ペアの一方は「今この作業を行う理由」と「今の作業で目指しているもの」を明確に表明しなければなりません。ひとりで作業しているとずっと気が散りやすくなってしまうものです。深く考えずに別のアプローチを「取り急ぎ」やってみた結果、「うさぎの穴」から脱出するのに何時間もかかってしまったりします。ペアのもう一方は、ペアの相方がそうした「うさぎの穴」に陥らないように注意し、今終わらせるべきタスクやストーリーに集中できるよう援護射撃します。順調にタスクが進むようお互いに助け合いましょう。

役に立つヒント

計画は2人で一緒に立てましょう!自分の直近のタスクについて話し合い、ゴールに到達するのに必要なステップを考え、それぞれのステップを付箋にメモし(リモートならチケット管理システムのサブタスクにメモします)、順にひとつずつ取り出して進めます。可能ならポモドーロテクニックも併用して、1ポモドーロに1つのゴールを達成するようにしてみましょう。

「成功と失敗の分かれ目はコミュニケーションにあり」を決してお忘れなく。「今これこれをやっています」と相手に明確に伝え、相手はそれについて説明を求めるという作業をお互いに繰り返しましょう。

4. 書いた端からコードレビューできる

ペアを組んで進めることで、小さな課題についても大きな課題についても4つの目玉で見つめることができ、より多くのミスを(作業完了前ではなく)作業中に発見できるようになります。

コーディング作業にコードのリファクタリングを常に含める点は、ペアプロでも同様です。自分のそばに立ち会う人がいることで、アプローチや名前付けをどうするかなどの問題をすぐ話し合えるようになり、コードの改善がはかどります。

(コードを書きながらではなく)コードを書き上げた後でのコードレビューにはいくつかの欠点があります。これについて詳しくは最終章「ペアプロは導入すべきなのか」をご覧ください。

役に立つヒント

お互いに遠慮なく質問しましょう!質問こそが、自分の作業を理解してよりよいソリューションにたどり着くための最も強力なツールです。コードが相手にとって読みづらく理解しづらいのであれば、もっとわかりやすい別の方法を試しましょう。

ペアプロのコードをもっとみっちりコードレビューして欲しいと感じたら、ペアリング方法を改善する方法があるかどうかを改めて考えてみましょう。ペアセッション中に気になることや心配事を片っ端から質問していませんか?なぜそうせずにいられないのでしょうか?改善のためには、どこを変更する必要がありますか?

5. 2人が「2種類のモード」で考えられる

古典的な「ドライバ」「ナビ」スタイルの項で既にご説明したように、ペアを組むことでコードにさまざまな視点を持ち込めるようになります。通常、ドライバーの脳は「戦術モード」で現在のコードを詳しく追います。一方、ナビの脳はより手広く「戦略モード」で考えます。大きな絵(ビッグピクチャー)を考え、次のステップやアイデアを先回りして付箋にメモします。2つのモードを1人の人間だけで切り替えながらやれるでしょうか?1人ではたぶん無理でしょう。(2人の)戦術的な視点と戦略的な視点を組み合わせれば、心に大きな絵を描きつつ詳細にも注目できるようになり、コードの品質が向上します。

役に立つヒント

キーボードの入力担当、つまり役割を定期的に入れ替えることをお忘れなく。それによってリフレッシュして煮詰まりを防げますし、2種類の思考モードのどちらについても訓練できるようになります。

ナビ担当は、つい「戦術的」に考えてしまわないよう気をつけましょう。コーディングの細かな点はドライバーに任せてください。ナビの仕事は、一歩身を引いて中期的に長い目で見て思考し、戦術モードで作業しているドライバーを補完することです。

6. コレクティブコードオーナーシップ(CCO)を目指せる

チーム全員がコードのオーナーシップを持ってコードを掌握する「コレクティブコードオーナーシップ」(collective code ownership)によって、個別のモジュールのオーナーシップという概念を放棄する。コードベースはチーム全体がオーナーシップを持ち、誰がどの部分を変更してもよい。
Martin Fowler Code Ownership

ペア作業が一定して行われるようになれば、コードのあらゆる行について常に2人以上で作業したことを確信できます。これにより、ほぼすべてのコードをチームメンバーの誰もが気兼ねなく変更できるチャンスが増えます。そして(意外にも)、コードベースの一貫性も1人でコーディングした場合に比べて高まります。

役に立つヒント

ペアプロさえやっていればCCOを達成できる、という保証はありません。CCOを達成するには、ペアリングをさまざまな組み合わせ/さまざまな分野でローテーションして、知識のタコツボ化を防ぐ必要があります。

7. WIPタスク数を制限しやすくなる

WIP(作業中: work in progress)タスク数を一定以下に制限することは、チームのワークフロー改善でおなじみカンバン方式の中核にある法則のひとつです。WIP数制限を設けることで、チームが最も重要なタスクに集中しやすくなります。WIP数制限を取り入れたチームは、マルチタスクを個人が引き受けるという非効率な方法ではなく、チームレベルでマルチタスクが回るようになり、多くの場合生産性が向上します。特に大人数のチームでは、チームで同時並行で進められるタスク数をペアプロで自然に抑えられるので、全体の集中力も増加します。これによって作業が常に滞らずに流れるようになり、作業をブロックする要因も即座に解決されます。

役に立つヒント

チームのWIP上限数は、チーム内のペアの数と同じに設定しましょう。かつ、チームのWIPタスクをチーム内に貼り出すなどして(リモートであればオンラインプロジェクト管理ツールで)見える化しましょう。次のタスクを拾う前にWIP上限数を確認するようにしましょう。WIP上限数を守ることで、ペア作業の習慣を自然に身につけられるという効能も期待できます。

8. 新メンバーの早期研修にも使える

ペア作業によって知識を共有できるので、チームに加わった新メンバーの研修にも役立てられます。新メンバーはペアの助けを得てプロジェクトや業務内容、組織を理解できるようになります。チームメンバーが変動するとチームのフローに影響が生じますし、お互いを知るにはある程度の期間も必要です。ペアプロは、ひとりで作業する場合に比べて遥かに多くのコミュニケーションが必須となるので、メンバー変動の影響を最小限に抑えるのに有用です。

役に立つヒント

新メンバーをペアに組み入れさえすれば、後は「魔法のように」ひとりでに研修がうまく回ってめでたしめでたし、というわけにはいきません。必ず最初のペアリングセッションで「大きな絵」と「背景となる全体コンテキスト」も新メンバーに伝え、研修期間もある程度長めに確保してください。こうすることで新メンバーが脱落せずについていきやすくなり、ペアリングにもチームに貢献できるようになるので、ペアリングを最大限に活用できます。新メンバーには必ず「新しいPC」をペアリング用に渡し、新メンバーが自分で作業環境をセットアップできるよう取り計らってください。

新メンバーの研修計画には、習得すべき項目のリストも付けましょう。項目によっては、その項目のためのセッションスケジュールを押さえておくのもよいでしょう。その他の項目については、ペアを組み替えるときに新メンバーが自分で研修計画に盛り込んでもよいでしょう。ペアリングセッションでこなした項目は、リストでチェックボックスをオンにするなどして消し込みます。このようにしておくと、研修の進捗がチーム内でひと目でわかるようになります。


おたより発掘


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。