この記事は モバイルファクトリー Advent Calendar 2019の15日目の記事です。
こんにちは.今年度よりエンジニアとして入社した新卒のmaekenです.
自分が所属している開発チームでは,モブプログラミングを開発手法の選択肢として選べるようにしています.
この記事では,モブプログラミングを選択肢に入れたきっかけ,実践方法,そしてモブプログラミングの振り返り結果について紹介しようと思います.
モブプログラミングとは
モブプログラミング(Mob programming)とは,3人以上で1台のコンピューターを使い,1つの課題について取り組む手法です.
ここで言う課題とは,開発タスクやテスト,ドキュメント作成なども対象です.
モブプログラミングは,キーボードを叩く人1人(ドライバー)と,ドライバーに方針やアドバイスを伝え援助を行う人(ナビゲーター)に分かれて行います.モブの数が2人の場合,ペアプログラミングと呼ばれます.
きっかけ
自分が所属している開発チームでは新卒の人が多く,それぞれの得意不得意のスキルに差がありました.
また,新しい言語や新しいフレームワークを書く機会もあり,メンバーによっては全く書いたことが無いというものもありました.
そこで,メンバーのスキル向上と,知識の共有を行うためにモブプログラミングを採用しました.
さらに,モブプログラミングが本当に有効だったのかを振り返りによって確かめるようにしました.
実践
モブプログラミングはドライバーの作業を眺める時間ではなく,モブで(みんなで)プログラミングをする時間です.
眺める時間にならないように,ドライバーとナビゲーターそれぞれに下記の事を意識するようにしました.
- ドライバー
- ナビゲーターから頼まれたことを実装する
- 今考えていることを口から出す
- ナビゲーター
- コードは書かないが,一緒に作業をする人
- ドライバーの手助けをする
- ドライバーの躓きを助ける,先回りする
それを踏まえた上で何回かモブプログラミングを行いました.
ドライバー交代のタイミングや進め方について試行錯誤した結果,私達のチームでは以下のようなスタイルに落ち着きました.
- 朝会のときに,今日はどの作業をモブプロで行うのかをメンバー全員で確認し,時間の確認をする
- 1回のモブの時間は1〜2時間.それ以上行う場合は休憩を取る
- 時間経過(10分)でドライバーを交代する.
- 最初は短いと感じましたが,適度に集中できるのとテンポが生まれる時間が約10分でした.
- タイマーはこのアプリを使っています
- モブプログラミングを始める前に,ホワイトボードにこれから行う課題を細かく分割してTodoリストに書き出す.
- モブプログラミングの最中には,今どのTodoを行っているのか,何が終わっているのかを確認できるようにする
- ゴールをはっきりさせること,それをモブ全員で共通認識を得ること,ゴールを見失わないようにするため
振り返り
モブプログラミングを何回かやった上で,MPIで振り返りを行いました.
利点
- 知識の共有,理解の共有
- モブプログラミングをしながら自然に知識の共有,伝授が行われる
- 全員が同じぐらい知識を共有して持つことが出来る
- 新メンバーの受け入れや担当業務の引き継ぎの時にも役に立つかもしれない
- 他の人の作業テクニックも学べる
- 「えっ,VSCodeの⌘+Dめっちゃ便利じゃん!」
- 常にレビューができる
- モブプログラミングは複数人で作業内容を見ているので,常にレビューをしながら作業ができる
- 1人で作業する時に比べて,手戻りが少ない
- Todoリストで,残りの作業の確認ができる
- モブに関係なく,1人作業でも有効かも
- 強制的に集中できる
- 強制的に休憩できる
- 楽しい
- 困っても,周りがすぐに助けてくれる
- うまく動作した時の喜びも共有できる
欠点
- モブが崩れると戻すのが大変
- 急な差し込み等でメンバーが一時的に居なくなった後,状態をもとに戻すのが大変
- 4人だったのが3人や2人になった時,リズムが崩れる
- 戻ってきたメンバーへのキャッチアップが大変
- 急な差し込み等でメンバーが一時的に居なくなった後,状態をもとに戻すのが大変
- 詰まると効率が悪い
- 全員が知らないものにぶつかってしまうと効率が悪くなる.
- もし全員がほぼ同じレベルの知識・スキルだと効果が薄い
- 全員が完全無知な場合は勉強会になってしまう
- 全員が全て熟知の作業の場合は,モブじゃなく分担作業の方が良い
- モブか分担か,選択できるようになると良い
- ドライバーの画面を映すモニターは大きくないとできない
- モブプログラミングをするためのスペースは意外と貴重
まとめ
業務でモブプログラミングを行うのは初めてでしたが,当初の期待通りスキル向上と知識の共有を得ることが出来ました.
また,チームで作業をすることでチームワークも向上したように思います.
振り返りをした結果,モブプログラミングの利点と欠点が見えてきました.
現在,チームではその利点欠点を認識した上で,この作業はモブプログラミングでいくか,分担作業で行くか選択するようにしています.
モブプログラミングは開発手法として有効な手段の1つだと感じました.是非,皆さんもモブプログラミングを実践してみてください.