オーバーエンジニアリング

「これってオーバーエンジニアリングですよね」

レビューでそう指摘されたとき、なんかこう、ダメ出しなんだけどすごくスッキリした気分になったのを覚えています。ここでの意味合いとしてはなんだろう、「要件で定義されていること以上の変更を加えようとしている」ぐらいの意味でしょうか。非エンジニアの人に解りやすく説明するならば、今週末遊びに来る友人にご馳走をつくるためにキッチンの改装を行う、みたいな話でしょうか。いつかキッチンの改装をしたかったとしても、そしてその結果より良いものをより早く友人に提供できることになるとしても、それは今では無いよね、ということであります。



オーバーエンジニアリングについては、こちらのサイトがとてもわかりやすいです。


オーバーエンジニアリングの正体とその向き合い方 | POSTD

オーバーエンジニアリングとは、思惑によって本当に必要とされるもの以上を構築しようとすることである。



先の自分の仕事に話を戻すと、要するに要件をコードに落とし込む段階で「将来こうなっていた方が便利なんじゃないか」「使いやすくするためには基底クラスのメソッドに渡す引数を変えよう」などといったアイディアが浮かび、それを実行しようとしてしまったけれど、

  • そもそもそんなに発展性のあるコードではなかった
  • 色んなクラスから参照されているメソッドを変更するほど重要な案件ではなかった

という2点から、この件は現状の仕様に基づいた可能な限りの変更に留めておけば十分であり、アイディアについては別途提案・議論を行うべきでした。軽く終わらせてしまうべき案件であるので、議論自体ここですべきではない。もし議論を始めて実装が遅れてしまったら、チケットを切っている意味がなくなってしまうし。



こういうことって日常生活でもある

何か問題が起きて解決を模索しているときに、本来必要なこと以上の変更を加えようとして事態が混乱するということは、日常生活でもままあります。先に挙げたキッチン改装は大袈裟な表現ですけど、つい作業自体が楽しくなって本質を見失うってことありますよね。料理を始めるに当たってスパイスを全部揃えるとかも、概念的にはオーバーエンジニアリングと同じような方向性かなと思います。調味料なんて最低限醤油と塩くらいあれば何とかなると思うんですけど、調味料台とか用意し始めるとそれはちょっと。

日常生活では実用性だけでなくロマンを持つことも重要なので、必ずしも「オーバーエンジニアリング」的な発想がダメってことではないけど、いちおう頭には入れておく必要があるよね、と。