モブプロ始めてみた 〜導入から3ヶ月で見えてきたメリットと課題〜

この記事は[株式会社ビットキー Advent Calendar 2023](https://qiita.com/advent-calendar/2023/bitkey)の16日目の記事です。

# はじめに

ビットキーが提供する、暮らしを支えるソリューション「homehub」。
そのwebフロントやバックエンドを開発するチーム(以降homehub webチーム)では最近、モブプロの取り組みを始めました。

この記事ではチームで始めたモブプロという取り組みに対して、1メンバーかつジョインして半年たらずの私🐣目線で、良かったこと、やってみてわかった課題、今後やっていきたいことなどを書いていきたいと思います！

# モブプロを始める前の状況

まず、モブプロを始める前のhomehub webチームがどんな状況だったかというと、大きく以下のような課題がありました。

1. **メンバー間でドメイン知識に大きく開きがある**
    
    homehub webチームは、2022年末時点で開発メンバーが2人だった状態から、1年で3人もの新規メンバーがジョインしています。開発を進める上で前提となる知識のインプットは最優先ですが、これを新規のメンバーそれぞれが都度詳しい人に聞きにいくのでは、聞かれる側の負荷がとても高いという問題がありました。
    
2. **開発タスクが個人競技化していて、気軽に周囲に相談しづらい**
    
    当初はメンバー同士が互いにやっていることを詳しく把握できていないという状況でした。
    
    これにより、相談するにしても前提の共有 / 理解から始めないといけない状況になり、メンバー間のコミュニケーションのハードルが高かったです。でもせっかくチームで開発しているので、互いに助け合いながらワイワイ開発したいですよね。
    

他にも色々と課題はありましたが、これらをなんとしたい！という雰囲気がレトロスペクティブ(homehub webチームは2週間スプリントのアジャイル開発を採用しています)で上がってきていて、1案として、モブプロやってみるかーということになりました。

# モブプロを始めよう

モブプロを始めるにあたり、まずはモブプロってなんなん？を知り、モブプロで↑の課題を解決できそうかを精査することにしました。

主に参考にしたのはEssential Mob Programmingです

https://speakerdeck.com/martin_lover/essential-mob-programming

Essential Mob Programmingによると、モブプロの価値とは「**個々の相互作用により個々を超えるパフォーマンスを発揮すること**」であり、そこに至るまでに3つのフェーズがあります

- 初級: かしこい入力手
- 中級: みんなが貢献者
- 上級: 僕はチーム、チームは僕

チームとしての成熟度が上がっていくにつれ、メンバーがよりチームとしての成果を出すために最適な行動を積極的に取るようになる…といったところです。

最終的には**個々の相互作用により個々を超えるパフォーマンスを発揮できるチーム**を目指していきたいよねという点と、初級編から始めてみるだけでもドメイン知識格差や開発タスクの個人競技化といったチームが抱える悩みを解決できそう！という所感から、目下は以下の2つの目的を意識しつつ、モブプロを始めてみる運びになりました

- **スキルトランスファーの促進**: 新規メンバーに既存のドメイン知識を効率的に伝えることで、チーム全体の能力を均一化し、知識の格差を解消する。
- **コミュニケーションの活性化**: チーム全員が同じ課題に取り組むことで、相談や意見交換を気軽に行える環境を作る。

# 実際のモブプロの流れ

大体こんな感じの流れで実施していました。

1. 週ごとに固定で決められた時間に集まる
2. よく使う資料をいつでも見れるようにする（API設計書等）
3. 目的をあらためて宣言する
    1. 対応するSBI（スプリントバックログアイテム）の説明
    2. 関連領域のドメイン知識を持っている人から必要な知識のインプット
    3. 具体的な作業を洗い出す
4. 実装方針の認識をあわせる
5. 初回のタイピスト、ナビゲーターを決定
6. タイピストの順番を決定
7. タイマーをセットして交代しつつプログラミング（10分 × タイピストの人数）
8. 休憩（10分）
    1. 画面は一旦閉じて休憩
    2. トイレ行ったり考えをまとめたり

タイピスト、ナビゲーターの役割は以下のとおりです。

1. タイピスト
    - ナビゲーターが実現したいことを**聞き、理解する**
    - 理解したことをコードの形に**実装する**
    - 要請の意味がはっきりしないときには、はっきりさせるための**質問をする**
2. ナビゲーター
    - タイピストが「してくれ」と言ったことはする
    - タイピストが「した方がいい」と言ったことはタスク化する
    - 常にワイワイする

実際の様子はこんな感じです！

![スクリーンショット 2023-12-15 21.40.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3080662/445e4be3-167e-5d0b-a0c2-3de3b997b5b5.png)

タイピストのPCをスクリーンに投影し、みんなでワイワイ

![スクリーンショット 2023-12-15 21.45.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3080662/1125b6fc-9a31-90bc-e4ac-23f5aad5a266.png)

投影されたコードをもとにメンバー同士で議論 ❤️‍🔥

## ポイント

個人的に重要だと思っているポイントは以下です。

- 説明-実装を行ったり来たりする
    - タイピストとしてインプットした内容を理解し実装する / ナビゲーターとして実現したいことを説明する、という両方の役割を行き来することで、関わったメンバー全員が、ドメイン知識(主に機能の背景や価値)、設計、コードがなぜこうなっているのかを自分事として説明できるようになった感覚がありました。
- 常にワイワイする
    - 「これ全然わからないなー」という何でもない発言であっても積極的にすることで、タイピストが孤独感を感じず気持ちよくプログラミングできますし、「何で分かりづらいんだろう」「ここがこうだからじゃないかな」のような建設的な議論につながることもあります。
- 週ごとに固定でモブプロの時間を決めちゃう
    - homehub webチームでは2週間スプリントのうち、初週の木曜日・金曜日に固定でモブプロの枠を押さえています
    - 事前に枠を押さえておくことで、「明日のモブプロで何やるー？」等自然とモブプロが会話に上がるようになりました。個人が「ここはモブプロしたい！」と提案する形ももちろん良いですが、枠があることで**自然とモブプロが選択肢に入るようになった**点が良かったのではないかなと思います

# 約3ヶ月運用してみて良かったこと / 課題

モブプロ導入前に感じていた課題は...個人的には改善の兆しが見えてきたと思っています！

- メンバー間でドメイン知識に大きくひらきがある => 当然今もひらきはあるが、モブプロでやった領域はみんな同じ目線で議論できるようになっている
    - before: A「あれ、ここってどうしてこうなってるんでしたっけ？」B「あーそれは〇〇さんが詳しいところだから聞きに行こうか」
    - after: A「あれ、ここってどうしてこうなってるんでしたっけ？」B「お、それはかくかくしかじかで〜」
- 開発タスクが個人競技化していて、気軽に周囲に相談しづらい => メンバー間のコミュニケーションが活発化し、個人競技から団体競技になりつつある！
    - モブプロを通じて全員がお互いのタスクをある程度触っている状態になったので、以前よりも気軽に相談 & 同じ目線で相談に回答できるようになりました、
    - モブプロ内で質問したり答えたりといったやり取りが頻繁に行われるようになったので、その延長線上で相談の際の心理的ハードルもグッと下がりました。
    - ↑により、どのような状況かもお互いに大体把握できているので、突発的な休みや進捗が厳しいタイミングでも、スムーズにカバーに入れるようになってきています

ほかにも、PRでのドメインや設計思想に関する指摘が減ったことにより、レビューコストの低減等のうまみもありました。

しかし、実際にやっていくなかでうまくいかなかった点・課題も見えてきています。
一例を挙げると...

- 最初はモブプロで初めてみたけど、結果ほぼソースコードを書くことはできず、既存のソース眺めるだけで終わる…
- 詳細の実装から初めて後でひっくり返ることがあって、結局みんなで認識合わせて実装したものが跡形もなくなる…
- モブプロをするにあたり現状の整理とやるべきことを迅速に揃えるために、主催者が事前準備した上で臨んでいるが、これが個人の力量に左右されるので属人的

等々…。

これらの課題に対しては、スプリントのレトロスペクティブで積極的にあげ、try に落とし込んで改善に繋げる活動をしています。

- 最初はモブプロで初めてみたけど、結果ほぼソースコードを書くことはできず、既存のソース眺めるだけで終わる…
    - → 調査やその他諸々を全てモブプロに全て詰め込むのではなく、現状把握会や対応方針の議論会を別途設ける！
- 詳細の実装から初めて後でひっくり返ることがあって、結局みんなで認識合わせて実装したものが跡形もなくなる…
    - → 手戻りがあると厳しい箇所については、まずモブプロで全体の責務の分け方等の認識を合わせ、IFを定義してから具体的な実装に進むようにする！
- モブプロをするにあたり現状の整理とやるべきことを迅速に揃えるために、主催者が事前準備した上で臨んでいるが、これが個人の力量に左右されるので属人的
    - → モブプロ取り組む前のチームの状態(みんなやったことない領域なのか、特定の人だけ詳しい領域なのか、全員満遍なく詳しい領域なのか)ごとに、モブプロでやるべきことの定義と事前準備で必要なことの明確化をし、良いモブプロの再現性を高める(絶賛トライ中です ❤️‍🔥)

今後もチームの成長に伴って新たな課題も見えてくると思うので、順次振り返りと改善のサイクルを回していきたいです。

# 今後の意気込み

初めてモブプロに触れ、その良さを知ることができたので、今後はその良さをもっと活かせるような取り組みをしていきたいものです。

現状は主にスキルトランスファーの目的でモブプロを活用していますが、最終的にはEssential Mob Programmingにあるような**個々の相互作用により個々を超えるパフォーマンスを発揮できるチーム**に向けて、教導形式だけでなくチームの練度に合わせた最適な形式でモブプロを実施できると良いなぁと思っています。

# おわりに

以上、homehub webチームのメンバーとして、初めてモブプロをやってみての感想でした。
色々書きましたが、結局のところモブプロは楽しい！

今後もチームとしてうまく取り入れ、楽しく価値を出していけると良いなぁと思っています。

最後になりますが、この記事は同じく2023年入社でhomehub webチームにジョインした先輩方@ysmtBk、@uuki99 からもご意見いただきつつ書いています。

お二方、ご協力ありがとうございました！

17日目の [株式会社ビットキー Advent Calendar 2023](https://qiita.com/advent-calendar/2023/bitkey) は @momoko_yshr が担当します！