モブプログラミングをやってみました

こんにちわ、アキです。全国的に梅雨シーズン到来ですね。ジメジメして不快指数も上がってくる季節ですが、気分はいつもカラっと行きたいものですね。そしてそんな気分が晴れるように元気にコーディングしていきたい方法として、モブプログラミングなんていかがでしょうか。


モブプロをやってみました


モブプロとは


そもそもモブプロの前にペアプログラミングのお話。ペアプログラミングとは


46ca15de0595414eeab1ee16da36e6e3-25.png

  • 1つの画面

  • 1つの端末

  • 2人のエンジニア


という構成で、コードを書く人 = ドライバー、書いてなくてサポートする人 = ナビゲーター という役割でプログラミングをしていくスタイルです。イメージとしては車などのラリーのように、ハンドルを握る人とそれを全面的にバックアップしてサポートするところから来てるようです。


46ca15de0595414eeab1ee16da36e6e3-27.png

モブプログラミングはこれをベースにナビゲーターを複数人にして、みんなで一つのコードをやっつける、という手法です。そうすることにより活発なコミュニケーション、意見交換がされながらコードが発展していきます。


このドライバー、ナビゲーターの役割は一度決めたらそれきりではなくタスクの節目や時間単位を目安に適宜交代していきます。


きっかけ


きっかけは僕がモブプロの勉強会に参加してまるで天啓かのように感銘を受けたから、と言ってしまえばミもフタもないんですが、ちょうど4月から弊部にも新人が入り、チーム的なお作法を共有する場、お互いの理解を深める場、先輩と後輩の垣根を低くする場として上手く活用できそうな気がして試験的に初めてみました。


やってみてわかったこと


モブプロとペアプロは別モノ


ペアプロの場合

ペアプログラミングの場合、技術レベルが同程度なら良いんですが例えば今回のケースのような新人加入時のように技術レベルに差が明確な場合、意外に難しいと思います。


46ca15de0595414eeab1ee16da36e6e3-45.png

1対1になってしまい、そこに差があると結局先輩の言うとおりに手を動かすだけになってしまいがちです。また後輩側が良い意見がある場合でも遠慮してしまったりでなかったことになってしまうことにもなるでしょう。
モブプロやペアプロが周りの助けを借りながら出来る強力さがある一方、ドライバーは思考停止してもできてしまいます。この場合、先輩は後輩に知見をどんどん伝えていきたいところですが、思考停止してしまうとお互いに良い効果が生まれません。
という理屈で、実力差がある場合のペアプロはなかなか難しいことを痛感しました。


モブプロの場合

ナビゲーターが複数という状況が上手く回るきっかけになります。
46ca15de0595414eeab1ee16da36e6e3-46.png
複数の視点を持ち、複数の意見が聞ける、コンセンサスを得ながら進む心強さがあります。また心理的にも時間的にも余裕が生まれやすく、実力差や先輩後輩関係があっても必要以上の緊張感を負うことなく取りくめました。


まとめ


46ca15de0595414eeab1ee16da36e6e3-51.png

  • 他の人の強みや弱みを知るきっかけになる

    • リアルタイムにコードを書いてたり意見を出し合うとレビューよりも如実に相手の考えがわかりました



  • 楽しい

    • ただしもちろんコミュニケーション自体を負担に思う人も居るはずなので配慮は必要



  • ノせる力が必要でした

    • 特に今回のように自分だけ経験者の場合「モブプロ良いね」って雰囲気まで持っていくのにノせる為の強引さみたいなものは必要でした



  • 心理的安全性が高い

    • これが一番大きな効果であり、一番の利点な気がました

      • 設計やコードの方針のコンセンサスがちゃんと取れていること

      • みんなで協力する共闘感






疑問


と、ここまで「モブプロ良いぞ」って説明したところでいくつか質問が出たのでその答えを。


(人的、時間的)リソースもったいなくない?


モブプロがいくら良さそうでも、個々が分担して平行作業したほうがよっぽど効率的に進む気がするという御意見、ごもっともです。
ただし、それはコーディングだけをとってみれば、な実感があります。


通常、開発が進んだらプルリクエストがありレビューする流れというのが一般的だと仮定した時、レビュワーはレビューする段階で初めてコードを見ます。そこからプルリクエストの意図、実装方針や内容の意図、各コードに異常がないかのチェックなどを行なっていくことでしょう。その間、当然レビュワーは自身の別の事は行なえないですよね。


モブプロの場合、意図も方針も納得ずくのコードができあがるため後からレビューする手間もほぼありません。そこまでトータル的に見た場合、決して人的、時間的リソースがもったいないことにはならないでしょう。


全部モブでやったほうが良い?


いえ、モブで解決にするのに適さない課題もあるなあという実感もしました。



  • スコープが広かったり腰を据えてやるべき課題

    • 調査

    • バグ探し



  • 実験的な実装


調査やバグなど情報のインプットと整理がメインの作業に関しては、モブでやったから効率が上がるわけでもなさそうです。また、実験的に試行錯誤する場合も同様です。


まとめ


今現在は僕の所属するモバイルソリューション事業部のサーバーサイドで試験的にやってみている状況です。仕掛け人は僕ですが、なんとか他のメンバーの皆さんにも好評をいただき週一ぐらいのペースで時間を設けて続けています。


今回、社内勉強会で他のチームや部の方々にも知見と楽しさは共有できたと思うので徐々にその波が広がっていったら嬉しいなあ、と思う次第です。


ジメジメした季節もワイワイして乗りきっていきたいですね!




この記事へのコメント