Some Days You Get the Bear

IT系エンジニアの、日々の気づきや考えたこと。

ペアプロは劇薬

codezine.jp
ちょー良記事です!
単にペアプロの導入事例というだけでなく、
品質と開発手法のこと等、いろいろ考えさせてくれます。

それから、何かを変えていくのには、たいへんはパワーがいることだと改めて思いました。
でもそのくらいでやらないと、何も変わらないのだろうな。
だけど大きく失敗もできないし...。となると「ちょっとずつやってみる」ってことになるのかもしれませんね。
     

分かりやすい定量的な効果として、受け入れテストの失敗率が激減しました。導入前と比較して、約20分の1になっています。以前は、開発期限が厳密に決められている中で、スケジュールに間に合わせるために急いで開発を進めなければならない状況が多くのミスを生んでいました。現在では、統合テストの段階でバグをだすことは、ほぼなくなっています。

 最初に、できれば3人、ないしは2人で学び、それをチームに持ち帰って、最初は知っている人たちでデモをし、その後、新しい人にペアに入ってもらいながらローテーションすることで、徐々にできる人を増やしていくというやり方がいいと思います。エンジニアリングプロセスは、基本的にそのペアプロの中で伝えていく形になります。ペアプロを理解している人が1人だけだと、なかなかチームはついてきてくれませんね。

たしかに、ペアプロ導入後にコードレビューの質が格段に上がったことは実感しています。私たちの場合は、ペアプロがリアルタイムなコードレビューになるので、プルリクエストなしでプロダクションに出すようにしたおかげで、スピードも大きく向上しました。

結果として、「コーディングの人数は倍かかるけれども、スループット量で見れば、ペアプロのほうが"生産的"だ」と捉えることもできるわけです。

ペアプロが「合う」「合わない」というのは、プログラマーの個性の問題なんです。自分が作業をしている様子を他の人に見られることで必要以上に緊張してしまう人はいます。チームにペアプロを導入しようとする場合、なじめない人というのは、だいたい1~2割出てきてしまうということがデータとしても知られているんですよ。

ペアプロとの相性という意味では、コードを書くことに達成感を求めるタイプの人も自分には合わないと感じることがありますね。ペアプロでは交代やローテーションをしながら書くことで、ここのコードは俺が書いたという部分がなくなってしまうんです。それは、裏を返すとコードの属人性を回避でき、多くの人がその内容を知っている状態にできるというメリットなのですが、先ほど少し触れたように、中にはペアプロは、面白いけれど達成感がないと感じてしまう人もいます。

iOSアプリの場合、発生した不具合を直したら、再びストアの審査を受けなければリリースできないというのも大きいですね。私たちの場合、サービスの規模がどんどん大きくなっていることで、手作業で行うテストに膨大な工数がかかるようになっていました。(中略)その現実的な解決策として、「ペアプロ」と「テスト駆動」で品質を上げたいと考えていることを訴えてきました。それを、経営層も認めてくれているのではないかと思います。

私が感じるペアプロの一番の楽しさは、いろいろな課題が「シンプル」になることです。1人で考えているときには「複雑」と思えた問題に、2人で解決にあたっているうち、非常に「簡素」な形で答えが出ることがあります。これには、驚きを伴う楽しさがありますね。ペアプロには課題をシンプルにする力があるんです。

もう一つの醍醐味は、ものを作っていく際の「過程」を見ることができるという点です。思考しながらものを作り上げるというのは、複数の選択肢の中からどれかを選び出し、最終的に1つに収束させていく作業です。私は、その「過程」こそが、エンジニアリングスキルの本質に近いと思っています。普通、1人でものを作っているときには、そうした過程を客観的に見られないのですが、ペアプロだと常にそれを見ることができます。

コミットされたコードというのはあくまでも「結果」で、コミットとコミットとの間には、そこに至る思考や作業の過程があります。細かい例だと「コードを上から書いたのか、下から書いたのか」といった書き順は、作業時の思考を表すものですが、それは最終的なコードや本からは分かりません。それを知るためには、ライブコーディングを見たり、ペアプロをやったりするしか方法がないんです。また、スキル差があるペアであれば、ベテランプログラマーが、ある問題に対して、どういう思考過程をたどって、どのくらいの時間で解決に至るのかといったことを目の前で見て、学ぶことができます。これは、ペアプロならではの面白さです。

私から言えるのは、無理をし過ぎるなということでしょうか。ペアプロを実践すると「とても楽しい」と同時に「すごく疲れる」という経験することになります。いきなり何時間もできるというものでは決してありません。ペアプロは、XPの中でも特にアクの強いプラクティスです。ある意味「劇薬」なので、ぜひ用量用法を守ってください。


最後に「モブプロ」のことも。
simplearchitect.hatenablog.com

さらに、マネジメントの観点でも革命的なことがある。先の Mob Programming を実践し続けている楽天チームのメンバーが語ってくれたことだが、「タスクを管理する必要がない」なぜなら、常に一緒に作業をしているので、他の人が何をしているか?という情報交換や、シェアの時間が必要ないのだ。この工数はバカにならないし、伝わらない。それぞれがやったことを「レビュー」しなくても、そもそも常にレビューしている感じだから、そんなことも必要ない。