ちゃんと書けばちゃんと動くという幻想

知ってる人は知っていることですが、幻に捉われている人が結構います。

ある工場では、ネジを製造しています。

材料を入荷し、ネジに加工して、出荷します。

この工場は、24時間稼動すれば、1日に1万本のネジを製造することが出来ます。パートさんやバイト君がどんなにがんばっても1日に1万本です。

1万本/1日

ただしこれには前提条件があります。

100キログラムの材料が在庫していること

こういうものをモデル化するとき、ストックとフローで表現します。

ですが、モデルしか見えていない人には、フローには限界があるということが理解できません。

何がいいたいかというと、この工場に、1日1万1千本の注文を出しても、意味が無いということです。この工場が最大1万本/1日であるということは所与なのです。

手元を見てください。性能が出ない、データバッファがあふれる、レーシングがおきる。どれも、この最大性能をあらかじめ見積もらずに作った仕組みが原因ではありませんか?

ハード屋さんなら当たり前のことが、ソフト屋さんの仕様書では決定的に欠落しています。それは性能に関する記述です。

XXXというデータをYYY処理して、ZZZに渡す。

というようなばかげた仕様書がまかり通っています。これに

最大処理性能は、CPUパワーの30%で100キロバイト/秒

QQQプロセスが起動中は20キロバイト/秒に低下する

と書いておかないのは、

頭がどうかしている

としか思えません。しかし実態としては、パフォーマンスに関するクレームでも出ない限り、誰もそんなことは気にもしていないようです。

クレームが発生したときにパフォーマンスを測定すればよい

というわけです。ありえないですね。そんなことするから、クレームになるわけです。

使用上最高速度100km/時の乗用車で120km/時で走れないのはバグか?

この問いに答えてください。そして手元のシステムの最高速度が仕様のどこに書いてあるか今すぐ調べてください。

で、性能に関してクレームを避けるために、記述をあいまいにする阿呆が多数います。それはお客様に対してあいまいにするだけであって、モノつくりの現場では目標性能、最低保証性能を決め手からモノを作るのが当然なのです。

作ってから性能をはかるのは、最後の最後だけです。性能を見積もれないものを、どうやって作ることができるのか、私には全く理解できない。

ある処理XをA+B+Cに分割して、それらを間違いなく作ったからといってちゃんと動くわけではないのです。求められる時間内に得られるリソースのみを使って完了できるものを作らなければならないのです。

コスト・品質・納期にたとえても、どうせ分からないでしょう?