kakakakakku blog

Weekly Tech Blog : Keep on Learning 👍

モブプログラミングの導入実験から得られたプラクティス / 論文「Mob Programming: Find Fun Faster」を読んだ

2016年に発表された論文「Mob Programming: Find Fun Faster」を読んだ.調べると「モブプログラミング」に関連する論文も多くあって,気になった論文から読んでいる.本論文ではモブプログラミングを導入するという「実験」を通して得られたプラクティスを紹介している.実際に読んでみて参考になるプラクティスもあった!

Mob Programming: Find Fun Faster

前提

本論文では,オランダの会社の小さな部門(エンジニア 14 名 / 3 チーム)にモブプログラミングを導入するという実験結果が紹介されている.具体的には以下の「2 チーム」を対象にしていて,どちらのチームも「スキルを向上させる必要があるものの育成を担当できるシニアデベロッパーはいない」という状況だった(ヤバそう🔥).そして,非エンジニアのコーチが1人いるとのこと.

  • Team Red : ジュニアチーム(開発経験が少ない若いプログラマーで構成されている)
  • Team Yellow : ジュニアチーム(若いプログラマーで構成されているが他の会社での経験などを持っているメンバーも多い)

実験の目的はプロダクトのデリバリーではなく「学習」で,モブプログラミングを受け入れてもらうために取り組んだと書いてあった.しかし,導入前は「効率が悪そう」「日常的に一緒に働くのは嫌だ」など,ネガティブな声も多くあったとのこと.当然ながら誰しも簡単に受け入れられるものではないと思うし,気持ちはわかる.

プラクティス

本論文には「実験」を通して得られたプラクティスが「6種類」載っていた.僕自身はモブプログラミングの導入支援をする機会もあったりして,どのプラクティスも理解してるものだったけど,特に「5 : Hourly Retrospectives(1時間ごとの振り返り)」は参考になった.プラクティスの日本語訳は意訳してみた!

  • 1 : Room Setup(部屋を準備する)
  • 2 : Cycle Time(交代時間)
  • 3 : Structured Breaks(計画された休憩)
  • 4 : A Sprint a Day Keeps the Coach Away(コーチを遠ざけた1日スプリント)
  • 5 : Hourly Retrospectives(1時間ごとの振り返り)
  • 6 : A Special Mob: Process Flow(臨時モブ : プロセスフロー)

1 : Room Setup(部屋を準備する)

モビングをする部屋を試行錯誤したというプラクティスだった.開発部屋だと全員で見るには画面が小さく場所も遠く,次に研修部屋だと中央にテーブルを置いて使いやすくなったけど,椅子が硬すぎて長時間座れなかったとのこと.また照明が明るすぎても目に負担を感じるため,最終的にはオフィスチェアを研修部屋に持ち込んだり,照明を調整したとのことだった.本論文には3種類の部屋(試行錯誤)の写真も載っている.

「モブプログラミング・ベストプラクティス」にも場所は重要と書かれているし,納得感のあるプラクティスだった.個人的に部屋を選ぶときに他にも重要なのは「邪魔されないこと」だと思っていて,なるべく中断を避けられる部屋が良いと思う.トレードオフではあると思うけど,リモートモブなら慣れた環境でモビングに参加できるので,部屋の調整はしやすいと思う.マイクの音が悪いと長時間やりにくくなるため,少なくともマイク環境は意識すると良さそう.

2 : Cycle Time(交代時間)

次にモビングの「交代時間」で,Woody Zuill も推奨する「10 分」を試してみたけど,役割を交代するということに慣れてなく,ドライバーとナビゲーターを交代するたびに中断が発生して,流れが悪くなってしまったとのこと.そこで,交代に慣れるために「4 分」に短くしたところ,素早く交代できるようになったとのことだった.さらに!交代時間を短くしたことにより「誰もが常に完全に関与できるようになった (everybody is fully involved all the time)」と書いてあり,これは素晴らしく重要な気付きだと思う.リモートモブなら Git Handover の操作に慣れれば,サッと画面共有をしてすぐに交代できると思う.

kakakakakku.hatenablog.com

3 : Structured Breaks(計画された休憩)

実際に体験するとわかるけど「誰もが常に完全に関与できるようになった」状態だととても疲れる.よって,1時間ごとに「5~10 分」の休憩を取るというプラクティスだった.まぁそれはそうだな!と.

4 : A Sprint a Day Keeps the Coach Away(コーチを遠ざけた1日スプリント)

今回の実験ではコーチの狙いもあって「学習」を重視していたため,明確な成果が出なくても問題ない状態になっていた.そこで,もう少し仕事に近付くように「小さなユーザーストーリー」を1日スプリントで実施したところ,効果が出たとのことだった.FizzBuzz や CodeKata などのお題を使ってモブプログラミングに慣れることは重要だけど,チームにモブプログラミングを実践的に導入する場合は1日でリリースできそうなユーザーストーリーに取り組むというのはベストプラクティスだと思う.

5 : Hourly Retrospectives(1時間ごとの振り返り)

本論文を読んでいたら「コアプラクティスは1時間ごとの振り返り」と書いてあって,とても興味深かった.実際にカンバンの写真も載っているけど,1時間ごとにポジティブ/ネガティブ(改善)を洗い出していた.モビングが進むにつれて進捗が良くなっているチームもあれば,逆にだんだんと進捗が悪くなってネガティブな付箋が増えたチームもあった.モブプログラミングで振り返りをすることは重要だと思うけど,今まで「1時間ごと」はやったことがなかった.特にモブプログラミングに慣れるフェーズや導入支援をするときは参加者の意見を吸い上げるためにも振り返りを多めに行うのは良さそうだった.今後はもっと意識してみるぞ!

6 : A Special Mob: Process Flow(臨時モブ : プロセスフロー)

Special「特別」と訳すこともできるけど,今回は本論文の内容から判断して「臨時」とした.本論文に載っていた内容としては,モビング中にプロセスフロー(業務フロー図)を描こうと思ったら経験者が1人もいなく,たまたまコーチが専門知識を持っていたため,臨時で「ナビゲーターとして」参加してもらったとのことだった.全員で悩みながら課題を解決することも重要だけど,もし近くに詳しい人がいるなら教えてもらうアプローチも重要だと思う.例えば,今まで使っていなかったプログラミング言語を導入するときなども積極的に経験者にサポートしてもらうのが良いと思う.読んでいて Fearless Change「達人を味方に」を思い出した.

結果

実験をした結果,モブプログラミングで働くことによって「全て加速した」と書いてあった.特に以下は大きな変化だと思う 👏

  • チームが自律的にモブプログラミングに最適なユーザーストーリーを探すようになった❗️
  • チームでデプロイをしたらデプロイ時間の長さに気付き改善を行うことができた❗️

例えば Team Red は個人的に勉強をする必要もあり(資格取得など),モブプログラミングによって1日中拘束されることによる不安を感じていたけど,それでも効果を感じて続けていたとのことだった.また Team Yellow はモブプログラミングの効果を感じられず「3回」でやめてしまったけど,その後に難しいユーザーストーリーに着手するときに「やっぱりモブプログラミングが良さそう」と感じて取り組んだりと,さまざまな変化があったと書いてあった.

まとめ

2016年に発表された論文「Mob Programming: Find Fun Faster」を読んだ.モブプログラミングのプラクティスを再確認できて良かった.個人的には「ペアプログラミング」「モブプログラミング」も全員ジュニアデベロッパーで構成するのはアンチパターンになりそうだと思うけど(今回で言うと Team Red),本論文では効果があったと書いてあった.きっとモビング以外に学習もしてただろうし,紹介されていた「臨時モブ」というプラクティスも関係しているとは思うけど,どうやってスキルを向上させたのかという話はあまり言及されてなく,気になるところだった.さて!今後も関連論文を読んでいくぞー💪

Mob Programming: Find Fun Faster

関連記事

kakakakakku.hatenablog.com

参考 : モブプログラミング超入門ライブ

2022年8月30日に AWS Developer Live Show というイベントで「モブプログラミング超入門ライブ! ~ FizzBuzz 編 ~」を企画してライブ配信に挑戦してみた✌モブプログラミングという開発プラクティスがあるんだよー!ということを広く伝えたく頑張ったので,見てもらえると嬉しいのです 🙏 感想などもツイートしてもらえるともっと嬉しいのです❗️

www.youtube.com