kakakakakku blog

Weekly Tech Blog: Keep on Learning!

モブプログラミングパターンを紹介した記事「Harvesting Mob Programming Patterns」を読んだ

Agile AllianceExperience Reports として公開されている記事「Harvesting Mob Programming Patterns: Observing how we work」を読んだ.本記事は「モブプログラミング」で遭遇する「振る舞い」「モブプログラミングパターン」として紹介している.モブプログラミングは何よりも「楽しさを増幅」する.しかし,実際にモブプログラミングを効果的に行うのは簡単ではなく,だからこそ「パターン」を知っておくことに意味がある.本記事を読んでいくと「あるあるー!」という「パターン」も多かったけど,名前を付けることに価値があると思う.今回は本記事の翻訳ではなく,読んだ個人的な感想をまとめる!

www.agilealliance.org

Pattern Map(パターンマップ)

まず,本記事に載っている「Pattern Map(パターンマップ)」を見ると,大きく「1. Mob Role(モブロール)」「2. Collaboration Pattern(コラボレーションパターン)」「3. Driving Pattern(ドライブパターン)」の3種類に分類されていて,それぞれにパターンが紐付いている.「計18パターン」のサマリーは筆者の GitHub リポジトリにも載っている.日本語は参考程度にしてもらえればと!なお,本記事で紹介されているパターンに ✅ を付けておいた.

  • 1. Mob Role(モブロール)
    • Facilitator(ファシリテーター)✅
    • Recorder(レコーダー)✅
    • Researcher(研究者)
    • Navigator(ナビゲーター)
    • Driver(ドライバー)
    • Devil’s Advocate(悪魔の代弁者)
  • 2. Collaboration Pattern(コラボレーションパターン)
    • Punch List(パンチリスト)✅
    • Splinter Group(破片グループ)
    • Ridin’ Shotgun(助手席に乗る)✅
    • Mute your mic(マイクをミュートにする)✅
    • Fight Club(ファイトクラブ)
    • Natural Swap(自然なスワップ)
    • Forced Swap(強制的なスワップ)
    • Distracted non-Participant(注意散漫な非参加者)
  • 3. Driving Pattern(ドライブパターン)
    • Thinking Out Loud(大声で考える)
    • Tell me what to write(何を書くのか教えて)✅
    • Driving on Autopilot(自動操縦で運転する)
    • Plowing Through(切り開いて進む)✅

github.com

1. Mob Role(モブロール)

まず「Mob Role(モブロール)」とは,名前の通り「モブプログラミング中の役割」を意味する.一般的には「ドライバー」「ナビゲーター」をイメージすると思う.本記事を読むと「気付かずに他の役割も兼任していること」に気付かされる.計6種類ある役割の中で,本記事では「ファシリテーター」「レコーダー」の2種類が紹介されていた.

🔵 Facilitator(ファシリテーター)

モブプログラミングに集中したり,正しく前進したり,作業時間が伸びているときに中断したり,モブプログラミング中にアドバイスが必要な場面がある.具体的には「休憩を取ろう!」「モブを分割して進めよう!」など.このように,モブプログラミングに参加しながら「客観的な視点で提案をする役割」「ファシリテーター」と言う.モブプログラミングを導入した序盤は僕自身がファシリテーターを担当することが多かったけど,慣れてくると全員がファシリテーターを担当できるようになっていたように思う.1番重要なのは「特定のナビゲーターにファシリテーターを担当してもらう」のではなく,モブプログラミングの「流れ」で,自然に「誰かが」ファシリテーターを担当していたという状態を目指すことと言える.

🔵 Recorder(レコーダー)

モブプログラミング中に設計をしたり,意思決定が必要な議論をするときに,モブプログラミングだからこそ意思決定を素早く行えるけど,必要最低限のドキュメントはある.本記事では ADRs (Architecture Decision Records) が紹介されていたけど,簡単に言えば「チームに必要な決定事項をまとめたドキュメント」となる.モブプログラミング中にドキュメントを書く役割を「Recorder(レコーダー)」と言う.モブプログラミングに参加しながら「レコーダー」を担当するのは難易度が高いように感じるけど,とても重要な役割だと思う.当然ながら「議事録担当」のように「レコーダー」を担当すれば「自分の居場所が確立されている」という意味ではないため,勘違いしないように!本記事には書いてなかったけど,例えば「ドキュメントをレビューするモブセッション」をするなど,レコーダーに負荷を偏らせずに進めることもできる.

adr.github.io

2. Collaboration Pattern(コラボレーションパターン)

次に「Collaboration Pattern(コラボレーションパターン)」とは,名前の通り「モブプログラミング中にコラボレーションを高めるパターン」を意味する.単純にドライバーとナビゲーターが実装をするだけではなく,ちょっとした「パターン」を適用すると効果的だと思う.

🔵 Punch List(パンチリスト)

モブプログラミング中に実装するとしても「アプローチ(実装の順番)」はメンバーによって異なる.例えば,最初からモジュール化をする人もいれば,全体を実装してから細かく分割する人もいる.ようするに実装を始める前に「アプローチ(実装の順番)」をタスクリストとして明確に整理しておくことを「Punch List(パンチリスト)」と言う.本記事を読むと,プライオリティ付きのタスクリストだけではなく,ホワイトボードを使ったグラフィカルなタスクリストも紹介されていた.やはり,ホワイトボードに図解することにより,コラボレーションも高められると思う.

🔵 Ridin’ Shotgun(助手席に乗る)

次は「アンチパターン」の紹介で「Ridin’ Shotgun(助手席に乗る)」と言う.別名としては「Dominate the Mob(モブを支配する)」とも言う.昔話として,馬車で移動するときに手綱を引く人は両手がふさがってしまうため,敵から身を守るために助手席に用心棒を雇っていたという話のメタファーになっている.ようするに「特定のナビゲーターばかり喋っている」というアンチパターンのことを意味している.短期的な効果はあるかもしれないけど,参加できないナビゲーターも増えてしまうため,長期的にはマイナスとなり,避けるようにする.

🔵 Mute your mic(マイクをミュートにする)

1個前で紹介した「Ridin’ Shotgun(助手席に乗る)」のパターンに当てはまっている場面など,多くのナビゲーターがうまくモブプログラミングに参加できてなく沈黙が続いている場合は,効果的なディスカッションにならないため,よく喋るナビゲーターに「意図的に数分間マイクをミュートにしてもらえないか?(もしくは喋らずに見ててもらえないか?)」「ファシリテーター」から提案する.本記事では「気まずい沈黙 (awkward silence) はコラボレーションを促進する」と書いてあり,とても良い表現だと思った.

なお「マイクをミュートにする」のは,モブプログラミングから離脱するという意味ではなく,例えば「レコーダー」「Researcher(研究者)」など,他の役割に専念することもできる.チームが前進するために必要な情報を調査する役割を「Researcher(研究者)」と言う.前に読んだ「モブプログラミング・ベストプラクティス」では「タイムボックス付きの探求」という表現になっていて,どちらも似ている.

kakakakakku.hatenablog.com

3. Driving Pattern(ドライブパターン)

最後に「3. Driving Pattern(ドライブパターン)」とは,タイピストとも呼ばれる「ドライバーの振る舞い」を意味する.

🔵 Plowing Through(切り開いて進む)

ドライバーはナビゲーターのアドバイスで作業を進めていくことに価値があるはずなのに,ドライバーが「勝手に1人で」作業をどんどん進めてしまう場面は少なからずあると思う.そういうドライバーの振る舞いを「Plowing Through(切り開いて進む)」と言う.「耕す」という翻訳も選択肢にあったけど,個人的には「切り開いて進む」が良いと思った.

ドライバーが勝手に進めてしまうと,ナビゲーターのアドバイスが採用されなかったり,チームでコードを理解する機会が得られないため,基本的はアンチパターンと言える.よって,ファシリテーターに注意してもらう.しかし,必ずしもアンチパターンであるというわけではなく,納期が厳しかったり,とにかく完了することに価値があったり,専門家の作業を見て学んでもらいたい場合には有効だと本記事には書いてある.そのときには「Thinking Out Loud(大声で考える)」と言うパターンを使って,ドライバーの思考を喋りながら進めてもらう.過去にチームで新しいプログラミング言語を採用したときは,詳しいメンバーに喋りながらドライバーをしてもらったこともあり,実体験としても重要だと感じる.

🔵 Tell me what to write(何を書くのか教えて)

実装をするときに必要になるコンテキスト(業務知識やモジュール構成など)を詳細に知っているメンバーがチームに数名しかいなかったりすると,モブプログラミングを進めたくても,正しい方向に進められないという不安もある.そのときはドライバーが「コードはどこにあるー?」「どのクラスの責務なのー?」「どのようにテストをすれば良いのー?」など,とにかく積極的にナビゲーターに質問をすることが重要で,この振る舞いを「Tell me what to write(何を書くのか教えて)」と言う.どこに向かっていくのかが明確になれば,うまく進めていくことができる.ドライバーに限らず,ナビゲーターも理解ができなかったら,遠慮なく「待って!」と言うべきだと思う.

まとめ

「Harvesting Mob Programming Patterns: Observing how we work」を読んだ.「1. Mob Role(モブロール)」「2. Collaboration Pattern(コラボレーションパターン)」「3. Driving Pattern(ドライブパターン)」にうまく分類されているし,実体験としても「あるあるー!」と感じられる点も多く,とても良かった.本記事には詳しく載っていなかった「Researcher(研究者)」「Splinter Group(破片グループ)」「Thinking Out Loud(大声で考える)」も個人的に重要だと思っているので,全パターンが詳細に解説されている記事があったら嬉しい!「モブプログラミングパターン」に興味があったら読んでみると良いのでは!

www.agilealliance.org

関連記事

最近は「リモートモブプログラミング」の話題も増えてきた.以下の記事を合わせて読んでもらえると参考になるはず!

kakakakakku.hatenablog.com