「仕様変更」という言葉はプログラム書く人じゃないと、そのイメージが掴めないと思う。イメージが掴めない人に対してそれを説明するとしたら何がいいだろう? と思った。
とりあえず、料理に例えたらいいのではないかと思ったので、それに例えて考えてみる。
仕様とはレシピのことであり、最終的には具体的に「食べることができる美味しい料理」すなわち「うまく動くプログラム」を作ることを目的としている。
仕様というのは、最初は「イタリア料理」「日本料理」「中華料理」程度しか示されない。当然この時点では方針程度しか考えることができない。食材を買うこともできない。せいぜい使う調味料を揃えるぐらいしかできない。
もう少し進むと、料理名まで具体化される。スパゲティを作りましょうとか、ピザを作りましょうとかだ。とりあえずここまできたら小麦粉を買おうとかまではできるかもしれない。でも実際に作りはじめることはできない。
さらに進むと、ペペロンチーノを作りましょうとか決まってくる。ここまできたらさすがに作りはじめることができる。ペペロンチーノ用にパスタを作って、どんな風味のペペロンチーノにするか決めながらソースを作るぐらいできる。もはや完成間近になる。
しかしここで「仕様変更」が入る。やっぱりペペロンチーノは止めましょう。ナポリタンにしましょう、となる。そうなったらソースは捨ててパスタは作りなおしになる。パスタのことをよく知らない人は「パスタは再利用できるでしょ?」と言ったりする。悪夢である。そして「じゃあ再利用しましょうか、時間もないですし」ということで、今度は今あるものにナポリタンソースでどういう味つけにするかを考えて作ることになる。
しかしここでまた仕様変更が入る。しかも今度はやっぱりペンネにしましょうとか言わたりする。そうですか。小麦粉は無駄にはなりませんが、他のものは全て無駄になりますね。でも仕方ないですね、としかプログラマは言いようがない。でもここでも「パスタは再利用できますよね」「スパゲティを使ったペンネですか? それはペンネではないような…… とにかくわかりませんが、わかりました」
この繰替えしが何度もある。一度止めたけど、やっぱりそっちにしましょうとか、悪いプロジェクトではそれこそ、そもそも日本料理にしましょうとか言いだすこともある。
結果として、下手に再利用することで不味い料理ができたり、そもそもいつまで経ってもできなかったりする。
また、時間は有限で、例えばお昼までに使える時間というのは限られている。でも11時50分になって「やっぱりナポリタンにしましょう」なんてのはよくあることである。いずれにせよ、このプロセスで最終的にできるものはスパゲティである。