モブプロをやってみた。良さ。使いどころ。 #devkan

devlove-kansai.doorkeeper.jp

モブプログラミングやってきました!面白かったー。疲れたー。面白かったー。

モブプログラミングって?

チーム全員(プロダクトオーナー含む)が集まって、1人だけがコードを書いて、それがスクリーンに映しだされてて、その他の人みんなでやいやい言いながらものを作っていく。というスタイル。ルールは「ドライバー(コードを書いてる人)は、ナビゲーター(周りでやいやい言ってる人)に言われた通りにコードを書く。ドライバーが自分で考えてコードを書くのはダメ。」という感じ。

f:id:bufferings:20170529191606j:plain

やってみた

7人ぐらいのチームで、プロダクトオーナーからのお題に対してTDDで実装をやってみた。2部制でやったのだけど、第1部はKotlin + IntelliJ IDEAでローマ数字の計算を。Kotlin全く知らないし、IntelliJも全然慣れてない。第2部はJava自動販売機を。こっちもIntelliJだったな。1人7分で交代して次の人。だいたい1時間で一周して終了。

できたもの

ほとんどの人がKotlin知らないのに、なんか動くものが作れた。Javaの方も、動くものが作れたな。とは言っても、どちらも、とりあえず要件を満たして動くってだけで、うんこーど。せっかくの素振りだから楽しもうと思って!

おこったこと

今回はTDDの勉強会じゃないからそっちは置いといて。モブプログラミングで何が起こったか。と考えると、こんな感じかな:

お互いのことが分かった

コードのスタイルや、考え方、アドバイスのやり方、何を大事にしているか、どういう部分が苦手か、など。ペアプロと違うのは、それが僕じゃない別の誰かとの会話によってもたらされているということかな。僕だったら引き出せていないようなものを、別の人同士の会話の中から気づくことができた。

なぜそのコードになっているかを全員が知っている

今回は特にうんこーどを書いたんだけど、どういう経緯でそうなったのかが共通認識として持てている。もし、それなしにコードだけ見たら「はっ?」ってなるようなものも、「あー。あのときこういう経緯で進めたからねぇ。」って分かってる。

そのコードに対してどう思っているかを全員が知っている

書きながら「この辺はリファクタリングしたいね」とか「ここでもういっこジュースの種類が増えたらどうする?」「今はいいんじゃない?」とかそういう会話が出てくるので、全員がそのようなポイントについての共通認識を持てている。

技術的なことのキャッチアップができる

Kotlinのこと全く知らなかったので、僕がドライバーのときに「メソッドって何で始めるの?え?fun?」とか言いながら書いてて、そしたらナビゲーターで知ってる人が「そうそうそこでコロンだね」とか言いながら教えてくれて。Kotlin触ったことない別の人もそれを聞きながら「へー」とか言って、その人の番ではすらすら書いてた。

わかったこと

ドライバールールで意図が伝わる

ドライバーは自分で考えたらダメなので、全ての考えがナビゲーターからドライバーに会話で伝えられる。なので、意図が全員に伝わる。

ドライバーやるので置いてかれない

全員が交代でドライバーをするので、少なくとも自分の番のときに参加しなきゃいけない。なので、ナビゲーターとしてもしっかり理解しておこうと思うし、理解できてないことを自分の番で聞くことができる。

ペアプロよりも余裕がある

何人もいるので、ペアプロよりも余裕がある。他のナビゲーターにまかせて、自分は気になることを調べておくとかもできる。僕はビール飲んでた。

どういうときに使う?

以上をふまえて、どういうときに有効だろう?と考えてみる。けど、うまくまとまんないや。

全員で認識を合わせたいとき

は良さげ。ペアだけじゃなくてチーム全体として、結果としての情報じゃなくて、過程の情報を共有することができるから。

全員の知恵を持ち寄りたいとき

も良さげ。それぞれ得意分野が違ってて、それを合わせて一つのものを作りたいなってとき。

リーダーが自分の考えや方針をチーム全員に伝えたいとき

とかにも良さげ。そのリーダー1人が書きながら説明するよりも、モブプロ形式の方が全員手を動かしながら覚えられるし。あと、そのリーダーがドライバーのときには、他のメンバーが指示出さなきゃいけないからねw

不確定要素が多い段階でのモブプロ

も良さそうかな。POに「この場合はどうなるの?」「こっちはどうなるのが正解?」とか聞きながら進めて、それに対して「汎用的にするのは一旦待って、今は目の前の要件だけを考えるようにしようか」ってPOも含めてチームでそのやり取りの共通認識が持てるし。

細かくものを詰めていくというよりは

どこが課題か、何を考えないといけないか、どんな技術的な難しさがあるか、とかを全員で共通の認識を持つ、という感じに使うのが良いのかなと思った。その後はタスクの洗い出しをして、それぞれまたペアで作業をしていくような感じ。

今回は特にそっちに振り切ってやったんだけど、そうやって一旦どういう実装ができるかをばーって出して、それに対して「在庫どう持とうか?」「ジュースはEnumじゃきついね。動くけど。」とか一通りの経験と議論を共有したうえで、「よし!今日作ったものは全部捨てて、明日のモブプロでちゃんと実装していこうぜー!」みたいにできそうかなーって思ったりした。

贅沢だったなー!

ぷーさにさん、と、よーはつさんの二人がリードしてくれてるのも贅沢。みんなありがとー。面白かったー。癒やされたー!

今すぐは、やらないだろうけど、いつか「今、共通認識を築きたい」って思った時にすぐにできるように引き出しには入ったかな。

いつも通り

こざけさんはいつも通りでした。