モブプロやってみた

はじめに

この記事はInsurtechラボのアドベントカレンダー12日の記事です。
私たちのチームは、1月からの3か月間モブプロ形式でコーディングを行っています。実際にモブプロを行ってみたので、振り返ってまとめました。

モブプロを始めた理由

ラボ内では品質の高いシステムを開発できるケイパビリティを取得するために様々なアプローチを実施しています。
システムの品質を高めるための様々なアプローチがある中で、メンバーが興味を持っていたモブプログラミングに取り組んでみることにしました。

我々はモブプロをどう進めたか

メンバー構成

本取り組みでは合計5人のメンバーでモブプロを実施しました。

5人のうち、3人がフルタイム、2人がフルタイムではないメンバーという構成でした。

実施前のメンバーのモブプロ理解度

メンバーの理解度は全員以下の動画を見た程度の理解度からモブプロをスタートしました。

モブの進め方

3つのロール

タイピスト(ドライバー)に複数名から異なる方針の指示が集まると混乱して手が進まなくなるかもしれないので、モブ勢の中にメインとなる指示役(ナビゲーター)を立てた。メインでナビゲーターがドライバーに指示を出し、その他モブ勢が気になったポイントを発言して、ナビゲーターをサポートする進め方としました。

ドライバー:1人
ナビゲーター:1人
モブ(サポーター):3人

役割のローテーション

15分ごとに、役割をスライドさせていきました。

起こったこと

ドライバー難しい問題

  • モブプロを無視してナビゲーターの指示を待たず、自身の考えの元でコーディングを行ってしまう。

ナビゲーター難しい問題

  • 初使用のFWだったため、具体的な指示を行うことができない。
  • そもそも作業指示がうまく伝えられない。

モブ難しい問題

  • ナビゲーターの判断を待たず、ドライバーにあれこれ指示してしまう。
  • ちょっと目を離すとついていけなくなってしまう。

決められた時間で交代するのが難しい問題

  • 開始時点のタイマーセットを忘れてしまう。
  • タイマーが鳴っても作業を続行してしまう。

兼務メンバーへの情報共有難しい問題

  • 具体的なコードの中身を共有できていないので、フルタイムではないメンバーへの現状共有が困難になっていた。

振り返り

原因と対処

ドライバー難しい問題

  • 原因
    • メンバー間で知識レベルの差が大きかった
    • 経験者はものづくりが好きで、発想が湧き出てきて早くコーディングしたい衝動に駆られた
  • 対処
    • 経験者をナビゲーターやモブにすることで発想をドライバーに伝えるなど知識の横展開につなげた

ナビゲーター難しい問題

  • 原因
    • ライブラリの知識がないメンバーがいた
    • 経験者のコードが正しいと感じ、ドライバーを止められなかった
  • 対処
    • ライブラリの使用経験があるメンバーをナビゲーターやモブにした

モブ難しい問題

  • 原因
    • ドライバーとナビゲーターの両方が経験が浅いメンバーの場合に作業が止まってしまう
    • モブプログラミングに慣れていなかった
  • 対処
    • 知識を横展開して、経験が浅いメンバーをフォローした
    • モブプログラミングの経験を積んだ

決められた時間で交代するのが難しい問題

  • 原因
    • 作業に集中していた
    • 作業の進捗が中途半端で、交代したくなかった
  • 対処
    • 交代タイミングのキリが悪い場合、休憩を取った後、ドライバーとナビゲーターを変更せず続行するというルールを追加した

兼務メンバーへの情報共有難しい問題

  • 原因
    • Cloud9で開発していたがリソースに不安があるため、接続する人数を制限していた。それによりモブ開始前の時間にソースを確認したりすることが出来ない状況になっていた。
  • 対処
    • 各開発者の端末のVSCodeからCloud9に接続して、ソースの確認やアプリケーションの動作確認が出来るように対策をしようとしている。
    • 兼務者がこちらの作業に戻ってきた時にドライバーになってもらい、触ってもらいながら不明点などを適宜教えた

モブ自体をどう思うか

ふりかえってみたところ、メンバーからは満場一致で「モブプロは実施してよかった」と意見が出ています。

振り返りで出たモブプロに対しての感想の一部です。

モブプロがもたらした恩恵

プログラム品質の向上

  • 実装と同時にRvが行われるため、チーム全体で実装内容の認識があっているコードが増えた。

メンバーのスキル向上

  • 今回、モブプロを通して知識の横展開がスムーズに行えた。スプリント途中の振り返りでも「ゴール達成できそうな状態をキープできていた」という事実に対し、「実装力がついたから」というポジティブな理由が経験の少ないメンバーから挙げられた。
  • 思いやりの心が育まれた。モブプロをスムーズに行うために、ドライバーのタイピングを少し待ったり、いつもより口数多く説明するなどの心遣いが自然にできるようになった。

コーディング作業を楽しめる

  • 1人じゃない安心感があり、モチベーションが高く保てた。
  • メンバー全員で実装方針を検討するのが楽しい。エモさを感じた。
  • ハプニングもメンバー全員で共有でき、対処できた。

今後モブるならどうするか

心理的安全性の確保

心理的安全性の高い状態であることは必須だと感じたので、そういった雰囲気作りは継続したいです。(難しい場合は、タイマーなどを利用して仕組み化する)

  • 理想的な雰囲気
    • 作業内容についていけない場合に手を止めて認識合わせを行うことができる
    • 休憩を取りたいときにとれる
    • 失敗しても責めない・責められない

役割の割り振り

今回同様、メンバーのスキルによってドライバー・ナビゲーター・モブは柔軟に割り振っていきたいです。

環境も重要だよ

モブプロにおける開発環境の重要性は非常に高いと思いました。

今回我々は開発環境にcloud9を利用したのですが、cloud9とモブプロは相性が悪く、開発効率が大きく低下してしまいました。

モブプロ時に使用する開発環境は以下の要件を満たしているものが適任だと感じました(今思うとcloud9はどれも怪しい・・・)。

  • 同時に編集してもファイルの内容が適切に保持される
  • 複数人で同時に使用できる など