モブプログラミングで開発をやってみた

はじめに

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

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

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

チーム内での知識の共有

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

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

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

どのようにやったか

やり方はWEB+DB PRESS Vol.102をかなり参考にして自分達に合う方法を探していきました。

実施環境

専用の部屋などは確保できなかったので、MTGスペースをその時間だけレイアウトを変えて実施していました。会社の都合上専用スペースは確保することはできないので、毎回MTGスペースのレイアウト変更する必要があります。実施回数が増えれば増えるほど負担も増えるので、ここは改善したいポイントの一つです。

配置図
配置図
最初は机を縦長にしたままやっていましたが、それだとドライバーは斜め前を向くことになるので、体勢的には不自然な状態になります。
上の写真のように机を横にしてやることで、ドライバーは自然は体勢でプログラミングを行うことができます。

実施頻度

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

開発環境

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

どのような開発でやったか

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

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

といったもので取り組んできました。

実際どうだったか

良かった点

課題に上げていたポイントは、モブプロで開発したものに関しては解消することができました。
また取り組みを始めてからは、チーム内の心理的安全が築きやすくなったと感じていて、全体的なコミュニケーションコストも下がったと個人的には感じています。

改善したい点

実施環境のところでも書きましたが、専用のスペースは確保したと思っていますが、こればっかりは物理的な制約もあるので難しいかなぁとも感じています。
また、そんなこと!?と思われるかもしれませんが、メンバー各人が休憩を自由にとれるようにしたいと考えています。いつでも休憩を取って良いというふうにしていますが、皆で何かしている最中に一人だけ休憩に行くのは、心理的ハードルが高い人もいるかなと感じています。
モブプロをやったことある方ならわかると思いますが、絶えず開発が進行していくので結構疲れます。ですので、各自で適切なタイミングで休憩をとってリフレッシュしないと最後まで集中して臨めません。
開発の場が最後までいい状態に保てるようにするためにも、各人が適当なタイミングでリフレッシュできるようにするのが大切かなと個人的には考えています。

まとめ

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