Mob Programmingとは何者か?これはすぐに導入すべきだ

先日、技術なきマネジメントの衰退とその対策 - メソッド屋のブログというブログ記事の中で、Mob Programmingというものが紹介されていた。このエントリでは他にももっと面白い考察がされていたので、その話はまた別途エントリを書きたいと思うのだが、本日はこのMob Programmingというものを取り上げたい。

Mob Programmingとは何か?

恥ずかしながら、僕は先ほどの記事を読むまでMob Programmingを聞いたことすらなかった。

詳しくは、モブプログラミング - Woody Zuill氏とのインタビューや、モブプログラミングを実際にやってみた - Qiitaを読んでもらうのが良いかと思うのだが、誤解を恐れずに簡潔に言うのであれば、Mob Programmingとはチームを組んで行うペアプログラミングのことである。

ペアプログラミングなら僕も聞いたことがあるし、まだ実際にやったことはないが業務に取り入れても良いかなと感じてはいた。そんな中で出てきたMob Programmingというやり方。ファーストインプレッションとしては、Mob ProgrammingはPair Programmingの進化系だというところだ。

Pair ProgrammingとMob Programmingの対比

Pair ProgrammingとMob Programmingを比較してみてみると、ペアで行うPair Programmingと複数人で行うMob Programmingということで、非常に似通ったものがある。

ただ、僕個人の主観で言うと、Mob Programmingは、Pair Programmingのメリットを大きく伸ばしつつ、デメリットを最小まで抑えるという、非常に優れた手法なのではないかと感じている。

以下、その理由を述べていこう。

Pair Programmingのメリットを伸ばしている

僕が思うPair Programmingのメリットは、ズバリ、個々人のスキルを集合知にできることにある。

プログラマは万能ではないので、もちろん個々人で得手不得手の分野が当然ある。それをPair Programmingによってお互いの領域を保管しつつ、より効率よくコーディングを進めることができるわけだ。一人であればハマる部分も、二人であればハマりづらいし、わからない事象に当たっても倍の速度で調べることができる。

これに対してMob Programmingは人数が多い分、個々人のスキルがカバーできる部分が広がり、ハマりにくくもなり、調べる速度も数倍である。また、プロジェクトメンバーの多くが同一の場所にいるので、意思決定も早くなり結果的に一人でコーディングするよりも数倍の生産性を確保することができるだろう。

Pair Programmingのデメリットを抑えている

デメリットは、上記のメリットと相反する部分になるかもしれないが、Pair Programmingはスキル差がありすぎると一方的な教育になりがちである。もちろんこれはこれでメリットではあるのだが、教育者側の負担が大きくなりがちである(こういう場合は、Pair Programmingすると逆に効率が落ちる傾向にある)。

しかしこれがMob Programmingのように大人数であれば、教育者側の負担もあまりない。また、エンジニアとしてはキャリアがあっても、言語的に初心者の場合なども、チーム内に習熟者がいれば言語的な壁はあまりなくコーディングを進めることができるだろう。

これらのことから、Mob ProgrammingはPair Programmingの上位互換の手法だと言っても過言ではない。

工数を見た場合にどうなのか

ペアで行うPair Programmingと、複数人で行うMob Programmingを見た場合、やはり問題となるのは工数である。普段一人でやっているコーディングという作業を、大の大人が雁首揃えてみんなでやるってんだから、これはまぁ避けられない課題である。これは最終的にMob ProgrammingなりPair Programmingの方が効率が良いということを示せればいいのだが、なかなか難しい部分ではある。

今はコードがお偉いさんなんだからMOBは雁首揃えろって話 - アンカテというエントリの中でもこの工数の件について触れられていて、以下のように書かれている。

二人でやるペアプログラミングでも、「それって一本のプログラムを二人で書くってことは、工数が二倍になるんじゃない?」って言われて言葉に詰まったことを思い出す。Mob Programming は、二倍じゃなくて数倍になるので、それを上回る生産性向上がどこから来るのか説明する必要がある。考えただけで頭が痛い。

まさに僕が感じていたことそのままだ。ただこのエントリでは、以下のように展開されている。

それで、急にヒラめいたのだが、これって「今はコードがお偉いさん」と言えばいいのではないだろうか?

そして、

結局、今のように一人でコードを書くってことは、コード様が「ここはどうなっておるのだ?」と言った時に、「えっと、今はその、担当者がおりませんので、この件は後日回答」を連発しているということで、コード様が「お偉いさん」だとしたら、これは随分失礼な話だ。

これには「なるほど」と言わざるを得なかった。

確かにこう考えれば無理もないし、上長を納得させられるだけの可能性も秘めている。実際に説得できるかは自身の力量にかかっているかもしれないが、少なくとも僕は次に何かしら新規の案件をチームで開発することになった場合には、Mob Programmingを提案したい。