👬

Analyze benefits of Pair Programming

2024/03/16に公開

ペアプログラミングは単なる形式的な実践ではなく、その深い理解と意識的な取り組みを必要とするものでありスキルが必要です。

ターゲットとする読者:

  • ペアプロを実践している人(チーム)
  • ペアプロについての基本的な概念については理解している人(チーム)
  • ペアプロのメリットを享受したい人(チーム)
  • これからペアプログラミングを始めたい人(チーム)

ここではペアプロ自体のやり方/用語については省略します。

どこかで聞いたことのある言葉になっていないか

  • 「アジャイル()でやっています。」
  • 「スクラム()でやっています。」

この言葉は表面的にアジャイル/スクラムを実践しているが実態が伴っていなかったり表面的にしか実践できていないケースに対する風刺として表現されている言葉でもある。

「ペアプロ()でやっています」とならないようにするために、ペアプロをメリットから分析した必要な心構えなどについて整理し、本質について探ってみる。

※ここではペアプロ自体のやり方については言及しない。

ペアプロのメリット

ペアプロやモブプロのプラクティスが台頭してきている中で、ペアプロに対する誤解も薄れてきている。
また、ペアプロを行う場合についてのデメリットについては一旦触れないものとする。(当然デメリットも存在するが、ここではメリットにフォーカスして分析する)

  • ダブルチェックによりミスを防ぎやすい
  • ソロに比べタスクの速度(作業効率)が向上する
  • 知識がペア間で共有され、知識量が向上される
  • ペアリングの頻度によって、タスクに対する属人性が下がる
  • レビューは逐次行われ、最終レビューの速度が向上する
  • ペアで密なコミュニケーションが促進され、チームメンバーへの理解度が向上する
  • 相乗効果により設計/コーディングの質が向上する

また、メリットについては分析時にも整理する。

メリットは「行動」だけでは得られない

メリットは、ペアプロを行うだけで意識しなくても得られるメリットとそうでないものがあり、それらについて整理する
順番に分析してみる。

ダブルチェックによりミスを防ぐ

ドライバーとナビゲーターの役割を行なっていれば、単なるタイプミスやナビゲーターの先導により単純な作業ミスは低減できる。これはペアプロを実施しているだけで得られるメリットであり簡単に享受できるメリットの一つであると言える。

ソロに比べタスクの速度(作業効率)が向上する

作業に対する集中力や割込みの点でいえば、互いの監視状況により「何もしていない時間」が減ることによってペアプロの実施だけで作業効率自体の向上は期待できる。

ただし、ペアによってはナビゲーターやドライバーが機能していない場合にタスクに対して何をやっていいか分からず右往左往する時間が増えるだけで、ペアの二人ともが近いレベル且つ低いレベルの場合には作業効率は落ちてしまう。

この問題は時間経過によって解消されることもあり、それ以外にも規範意識に関しては互いに役割を理解し、前に進める行動は結果的に規範意識が生まれることにも寄与する。

そのため単純にペアプロを行うだけで得られるメリットではないと言える。

知識がペア間で共有され、知識量が向上される

ナビゲーター・ドライバー同士が完全に同じスキルを持つ、という状況はペアプロにおいては殆ど皆無である。これは知識・経験量にギャップが生まれていることを意味しており、一見ペアプロを行うだけで期待できそうなメリットではある。

ペアプロを実施するだけでは、必ずしも知識が共有されるわけではない。知識のないドライバーがナビゲーターの先導のもと作業を行い知識を吸収し続けることができるとは限らず、ドライバーにもその知識を吸収するスキルが必要である。これはドライバーのレベルによって左右され、ここのレベルに依存する。

また、役割について理解しないままペアプロを行ったペアにおいては知識の展開が正しく行われずにナビゲーター兼ドライバーのような行動によって、ペア相手に知識を共有することなくタスクを終えてしまう可能性もある。

ペアリングの頻度によって、タスクに対する属人性が下がる

ペアプロの対抗は、ソロと仮定する。ただしチームが二人ではない三人以上になる場合を想定しておく。(二人のチームは一旦ないと仮定する)

タスクに対する属人性はまずソロに対して属人化する。これをペアに属人化させることによって個々人に対する属人性は下がるのは明確なメリットとして得られることに間違いはない。

これは上記メリットの知識共有にも関連し、タスクに長い間ペアが居続けることによって属人性は増していく。チーム内で2ペア以上がある場合にはメンバーの休暇やメンバーには対応できない。ペアチェンジの頻度を上げなければこのメリットは享受しきれない点に注意したい。

レビューは逐次行われ、最終レビューの速度が向上する

このメリットは、チームもしくはペアでコードクオリティに対して責任を持てている場合にのみメリットが生まれる。設計・コードクオリティを無視したペアではレビューに対する概念自体が薄い。

これは逐次行われている状態を作るようにしなければならないだけでなく、ペア内で完結したコードがクオリティが低かった場合には最終レビューではひっくり返されてしまう可能性があることを示唆している。もし最終レビュー工程が存在しない場合、クオリティが低いコードが本流に紛れることを意味している。

ペアで密なコミュニケーションが促進され、チームメンバーへの理解度が向上する

これはペアプロを実施するだけで簡単に享受できるメリットの一つである。

ペアの空気が完全に死んでおり全くコミュニケーションが行われないペアプロはそもそもペアプロ自体が成立しないので、そういったケースでない限りチームメンバーが持つプログラミングスキルや、知識量の把握、人柄などを含めたコミュニケーションの観点に対して寄与する。

相乗効果により設計/コーディングの質が向上する

このメリットは、「知識の共有」や「レビューの速度」にも関連する。優れたメンバーによるコードの正確性・有用性がない場合やそもそもスキルの展開がペア内に行われないとこのメリットを享受することはできない。

まとめ

分析した内容から、ペアプロを行うだけで得られるメリットとそうでないものに分けてみる。

メリット 行動するだけで得られるか否か
ダブルチェックによりミスを防ぐ
ソロに比べタスクの速度(作業効率)が向上する ×
知識がペア間で共有され、知識量が向上される ×
ペアリングの頻度によって、タスクに対する属人性が下がる ×
レビューは逐次行われ、最終レビューの速度が向上する ×
ペアで密なコミュニケーションが促進され、チームメンバーへの理解度が向上する
相乗効果により設計/コーディングの質が向上する ×

もちろん部分的に得られるメリットは存在する一方で、
ペアプログラミングを成功させるには、コーディングスキルだけでなく、ペアプロ自体のスキルや適切な心構えも必要であることがわかる。

総括

個々人がペアプロに対し協力的であり理解をする姿勢がなければメリットは得られず、また個々人のペアプロスキルにより練度が低いペアプロが行われる可能性が否定できない。

全員が初心者のようなメンバーでチームが構成されている場合にもメリットを享受しにくいことも理解できる。

これら弱点も含めて理解し、それでもメリットを享受する気があるならば、ペアプロに対するスキルや理解が伸びていく前提において、損失が利益を上回るポイントである損益分岐点は時間によって変化すると同時に、損失分は回収可能である。つまりペアプロは利益だけでなく投資が必要ということも理解しなければならない。

ペアプロを成功させるには、コーディングスキルだけでなく、ペアプロ自体のスキルや適切な心構えも必要であり単なる技術的な実践ではなく、チームとしてより高い生産性と品質を達成するための戦略的な投資も必要である。

ペアプログラミングの旅は始まったばかりです。実践編では、具体的な成功事例とテクニックを通じて、ペアプロのポテンシャルを最大限引き出す方法を探りたいと思います。

Discussion