👥

チームの開発効率を上げるためにペアプロを導入して得た知見

2023/06/30に公開

はじめに

こんにちは、株式会社Linc'wellでフロントエンドエンジニアやってます、peachbranchです。
この記事では、弊社のとあるプロジェクトでペアプロを導入してみて得た知見を紹介しようと思います。

そもそもペアプロとは??

ペアプロとはペアプログラミングの略称で、2人のプログラマが共同でプログラムを書いていく開発スタイルです。
ペアではなく複数人でやる場合はモブプロ(モブプログラミング)と呼んだりもします。
ペアにはドライバーとナビゲーターという役割があります。
このドライバーとナビゲーターの役割を定期的にスイッチしながら開発をします。

ドライバー

  • 実際に手を動かしてコードを書く人
  • ナビゲーターのサポートの元、プログラムを完成させることに集中する
  • 実装の細かい部分を考える

ナビゲーター

  • ドライバーのサポートする人
  • プログラムの大局的な構成を考える
  • ドライバーが書いているコードを常にレビューする

今回のペアプロの目的

  • コードレビューの負荷軽減
  • 実装後の手戻りを減らす
  • ドメイン知識や仕様の不明点をすぐに共有する
  • 実装に詰まったときにすぐに相談・解消する
  • お互いの開発時の考え方・アウトプットまでの思考を知る

前提や実施環境

  • 今回ペアで作業する方と私は入社したばかりで、アサインされたPJのドメイン知識・プロダクションコードについて詳しくない
  • 私は経験浅い・ペアの作業者は経験値高め
  • リモートワーク
  • discordを繋いで画面共有をしながら実施

3つのポイント

1. ドライバーとナビゲーターは時間を決めて交代する

ペアプロはドライバー・ナビゲーターともに意外と疲れるものです。
私たちは大体45分程度で交代としていましたが、きりが悪かったりすると一時間・一時間半と続けてやることも少なくありませんでした。
そうなると必然的に疲れてしまうので適切な時間を設定し、キリが悪くても交代することをお勧めします。
また、定期的に休憩をとってリフレッシュすることも大切です。

2. 環境の準備

弊社の場合は、フルリモートワークで基本的にオンラインで稼働しています。ですのでペアプロを行う上で実装する画面を共有するツールが必要でした。
私たちの場合は、discordで画面を共有しながらペアプロを行いましたが、vscodeのLive Shareを使ってエディタをシェアし、音声はdiscordで繋ぐなど様々な方法があるかと思います。
https://discord.com/
https://visualstudio.microsoft.com/ja/services/live-share/

3. 進行中の作業・これから何をするのかを実況しながら実装する

ペアプロをしているとドライバーが基本的に手を動かしコーディングし、ナビゲーターが助言するという形になります。ドライバーはナビゲーターに何をしているのか・何をするのかを伝える必要があります。

  • ドライバー:「〇〇のコンポーネントが必要なので作りますね。どこのディレクトリに作るのが適切なんかな...」

  • ナビゲーター:「〇〇のコンポーネントは既存のディレクトリに適切なのないから△△のディレクトリを新しく作るべきかと」

  • ドライバー:「なるほど、じゃあ△△のディレクトリに新しくファイルを作って、その中にテストファイルも作成しますね」

また、わからないことはわからないと積極的に質問するようにしてました。
「わからない」と言うのは心理的なハードルは高いかもしれませんが、ナビゲーターにとっては何がわかっていないかをわかることも大事な情報なので、素直に伝えた方がパフォーマンスを上げることに繋がっていくと思います。
「ペアプログラミング―エンジニアとしての指南書」にも以下のように書かれています

質問をすることによって、ドライバーの考えを徹底的に公開する手助けをします。これはペアプログラミングを、1人が作業してもう1人が監視するのではなくて、もっと共同作業的なものにします。(中略)効率的なペアの関係では、何らかのコミュニケーションがない状態で1分以上経過させてはいけません。このためには、質疑応答を多く行なうこと。そして、話をよく聞くことが必要です。 『ペアプログラミング―エンジニアとしての指南書』 p.102

ペアプロをやってみた所感

私自身ペアプロをやったのは、はじめてでした。
今回実際にやってみて、プロジェクトにペアプロを導入したのは正解だったと思っています!!

新しい発見がある

今回、レベルが高い方とペアで作業を行なったので色々な発見・気付きをすることができました。
具体的には

  • 実装中の考え方を覗けた
  • アウトプットするまでの過程を見ることができた
  • 実装中に使っているツールやショートカットなどを知れた

など多くのことを学ぶことができ、とても良い経験になりました。
上記のようなことは普段、PRの段階では見ることはできないと思うのでペアプロならではの発見でした。

実装に詰まった時の解決スピードが上がった

二人で仕様理解・実装を行うので仕様に対する疑問点・実装中の悩みなどすぐに対応できるので一人では考えつかないようなことがペアの方によってすぐに解決することもありました
このメソッド・型はこんな使い方もできるのかなど、実装中のアイディアを広げることができたりして大きな学びとなりました。

コミュニケーションを取るいいきっかけとなる

普段リモートワークをしていると、

  • 「これどうしたらいいんだ。。。」
  • 「これは聞くまでもないかな。。。」

のようにちょっとしたことで質問したくなる時がありました。
ペアプロをやっているとこういった些細なことを質問するハードルが低くなるので結果的にコミュニケーションが取りやすくなり、とても良かったと思っています。

おわりに

短期的に見ると、ペアで作業する相手の時間が拘束され、二人で1つのタスクをやることになるので別々の作業をやるのに比べて少し開発スピードが落ちたかもしれません。

ただ、長期的に見ると短期間でお互いのプロダクションに対するコードの理解が深まり、レビューもスムーズに行えたので今後の開発スピードは格段に上がっていくと思っています。

今回のケースだとお互いにドメイン知識・プロダクションコードの理解が追いついてない状態だったのですが、結果的にスムーズにレビューを行うことができ、一人で実装するより生産性が上がったと思っています。
上記の収穫意外にも、私個人としてはレベルが高い方とペアで作業を行い実装中の考え方・アウトプットに至るまでの過程を覗けたことが一番大きかったです。
普段業務をしている中だとなかなか知れることではないと思うのでとても良い経験になりました。

今後は別々で作業しながら、実装内容・機能によってはペアプロをしていくと思います。
皆さんも現在のチームやPJの状況次第ではモブプロ・ペアプロを導入することも検討しても良いかもしれません。

Linc'well, inc.

Discussion