モブプログラミング(Mob programming)で開発やってみた

モプブロ, 開発手法

はじめに

去年あたりからモブプロの話をちらほら聞き始めてちょっと気になっていたのですが、チームの課題感的にマッチしそうだったので、数ヶ月間色々試しながらチーム開発に組み込んでみました。
ちょっとずつではありますが、上手く回りはじめたのと自分の中でも色々気づきがあったので、そのあたりをまとめようと思います。

これまでチーム開発で感じていた課題

そもそもモブプログラミングを取り入れようとしたきっかけですが、ちょっと楽しそう!というのももちろんありますが、最終的に取り入れたのは以下2つの課題を解決するためでした。

チーム内での知識の共有

現在自分含め4~5名のチームで、開発と運用を行っています。
そのため必要な技術要素も言語、ミドルウェア、インフラ(AWS)と多岐にわたるため、チームメンバーの技術力向上や知識の共有が重要だと考えていました。
勉強会などでそのあたりを解消するというのも当然あると思いますが、チームメンバーの半分は社外で開発を行っているという事情もあり、あまり気軽にできるものでもありませんでした。
モブプロであれば、開発をしながらそういった知識の共有が行えると思い、勉強会よりも効率的だと考えました。

コードレビューの時間と精度

自分のチームではレビューアーをランダムに選出しています。
レビューの観点はメンバーに伝えているものの、当然人によって指摘する内容に差は出てしまいます。レビューにかける時間も人によって差がでますし、経験の少ないメンバーは時間を多く取る傾向にあります。もちろん繰り返し行うことで習得していく訳ですから、それ自体悪いとは思っていませんが、開発の時間もしくはレビューの時間を圧迫したりして、本来かけるべき時間をかけられなかったりすることで、品質に影響しかねないなぁと考えていました。
モブプロであれば、常にレビューしながら(されながら)開発できるので、個人で行うコードレビューは不要となり、このあたりの懸念が解消されると考えました。

どのようにやったか

やり方は書籍等を参考にして自分達に合う方法を探していきました。

実施環境

専用の部屋などは確保できなかったので、MTGスペースをその時間だけレイアウトを変えて実施していました。会社の都合上専用スペースは確保することはできないので、毎回MTGスペースのレイアウト変更する必要があります。実施回数が増えれば増えるほど負担も増えるので、ここは改善したいポイントの一つです。
image-20180608103705976.png
最初は机を縦長にしたままやっていましたが、それだとドライバーは斜め前を向くことになるので、体勢的には不自然な状態になります。
上の写真のように机を横にしてやることで、ドライバーは自然は体勢でプログラミングを行うことができます。

実施頻度

多い時で週2~3回行い、1回の実施時間は2~3時間としていました。
実施時間については、もう少しかけたいところではありましたが、社外で開発しているメンバーもいるので、あまり慣れない環境で長くやるのも負担が大きいと考えこのぐらいの時間にしました。
実は最初1時間とかでやってみたこともありましたが、さすがに1時間では大したアウトプットも出なかったので、2~3時間程度は1回のモブプロで時間を取るようにしました。
実施回数についてもメンバーの負担も考え、多くても週の半分程度としました。

開発環境

自分達の場合、Windows:Mac=4:1だったので、最初はWindows端末でやる想定でした(Macのメンバーはキーボードを持参)。が、いざやってみるとキーボードの設定がめんどくさかったり、思っていた以上に基本的な操作の部分で詰まることが多かったので(まぁそりゃそうですよね)、MacとWindowsそれぞれ準備し、片方使ってないときは調査用端末として利用していました。
AtomのTeletypeやCloud9などの利用も考えましたが、Macのメンバーが開発環境回りで詰まったときに誰も助けることができないので、今までみんなが使い慣れたIDEを各環境で利用するようにしました。MacのメンバーとWindowsのメンバーがバトンタッチするときはGitHubにPushして交代するようにしました。

どのような案件でやったか

最初の課題で上げさせてもらいましたが、ナレッジの共有だったりが大きな部分を占めていいることもあり、個人でできるようなことや、メンバー間で差のないような開発はモブプロではやっていません。
例えば、

  • 新しいフレームワークを使った開発
  • 少し難易度の高い新機能の開発
  • あまりメンバーが触ってこなかったAWSサービスを使った機能やツールの開発

といったものでモブプロを取り入れてきました。

実際どうだったか

良かった点

基本的に課題で上げていたポイントは、モブプロで開発したものに関しては解消することができました。
また前後だとコミュニケーションコストが減ったなぁと感じていますし、チーム内の心理的安全が築きやすくなったと感じています。

改善したい点

そんなこと!?と思われるかもしれませんが、メンバー各人で休憩が自由にとれるようにしたいなぁと思っています。
いつでも休憩を取っていいというふうにしていますが、皆で作業してる途中で休憩にいくということに慣れていないと、人によっては休憩を取りにくいのかなと感じています。
モブプロをやったことある方ならわかると思いますが、絶えず開発が進行していくので結構疲れます。ですので、各自で適切なタイミングで休憩をとって、リフレッシュしないと最後まで集中して臨めません。
現場が最後までいい状態に保てるようにするためにも、各人が適当なタイミングでリフレッシュできるようにするのが大切かなと個人的には考えています。

まとめ

最初のうちは、うまくアウトプットを出せなかったり、沈黙が流れるみたいなこともあって、「イメージと違う!」と思ったりもしましたが、何度か繰り返していくうちに、ファシリテートの仕方とかもつかめてきて、それなりにうまく回せるようになったかなぁと感じています。
万能ではないとも感じていますが、自分と同じような課題感をもっている方がいたら、選択肢には入れておいてもいいと思いました。