開発チームの人数は飛行機の重量のようなものだ

プログラマが不足している、っていう話をちょくちょく耳にする。ホントかな?
人材の供給が需要に追いつかないなら、待遇はあがるのが市場原理だ。だけどプログラマの待遇が上がったという話は聞かない。ということは、むしろプログラマは余っているんじゃないか。
好意的に解釈すれば、「優秀な」プログラマが不足している、ということかもしれない。しかし「不足」という表現にはどうも違和感がある。むしろ、優秀でないプログラマがダブついているという感覚が強い。


例え話をしてみよう。
飛行機の翼が飛行中に折れたとする。・・・旅客機だと物騒だな。鳥人間コンテストの出場機だとしよう。どうして折れてしまったのだろうか。どうすれば折れないようにできるだろうか。
強度が不足していたから?翼を補強すれば折れないように出来る?

まあ、それも正解の一つだ。でも逆に考えれば、飛行機が重すぎたとも解釈できる。負荷が大きすぎたから折れてしまったのだ。

飛行機にとって「機体を軽く作ること」はものすごく重要だ。例えば新素材によって1%軽量化しても同等の強度が保てるようになったとする。これは単に機体が1%軽くなるだけには留まらない。機体が軽くなるとそれだけ翼にかかる負荷が減ることになるから、翼をもっと軽く設計することができるようになる。軽くなると燃費が良くなるから、積載する燃料も減らすことが出来る。すると更に機体が軽くなるから、更に翼を軽くできる。この軽量化の連鎖が収束するところまで軽量化が出来るのだ。だから航空機は少しでも軽く設計することがものすごく重要になっている。


話を戻すと。
ソフトウェアプロジェクトにおけるプログラマの人数というのは、航空機の重量みたいなものだ、と言ったらおかしいかな。
大抵のバグはプログラマプログラマの間で発生する。Aさんが書いたコードをBさんが修正したとき、Bさんが作った関数をCさんが利用したとき、などなど。こういったバグを防いだり修正したりするために、ドキュメントを一生懸命書いたり、ソースにコメントを丁寧に書いたり、時間を掛けてテストをしたりするわけだ。
さて、10人の開発チームがあるとして、全員の能力はほぼ同等だとする。仮に何らかの理由で全員の能力が10%向上したとしよう。単純に考えれば、1人減らして9人にしてもほぼ同等の開発力を維持することが出来る。つまり1割のコストダウンというわけだが、本当にそれだけだろうか。
1人減るということは、その人が他の9人と交わしていたコミュニケーションが減るということだ。その分だけ、ドキュメントやテストのコストを削減できる可能性がある。つまり、プログラマを1人減らすことによって得られる効果は、1割のコストダウンに留まらないんじゃないか。


じつは、これでもまだ問題を矮小化しているような気がしている。開発チームの人数が一割減ったなら、残りのメンバーは今までよりも一割多くソースコードを把握することになる。頭の中にプログラムを入れることになる。これはコストダウン以上の効果があるだろうね。
頭の中にプログラムを入れる


つまり言いたいのは。
開発プロジェクトがこなしきれない → 人が足りない → 人を増やそう という単純な思考で問題を捉えないで欲しいんだよね。その単純思考からは絶対に「優秀な」プログラマは育たない。大学の教育によってプログラマを育てる、という発想もどこかピントをはずしている。足し算によって解決するのではなく、逆に引き算によって解決を図るアプローチが必要なのではないだろうか。