プロジェクトに後から入ると、「(本来はシンプルなのに)なぜこんなに複雑なんだろう」と思う時がある。(プログラマじゃなくても思うことはないだろうか)
これは”時間”が反映されていないからである。
というのは、今の断面から見ると、構造的には綺麗なツリーとなっていて、構造化することもそんなに難しくないかもしれない。
例えば、このような処理の時にレイヤリングするのはそこまで難しくないだろう。切り出し方は色々あるだろうが、構造化を考えること自体は難しくない。
認可処理を行って、
データベースをクエリして、
フラグがついていたらリターンする
ファイルストレージからアップロードを行い、
外部APIをコールして、
データベースのステータスを変更する。
しかし最初期は違うのである。今は1〜4に並んでいるが、2と5があって、4を追加し、1をやり始めたのは最近かもしれない。
当然今の処理の順番と実装の順番は違う。
後から入った人からすれば、こんなにシンプルなのに複雑な実装にしていると見えるかもしれないが、そこには時間の観点が含まれていない。クエリとAPIコールだけだった時の方が長いかもしれない。
往々にして最適な実装というのは後からわかる。(究極的に最適な実装なんてものはないのだが)その瞬間瞬間のベターな選択肢が必ずしもベストにつながることはないのである。
だからこそ、構造を定期的に見直し時には大きな労力を払ってでも変えなければいけない。今と昔では表現能力が違うのだから適した構造が違うのである。