こんにちは。ラクスルです。
今回はAMチームで導入している「モブプログラミング(以下モブプロ)」を紹介したいと思います。
モブプログラミングとは
チームのみんなで集まって - 同じ時間に - 同じ場所で - 同じコンピュータを使って - 同じ課題に一緒に取り組む 開発手法です。 ( https://www.slideshare.net/couger2010/at-agile-japan-2017 より )
モブプロの流れ
AMチームでは以下のような流れでモブプロを行なっています。
- チームメンバーが1か所に集まる(AMチームは全員がリモートワークのため、Slackの通話機能と画面共有機能を利用しています)
- 実際に手を動かす「ドライバー」を一人決める(残りのメンバーは指示・相談役の「ナビゲーター」になります)
- タスクに着手する前に、タスクのゴールの共有と、タスクを終了させるためのTODOリストを作成する
- ドライバーとナビゲーターとで相談しながらコードを書き進める
- 25分たったら1コマ終了、ドライバーを交代する
- (ドライバー交代の間に5分ほど休憩を入れてます)
- 3コマ目が終わったらちょっと長めに30分休憩
- (上記を繰り返す)
朝の作業開始時間がチームメンバー間でバラバラなので午前中はソロでできそうな作業や個人的な作業を行い、午後から必要があればモブプロを行う、という流れになっています。
モブプロを行うタスク・行わないタスク
タスクによってはモブプロを行わない事もあります。
単純作業や小さなタスクはモブプログラミングするメリットがうすいのでソロで作業することが多いです。逆に技術的難易度が高いものや、不確実性の高いタスクは積極的にモブプログラミングするようにしています。
また、事前に調査が必要なタスクなどは、モブで調査するのは時間の無駄なため、事前にソロで調査を行ってからモブプログラミングするようにしています。
良かった点
(1) 合意と意思決定がその場で行われることによるスピード感
開発の方針に悩んだ時の「相談」から「意思決定」までのスピードがものすごく速い。不確実性の高いタスクをモブプロすることで「相談」から「意思決定」のサイクルを素早く回せて良さそうです。
(2) 「ハマり」時間が減少
書いたコードが思うように動かず、動かない原因も分からない、いわゆる「ハマる」状況におちいることがよくありますが、モブプログラミング中に「ハマり」が発生した際、チームメンバーの誰かが解決策を持っていたおかげで問題が一瞬で解決することが何度もありました。
(3) レビューに費やす時間が減少
モブプログラミングを行うことでレビューに費やす時間を減らすことができましたし、仕様の解釈ミスによる手戻りも減らすことができました。
(4) 個人の効率化テクニックが皆に共有される
ドライバーがどんどん交代するため、各メンバーのちょっとした効率化テクニックを知ることができたのが新鮮で面白かったです。
困った点
モブプログラミングをしていく中でいくつか困った点もありました。
(1) めちゃくちゃ疲れる
モブプログラミングは疲れます。
開発中はチームメンバーとコミュニケーションをとりつづけるので頭を常にフル回転させる必要があります。そのせいか一人でプログラミングしてる時の数倍疲れます(個人の感想です)。1日中モブプログラミングをしてると、終業時間の頃にはもうグッタリです。
「モブプロ疲れ」に対しては、モブプログラミングの時間に上限を設けたりることで対応しているチームがあるようなので ( https://cabi99.hatenablog.com/entry/2019/11/26/145242 ) 今度試してみたいです。
(2) ドライバーの切り替えが辛い
チーム全員がリモートで作業しているため、ドライバー切り替える際に現時点の変更を一度リポジトリへコミットし、次のドライバーのPCへ反映する必要があります。これが地味に辛い…。
まだ試してはいないのですがVisual Studio CodeのLive Share機能を使えばこのへんを解決できるかもしれません。
ペアプロとモブプロ
モブプロと似たアプローチとしてペアプログラミング(以下ペアプロ)があります。
ペアプロとモブプロはどちらも同じようなメリットをチームにもたらしますが、モブプロの方がメリットがより強く現れるように感じました。
ペアプロ(2×2) VS モブプロ(4×1)
では、ペアプロ2チーム(2×2)と4人のモブプロ1チーム(4×1)とで、どちらの方が生産性が高いでしょうか?
モブプロ(4×1)とペアプロ(2x2)のどちらを選ぶかは、プロジェクトの不確実性の高さとチームメンバーの習熟度によって変わってくるのではないかと考えています。
プロジェクト開始直後のようにプロジェクト全体の不確実性が高く、チームメンバーの習熟度が低い状態では、モブプロの「意思決定の速さ」や「ハマりの解決速度」がペアプロよりも有効に働くように思います。
逆にプロジェクトの終盤、プロジェクトの不確実性が低下し、チームメンバーの習熟度が上がった状態では、ペアプロやソロプロの方が生産性が上がる気がしています。
おわりに
以上モブプログラミングのご紹介でした。なかなか面白い開発のアプローチなので、みなさんのチームでもぜひ一度お試しください。
また、ラクスルでは一緒に働くエンジニアを募集しています。一緒にモブプロしましょう!
https://recruit.raksul.com/guideline/
参考
- Mob Programmingってなんですか?
- チームをつくるモブプログラミング - 内側と外側から語る -
- モブプログラミングを2年間続けて気づいたこと