僕は、行き過ぎた技術的負債は罪だと思っていました。しかし、最近少し考え方が変わったので、ここに書いてみようと思います。少しエモめの内容かもしれません。
技術的負債は罪なのか
技術的負債、と一言でまとめるのも好きではないですが…
例えば Rails だと、今はある程度ベストプラクティス的なものが広まっていて、それを参考にすることができるし、そうすると新しい人がジョインしても馴染みやすかったりすると思います。
ところが、Rails のお作法を無視したシステムがあったらどうでしょうか。辛いですよね。
モバイルやフロントエンド、アーキテクチャなどについても、これは辛いなー、ということがあると思います。
これらは、罪なのでしょうか。責められるべきなのでしょうか。
いざ構築する側になってみて思うこと
受託開発会社で主に新規開発をしていたので、ある程度の規模のシステムの運用に関わるようになったのは、今の会社に入ってからです。その経験を経て、最近は新規事業の開発を担当しています。
前職でも設計をしたことはありますが、その時は Rails と MySQL だけのシンプルなシステムだったので、Rails のお作法さえ押さえておけば、そこまで難しいことはありませんでした。(今から振り返るとそうですが、当時は必死こいてやってました笑)
個人開発もしますが、規模も小さいし、仕事としてやるのとは訳が違います。
今回の開発は、大事な事業でもあるし、要件の洗い出しから開発プロセスの選定、技術選定、アーキテクチャ設計、フロントエンドとサーバーサイドの開発まで行っています。責任重大です。
今までの反省を生かし、運用負荷を下げるシステムを作り上げるんだと意気込んでいました。今の僕にできることを全力でやっていますし、四六時中そのことを考えているといっても良いかもしれません。相談できる人には相談をして、足りない知識は必死でキャッチアップしています。
しかし、スケジュールは有限だし、どこまでいっても完璧ということはありません。新規事業である以上、スピード感も求められます。取り返しのつかない負債を残さないように、ビジネス面と技術面の間でギリギリを攻める日々を送っています。
そうして思うようになったことがあります。そこに負債があったとしても、その時そのメンバーにできることを全力でやってきたのであれば、責められるものではない、ということです。むしろ、その資産はメンバーの努力の証であり、リスペクトされるべきものなのではないでしょうか。
リスペクトされるために前提となること
しかし、ここまでの話には前提があると思っています。それは、本当に全力を尽くしたのかということです。
既に知っているものだけで構築していないか。できる限り情報収集をして、総合的に判断したか。より良い技術選定や設計をするためには、日頃の鍛錬も欠かせないと思います。日々情報収集をし、引き出しを増やしていかなければ、より良い選択は難しいかもしれません。
これらの前提を踏まえていれば、あとはビジネスと技術とのバランスだと思います。事業としてやっているのであれば、売り上げを上げなければならないのも事実であるはずです。
個人的には、技術的に超えてはならない一線を守りながら、価値を提供していけたら良いな、と思います。
システム、そしてサービスをより良くしていくために
既存の設計やコードを批判するということは、その人のやって来たことを否定することだと、今は思います。
そこに至った経緯がきっとあって、その歴史に敬意を払いつつ、より良くするための建設的な議論をできるようになりたいです。
とはいえ、システムが大きくなり過ぎると、改善が難しくなってくると思います。
取り返しの付かなくなる前に、定期的に立ち止まって、見直していくことが必要なのでしょうかね…。
おわりに
偉そうなことを勢いで書いてしまいましたが、僕自身もまだまだです。ここに書いたことは理想に過ぎないのかもしれません。
でも自分としては、好きな技術を追いかけながら、より良い価値を提供できるようになりたい。
今日も頑張るぞ。