ソフトウェア開発の分野ではYAGNI(You Ain’t Gonna Need It)という表現があります (人によっては「You Aren’t Gonna Need It」と書いています)。 「こうなるかも知れない」をドンドン積み上げていって不要に時間を割くべきではないという考え方です。
wikipediaの項目によると不必要な冗長性には以下のような副作用があるそうです。
* それによって、別の新しい機能を追加したりテストする時間が削られている
* 新しい機能にはテスト/デバッグ/ドキュメント/サポートが必要になる
* 「将来どのような機能が必要になるか」という予測の元に制作されるため、実際に必要な機能が発生したときに予測で作ったものが障害になる可能性がある
* 実際に必要になるまでは新しい機能を定義したりテストする事は難しい。そして、そのようなものは本当に必要になったときに動作しないことが多い
* コード量が爆発する。無駄に巨大で複雑な物が出来上がる
* 仕様書と適切なバージョン管理がされていない状態では、将来の開発者がその機能を使えないかも知れない
* 新しい機能追加をするために新しい機能が必要になるかもしれない。そして、ゆきだるま式に全体が膨れ上がり、追加機能が本来必要なコード量を圧倒する
なお、基本設計の中に入っているべきである将来のため拡張性と単なる余分な冗長性の差に対する明確な基準は無いので、結局はケースバイケースなんだろうとは思います。 そのため、YAGNIは何でも削れというよりは、無駄に「念のため」を積み上げて大きすぎるものを作り上げないようにとの戒めですね。
"