今はコードがお偉いさんなんだからMOBは雁首揃えろって話

Mob Programmingって初めて聞いたけど、とてもいい方法に思える。

コードを書く時に、今現在の仕様はわかっていたとしても、今後どうなるか、どういう方向に発展するのか気になって、ビジネス的にその分野に詳しい人の所に聞きに行ってから書きはじめることがあるし、性能的に大丈夫かDBに詳しい人の意見を聞いたり、何か迷った時に過去のプロジェクトで似たようなケースをどっちの方法で解決したか調べたりすることもある。

書き出すとすぐ終わる短いコードでも、書き出す前に、聞きにいったり議論したりする時間が随分かかっていることもある。この時間をかけないと、結局、後で変更になるので、先に聞きにいくのがベターなんだが、チーム全員集まってひとつのコードを書けば、そういう時間を省略できるような気はする。

だから、これが生産性が高いということは感覚的にはすぐ納得できるのだが、一方で、これを導入するために人を説得するとしたら大変だろうな、とも思う。

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

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

たとえば、大企業の地方の工場に本社の社長が視察に来るとする。そうしたら工場の幹部が10数人玄関の前に整列して、社長が来るのを待つだろう。社長の車が渋滞で遅れたら、幹部の単価×数時間が無駄になるのだが、誰もそういう工数のことは気にかけない。それどころか、前日にリハーサルまでやったりする。

「お偉いさんには、あらゆる場面で人をたくさんつけるもんだ」というのは説明不要の常識である。役員には秘書がつくもんだし、その秘書も事務作業をやる人から経営的に高度な判断までできる幹部候補生の秘書室長まで、さまざまなレベルのさまざまな技能を持った人がたくさんつくもんだ。

社長にプレゼンする時に、何か質問されて「えっと、今はその、担当者がおりませんので、この件は後日回答」なんてことは許されない。即答できるように関係者全員部屋に集めておくもんだ。

コードを書く時に、多少関係薄そうでも、関わりそうな担当者は有無を言わさず全員集合、というのは、コードがお偉いさんだから、万が一でもコード様に失礼があったり待たせたりすることがあってはならん、と考えれば受け入れやすい。

これは非合理な儀礼ではなくて、社長の時間は貴重で社長の決断の影響範囲は大きいのだから、社長に合わせてしたっぱが振り回されるとしても、それによって社長が正しい判断を素早くできるのなら、会社全体としては最適な方法だと言える。

今はコードの影響力の方が社長より大きくて、社長が右へ行けと言っても、コードが右へ行けるようにできてなければ、会社は右へ行けない。コードが右へ行けるように組んでおくことが会社の将来を左右する。社長よりもっと上の「お偉いさん」が来るとしたら、そりゃチーム全員その部屋に集まるのは当然で、それを一人の担当者にまかせておく従来のプログラミングの方が異常のようにも思えてくる。

コード様が社長より偉いということは、プログラマにデスマをさせればわかると思う。デスマの中でプログラマは苦し紛れにどこで手を抜いたらいいか必死で考える。ひどいコードができるのは当然だが、全てのモジュールが全部一様にひどいということはない。たいていそこにはひどさの濃淡があって、手を抜いたモジュールはもうボロボロでメンテ不能で、二度と修正、拡張できない。会社はこのコードに縛られてそのまま業務を継続するか、高い金を払って作る直すかで、どの業務がそういう目にあうかは、デスマの中では意識モーローのプログラマの気紛れな決断に左右される。

同じ決断を一番いい形でやるのが Mob Programming で、全体の品質も高くなるだろうが、それより会社の方向性とプログラムの拡張性が同じ方向を向いていることが重要だと思う。

企業活動とは、さまざまなステークホルダーからの矛盾を含む要求のトレードオフを取ることであり、その焦点となる場が、昔は経営幹部の臨席する会議であったが、今はコーディングがその決断の現場になっている。ここで企業がどっちを向くかが決まる。

ここになるべく多様なステークホルダー代理人を臨席させることが重要だ。

開発チームは、全員が金太郎飴の一様なプログラマになることはほとんどなくて、それまでのキャリアや担当するサブシステム等によって、自然と特定のステークホルダー代理人になっていく。全員が技術に立脚しながらも観点が散らばるということが重要で、チーム全員が一つのコードを書くというのは、そこでなるべく多くの情報を集約した上で重要なトレードオフを取っているということだと思う。

誰も何も言わずドライバー一人がたんたんとコーディングを進めていくだけだとしても、そのコードに含まれる決定事項がメンバーを通して、さまざまなセクションにフィードバックされていくことに意味がある。

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