システムの構築が無事に完了し、リリースできたとしても何か納得いかなくてそのプログラムを修正したいという衝動に駆られることはよくあったりします。
その理由を探ったときに、所詮は自己満足の世界であったりもするわけですが、その自己満足ゆえに湧き上がってくる感情が、そんな風に駆り立てるのかなと思ったりします。
完璧なシステムではないことの嫌悪感
完璧なシステムというのが無いことはわかりきっていることではありますが、それでも自分の中のベストな設計やプログラミングのイメージというものを持ってたりもします。
そこから外れたものを作ってしまうとその嫌悪感から、作り直したい衝動に駆られたりします。
自分のベストなプログラムが書けなかった理由は、外部的な要因が理由という場合もあるでしょう。
例えば、プロジェクト途中で予算を削られたり、スケジュールが差し迫ってきたり、体制面でサポート受けることができない状態にないなど、やむをえない理由で想定していた対応ができなかったというのは良くあることです。
自分のこだわりを持つというアーティスティックな面がある一方で、その納品先や利用者のことを考えると、いつまでも自分だけのこだわりを押し通すこともできなかったりもするわけです。
なので、自分の中にあるもやもやっとした気持ち悪さがありながらも、そのまま致し方なくリリースをしたものの、やはりそのつっかえがいつまでも気になってしょうがないということになったりします。
また、技術の進歩で作ったものがひどく陳腐化して見えることもあります。
その時の最新技術を用いたとしても数年経てばすでに時代遅れということはよくあります。
そして、新しい技術への憧れというものもあるわけで、そういった感情がより作り直したい感情を促進することにもなったりします。
自分の技術力向上で「こうやっとけば良かった」という後悔
その当時の自分のレベルでベストなものを作り上げたとしても、自分自身が成長していく過程で、あの実装はこうやっとけば良かったのかと後悔が芽生えることがあります。
それは、利用していた技術全般が向上していっているという外的要因ではなく、自己の中にある内部的な要因です。
しかし、これは自分の成長そのものを表していたりもします。
開発の現場での経験をつむにしたがって、様々な開発言語や開発環境、優れたプログラマーとの交流によって、レベルアップをすれば、当然あのときの自分の考えが間違っていたとか、あの時これを知っていたら活用できていたのにと、思い返すことにもなります。
技術以外のことでもそうですが、最初はまったくわからなくただこうすればいいというポツンと点として存在していた知識が、経験の中で線で結ばれていきます。
その過程で、あの時悩んだ事はこうすれば解決できたんだと、急に過去を思い出したりするわけです。
これは、致し方ないことで誰しも通る道にはなるでしょうからあまり考えすぎても仕方ありません。
ただ、その後悔が大きくなるというのは、次のシステムへの愛着が生み出す感情なのかもしれません。
システムへの愛着
後悔が起きる理由は、そのシステムへの愛着というものもあるでしょう。
特にこだわりなく作ったシステムであれば、さほど気にもならないでしょうけど、自分が最初に作ったものや長いプロジェクトと多くの仲間で作り上げたシステムというものには、妙な愛着があって保守をしてあげたい衝動がでてきたりもします。
プロジェクトの立ち上げから携わればその設計思想がわかっていたり、保守の中でも長く付き合えば付き合うほど、その詳細な仕様が把握できて自分の分身のように扱えたりもしてきます。
それがなお更、愛着を増幅させるきっかけにもなるでしょうし、運用フェーズの中で出てきた課題に対してすぐに対応したいという感覚にも陥ります。
システム仕様の詳細が頭に入っていればいるほど、仕様の変更に対して頭の中で解決する方法がすぐに見つかったりもします。
頭でわかっているなら、すぐにでも手を動かしたくなる衝動にも駆られるわけです。
規模が大きくなり、メンテナンスにかかるコストが大きくなってきたため、そのシステム自体を一から再構築しようとすることがあります。
基盤が変わり、開発環境が変わったとしても、気持ち的には前のシステムの継続的に保守している感覚があったりして、前のバージョンのシステム構築で出た後悔を一生懸命に消化しようと考えてたりもします。
まとめ
最初に書いたようにどれも自己満足の世界であったりもします。
なので永遠に終わりにならない対応になったりもするわけですが、どこかしら作ったものに対して喉につっかえたような感覚が作り直したい衝動を継続的に呼び起こし、それがエンジニアの仕事の面白さでもあり、自己の成長の糧にもなるのかと感じたりします。