こんにちは。プラットフォーム開発のリーダーのカンノです。そして社内の Java 利用率を少しでもあげたいと常日頃から考えている Java ラーです。
今回はチームにペアプロを導入してみたところ、開発に関して想像以上によい効果が出たので、ペアプロ導入の経緯と効果についてです。
チーム発足時の状況
現在の開発メンバーは2018年4月から発足したチームで5人からスタートし、7月に新卒を加えて6名になりました。開発手法はアジャイル開発のスクラムフレームワークを使い、開発言語はもちろん Java で、使用しているフレームワークは Spring Boot です。
チーム発足時のメンバーの Java 習得度は、メンバー5人のうち 2名が未経験、1名が数年ぶりにコーディングをする状況でした。チームとして Java のスキルに若干不安がある状態から始まり、スキルのボトムアップを意識しないと開発が厳しい状態でした。
ペアプロとの出会い
チーム発足時、言葉ではペアプロの存在は知っていましたが、まさか自分のチームでペアプロを導入することになるなんて夢にも思っていませんでした...。
きっかけとなったのは、3月に研修の一環でとある企業のオフィス見学に行った時のことで、企業はプロジェクトの進め方、タスク管理、意思決定などの開発に関する支援を行うITコンサルの会社でした。そこではペアプロで仕事を行う方式を勧めており、見学中もまさに説明を受けているガラスの向こう側でも実際に開発している現場の風景が見えていました... 。本当に全員がペアプロで開発を行なっており、その風景にカルチャーショックを受けると同時に、興味がわき、是非ともうちのチームでもトライしてみたいと思ったんです。そこでアテンドしてくださった方にペアプロの進め方、注意事項などを教えてもらいました。
チームにペアプロ導入
社内に帰った後、ひとまず上長にチームはペアプロで開発したいと相談しました。見学先の企業の方からは「ペアプロを始めるには周りの了解を得るのが大変」と聞きましたが、幸いなことに、オフィス見学に上長も一緒だったため理解が早かったです。
チームメンバーにも「ペアプロを導入して開発していい?」と聞いてみたところ反対する声はなく、すんなりトライすることになりました(正直、半数くらいからの反対意見は覚悟していたのですが … )。逆にメンバー全員が興味を持ってくれ、どうやってペアを決めるのか?ペアは交代していくのか?など、進んで話してくれて本当に助かりました。そうして4月からペアプロを開始しました。
開発の流れ
私たちのチームのペアプロは、プログラミングだけではなく設計の段階からペアで作業をしています。チーム全員でざっくりとした機能概要・実装方針を話し合った後、ペアで実装の詳細を詰めていきコーディングしていきます。
2人で1つのユーザーストーリーマッピングを担当して開発を進めますが、片方がロジックを書いて、片方がテストを書くなんてことはもちろん禁止です。 だいたいチームの1週間の流れを書くとこんな感じです。
1〜4日目はペアで作業を行い、5日目はチーム全員集まって行います。そのため1人で作業をする時間がほぼなく、常に誰かと行動することになります。
更に1〜4日目のペア作業期間の1日をみてみると ※ 昼休みは 12:00 〜 13:00 で 13:00 〜 13:30 は各々メールチェックや別作業をしています。
定時までの8時間の内6〜7時間はペアの相方と一緒にいることになります。
ペアプロの役割
ペアプロではそれぞれに役割があります。
- ドライバー:手を動かしてコーディングを担当
- ナビゲーター:ドライバーが迷わないように指示出しを担当
役割を意識するとしないとでは、効率が結構違います。 ぜひ役割を理解してからペアプロを導入することをおすすめします。
役割を意識する必要性
ペアプロの導入当時は役割を意識せず「どちらがキーボードを操作するか?」だけを決めました。そうなると「コード・仕様に対する理解度が高い人」 or 「技術レベルの高い人」が実装方針などを決めてしまい、もう片方の人は言われるがままに手を動かすだけになってしまいました。
ペアプロの恩恵は様々なものがありますが、その中でも「自分の知らない知識・考え方が得られる事」は貴重です。自分では気付けない考え方や観点などは、人と話すことで得られることが多いんです。せっかくペアプロをしているのに、片方が一方的に方針を決めたりしてしまうと、この恩恵が受けられなくなってしまいます。
そのため、ペアプロは「どのように進めていくか」を互いに話し合い、共通の認識を持って進める事が大切です。
ドライバーとナビゲーターの進め方
私たちのチームでペアプロの進め方は以下の通りです。
- チーム全体で仕様面・実装概要を決める
- ペアに分かれて設計をする
- コーディングの工程を事前に認識合わせする
- 実際にコーディングを始める
- ナビゲータ:決めたコーディングの工程通りに指示する
- ドライバー:ナビゲータの指示に従って手を動かす
- 随時レビューや相談をしながら実装をすすめる
ここで重要なのは、進め方3番のコーディング工程を事前に認識を合わせることです。この作業によって、自分が「気付いていない観点」、「最適なロジック」、「考慮漏れ」を事前に防げるようになります。なにより、2人で決めることによって責任分配がされるため気持ちが楽になります。
また、コーディング工程を事前に認識を合わせることにより、相方と比べて技術レベルが劣る人でも主体的にナビゲータを行う事ができます。
ペアプロの効果
相方のレベルによって得られる効果
ペアプロの特徴のひとつに相方となる人のレベルによって得られる効果が変わってくることがあります。
条件 | 得られる効果 |
---|---|
自分のレベル <= 相方のレベル | ・出来る人の考え方などを学習できる (ロジカルシンキング的な部分) ・技術面での学習ができる |
相手のレベル < 自分のレベル | ・教える(考えを言葉にする)ことで整理が出来る ・相手がどこまで理解しているか把握できる |
育成面でペアプロはとても効果があります。
相手の考え方や意見を聞いてのアドバイスがしやすいため、 Coaching に適しています。もちろんペアの相手が未経験者の場合には Coaching ではなく Teaching になってしまいがちですが、それでも相手がどこまで理解しているかを常に確認しながら進められるため、育成が目的としてペアプロを取り入れるのもありです。
ペアプロで大切なこと
休憩をこまめにとる
ペアプロで大切なことは何か?と問われれば、間違いなくこれを真っ先に言います。なぜなら、ペアプロは想像以上に疲れるからです.... 。1日誰かと一緒に作業をすると常にディスカッションを行うため精神面で相当に疲れ果ててしまい、残業なんてとてもじゃないですがやろうなんて思えなくなります。
休憩はこまめにとり、リフレッシュしてください。
発言責任
これはペアプロというより、我々のチームでのルールの1つです。その中に「発言責任」といったものがあります。これは、「言ったことに対して責任を持つのではなく、思ったことを発言する責任」のことです。別に思ったことを言っただけなので、責任を持つ必要性は一切ありません。
コード憎んで人を憎まず
これは実体験ですが、プログラムはコーディングが終わった後にレビューで指摘を受けるとイラっとしますが、コーディング中に指摘を受けると「なるほど!」と素直に受け入れられることが多いです。ペアプロは二人三脚で作業をするため、寛容な心でいることが大切です。
環境の確保
ペアプロで作業をする際は手を動かすドライバーの画面共有が1つのポイントになります。何かしらツールを駆使して「ナビゲータは自分のモニターにドライバーの画面を映す」か、「ドライバーとナビゲーターが同じモニターをみる」かです。どちらも試しましたが、個人的には後者の1個のモニターを2人横並びでみて作業をする方がやりやすかったです。その場合、スペース確保は必須で、更に大きいモニターがあればなお良いでしょう。
弊社は人が増えるたびに座席が足りない問題が頻発しており、年に数回の席替えは最早名物と言ってもいいのではないか?と言える環境です。そんな現場にいるエンジニア達は、一人一人に割り当てられているスペースも必要最低限のため、チーム内で席替えを行ったり社内のフリースペースなどを利用し作業をしました。
ペアプロのメリット・デメリット
メリット
メンバーの育成がしやすい
ペアプロは常に話しながら進めるので、技術的な観点や考え方が身につく。また、ペアの相方を変えることで、様々な人の教え方のエッセンスが加わっていくのも特徴です。トラックナンバーが2となる
常にペアで仕事をしているので、誰かが辞めることになったり、突然インフルエンザで1週間来なくなったりしても作業が止まることがありません。成果物の Quality が高い
作業についてペアで事前に話をするため、作業工程に無駄がなくなります。また常にレビューをしながら作業を進めるため、1発目に出てくる品質がとても高くなり、手戻りも少なくなりました。質問がとてもしやすい
ペアプロは話さないと作業が進まないため、常に気になった点を話すようになります。チームビルドに向いている
1日一緒に作業しているとある程度相方の好みがわかってきたり、プライベートな話などもするため思った以上に仲良くなります。
ペアプロのデメリット
メールなどをチェックする時間が減る
ペアプロをしていると自分の好きなタイミングでメールのチェックなどができないため、メールなどをチェックする時間が圧倒的に減りました。そのため、こまめに休憩を取り、その間にメールのチェックするなど時間配分を考える必要があります。1人に戻ると寂しい
我々のチームではペアプロを始めてから、1人で作業をすることがなくなってきたので、相方が休んで1人で作業をしているときは、ものすごく寂しさを感じるようになりました...コードリーディング能力が身につきにくい
開発者を続けていくなら他人のコードを読むことは避けては通れない道であり、それは経験などによって能力が向上していきます。しかし、できる人とペアを組んでしまうと攻略本を片手にソースコードを読むようなもので、簡単に質問ができるためほとんど苦労することなくソースコードが読めてしまいます。確かに理解にかかる時間は短縮されますが、苦労していない分気づきが少なくコードリーディング能力が身ついていないことも感じました(全くないわけではないが....)。
※ ペアプロのメリット・デメリットはあくまで我々のチーム内での効果測定であり、必ずしも同じ効果を実感できるとは限りません。
ペアプロのすすめ
今回ペアプロを導入してみましたが、予想以上に良い効果が出たと実感しています。
途中メンバーが辞めることがありましたが、今までは人が抜けたり辞めたりすると少なからず引き継ぎの儀式に時間を取られていました。ペアプロではトラックナンバーが 2 で作業をしているため、引き継ぎが一切なしでもスムースにメンバー編成を変えられることに驚きました。
その他、チームビルディングや品質の面でも恩恵がありました。
ペアプロに少しでも興味がある方は試してみてほしいです。
お知らせ
ぐるなびでは一緒に働く、物作りに対して熱いハートを持った仲間を募集しています。