こんな記事があって、「分業化するWeb開発の違和感」といういい言葉がでてきた。その通り、この世の不気味さ、不安さはぜんぶ分業のせいである。私は本気でそう思っている。
分業はいいことだ。全体の効率があがる。特に個人が食糧生産から解放されたことは大きい。ほんの少しの人たちが食糧を作ってくれるおかげで他の人たちは別の仕事ができる。こんなすばらしいことはない。今や都市生活者は全世界人口の半数を超える。分業のおかげで職業を選び都市で暮らすという選択ができるのだ。
分業はわるいことだ。個人の経験が分断され、コミュニケーションが成立しなくなる。隣の島で働いている人たちが何をしているのかわからない。同じ社内でも職種が違うと話が通じないことがある。前提がどこから違うのかわからない。こんなにもわからないのに、なぜか会社は利益をあげて決算報告書を提出している。そして、なぜかわからないままに給与が振り込まれる。不気味だ。不気味だが分業の力がすごいことはわかる。
なぜ分業が効率的なのか。分業には量的な分業と質的な分業がある。同じ役割の人を増やすのが量的な分業で、役割を細分化するのが質的な分業だ。分業は両方の側面でやらないと最高のスケーラビリティにはならない。人と喋るのが得意な人は営業をやるだろうし、計算機が好きな人はソフトウェアエンジニアをやる。役割で別れたらあとは役割の責務の範囲内だけで仕事をすればいい。もちろん、いつも責務は曖昧だ。だが、ソフトウェアエンジニアが営業をやる事態にはならないだろう。ソフトウェアエンジニアは計算機に関する責務だけ負って、知識も責務に応じたものだけ持っていればいい。それで全体の仕事は効率的になり、お給料は保証されるのだ。
分業はあまりに強い。もしあるソフトウェアエンジニアが革新的なアイデアを思いついたとする。世の中での需要があることも確実だった。しかし、作るのに五年かかる。彼が五年かけてそのアイデアを実装したらどうなるだろうか?運がよければ競合は現れず、めでたく賞賛されるだろう。しかし、たいていは他の人も同じアイデアを思いつく。需要があるなら尚更だ。科学の歴史もそれを証明している。新発見が同時に別々の科学者によってなされることは珍しくない。もし、五年以内に別の人がチームを組んで実装をしたらどうなるか?彼は確実に負けるだろう。アイデアを思いついたのが先だろうが、実装し始めたのが先だろうが、実装スピードがスケールしなくて彼は負けるのだ。小さな実装で済むもの、例えば数ヶ月で実装できるアイデアならば勝機はある。だが、小さな実装で評価されるのは黎明期の業界だけだ。成熟した分野では巨大な実装が必要になる。アイデアを思いつきつつ素早く名声を得るのにOSSは有効だ。コアアイデアと最低限の実装だけ提出すれば良い。もし需要があるならばPull Requestを捌くのに忙しいくらいになるだろう。しかし、OSSの問題はそれで食えるのかということだ。OSSが趣味ならば良いが、OSSで食っていくのは大変だ。他方、商用サービスは組織と組織の戦いになっている。黎明期のウェブやスマホアプリのようにはいかない。アイデアを実現するのはますます高コストになるばかりだ。
分業の本質的な問題はなにか。コミュニケーションコストである。仕事で得られる経験・体験と知識体系が役割によって違うのだ。知識が違うと言葉の意味が変わる。よってコミュニケーションは言葉遣いのプロトコルネゴシエーションから始めなければならない。そう、ユビキタス言語とか。役割は増えれば増えるほどコミュニケーションコストは増大する。役割分担によって一人に詰め込む知識量を制約しているから仕方がない。これは構造的な問題である。だが、どこかでコミュニケーションコストが分業スケーラビリティを抑制するだろう。分業が進みすぎると全体の仕事は遅くなり始める。これを大企業病と言うひともいるかもしれない。大企業はこれをジョブローテーションで解決しようとした。本当にジョブローテーションの発案者がこの問題を認識していたかどうかは知らないが、理屈上は解決策にはなるはずである。経験が役割によって異なるならいろんな役割をやってみればいい。素朴でいかにも効きそうな方策だ。実際にうまくいっているところもあるのかもしれない。私は知らないが。
逆に最高の役割分担は何か。すべての役割をこなせる人が役割分担をすることである。isuconだったらインフラもアプリもフロントエンドも全部できる人だけでチームを組むこと。これが最強である。全員似たような知識基盤を持っているから当然だ。コミュニケーションコストは低いだろう。ここでは阿吽の呼吸で仕事が進む。もしかすると、うまくいったスタートアップにはこういうチームがあったのかもしれない。
もしかするとジョブローテーションを小さな組織でやるのは有効かもしれない。組織の全員をすべての役割をこなせる人にする。ただし、計算機科学の領域内だけで。おそらくmoznion氏がやったのはまさにこれで、計算機科学という基礎教養のうえに全部の役割をとりにいったのだと思う。サーバー開発では今これがやりやすい状況で、AWSなりGCPを使っていればサーバーアプリ開発者でもTerraformのコードを書いてインフラ管理ができる。RailsなりGoなりのサーバーアプリ実装者からTerraform職人、インフラ設計屋さんにジョブローテーションをするのはそれほど難しくないのだ。これは使う道具が計算機のなかに閉じているからできるのだ。開発環境さえ用意できたらその役割になれる。ソフトウェアエンジニア業が他の業種に比べて恵まれてる性質なのだ。
我々はすでに分業してしまっている。企業のチーム、狭いソフトウェアエンジニア村もそうだが、社会全体でも分業している。ここから戻れるのだろうか?私は無理だと思う。今後ますます我々のコミュニケーションは難しくなるでしょう。謎の陰謀論的権力で分業を破壊したらどうなるだろうか。土地を持っていない我々都市生活者は飢えて死ぬだろう。じゃあ皆に土地を与えて下放しますか?共産革命ですね。一部分だけ分業を破壊しても何かのもの、サービスが手に入らなくなるだろう。生産されていても高価になるだろう。生産効率が落ちるのだからそうなる。やはり、戻れないのだ。
ここで疑問が出てくる。分業によって社会全体は豊かになったはずでは?余剰はどこにいったの?資本家が持っていってしまいました*1。でも、共産革命とか無理ですよね。どうしたらいいのやら*2。私にもわかりません。おそらく今のところ治療法はありません。分業と効率とコミュニケーション分断、これは構造的な問題なのです。あまりに強すぎる問題なので、一人一人の価値観が少しずつ変容することでしか解決されないでしょう。