技術的負債という言葉がある。もともとは、「楽するために導入したが、メンテにコストがかかるようになってしまった技術や構成」くらいの意味合いで使われているように思う。しかし、そもそも全部が負債ではないか、というのがこのメモの趣旨である。
負債
同僚とSlackで会話していると、「けっきょくどの言語を利用しても負債になるときはなるし、大抵負債になる」といった話になった。言われてみればそうで、基本的にコードというものは書いたそばから負債になっていく。去年書いたコードのことも思い出せない。
そんな中で思ったのだが、そもそも、負債になるコードと負債にならないコードとがあったり、技術が「負債化する」のではなく、コードや技術そのものが負債なのではないか。そして、どの言語で書こうが負債からは逃れることができない。負債にならないコードは存在しない。ゆえに、コードや技術は無ければ無いほど良い、ということになる。
そして、われわれは借りた負債で各種のビジネス上の利益を確保し続けることで、負債を打ち消している。負債というか、債務といったほうが近いかもしれない。国債みたいなものかもしれない。
いずれにせよ、負債がゼロになり、なおかつ利益が出続けるということはありえない(それはエンジニアリングではない。他人のプロダクトを左から右に転がすような仕事になるだろう)。負債がゼロになるのは、プロダクトが解散するか、負債に耐えられずにプロダクトが爆破されたときだ。プロダクトが生きている間は金利を払い続ける必要がある。金利を払えるなら、その技術を選択できる。
利率
ではどの技術を使っても同じなのかというと、それは違う気がする。利率は技術選択によって変動すると考えればよいのではないか、と思う。
例えば、フロントエンドフレームワークやビルドパイプラインといったものは高利率な技術選択だといえる。変化に追従するために絶え間ない修正が要求されるし、そもそもライブラリなどが放棄されて乗り換えなければならないリスクをはらんでいる。関連する技術が多い。そのかわり最新の技術的便利さを入手することができるし、即座にビジネス上の利益につなげることができるから、この利率は容認されている、と考えられるのだ。また、古い技術は高利率になりやすい。
対照的に、C言語やSQLといったものは低利率な技術選択だといえる。基本的にさほど変化しない。知見が確立されている。ただし即座に利益につながるかは不明だ。そのかわり安心してどんどん使うことができる。稀に、低金利ですごいパワーを発揮する技術もある。適切な問題に対して適切な技術を使っているような場合はそうなる。
コードやライブラリといったものは全て技術的負債であり、またそれらの組み合わせが、普段われわれが開発している「プロダクト」だと考えると、これは一種のポートフォリオみたいなものかもしれない。全ての要素を高金利技術で埋めると破綻しやすくなるだろう。逆に低金利技術で埋められたプロダクトは機動力に欠けた魅力のないものになるだろう。 金融の世界ではよく知られているように、そもそも金利とはリスクのことである。あやうい国の国債は利回りが良い。安泰な国の国債は利回りが低い。
技術的負債の利率をコントロールするには、プロダクト全体の構成に気を配れば、ある程度可能かもしれない。高金利技術を使うかわりに、他の箇所は金利を下げておく。即座に捨てられるようにすることで金利を下げる。
技術選択以外の手段として、ドキュメンテーションも金利を下げるし、良いコーディング作法も金利を下げてくれる。「みんなが使っている」ということも、金利が下がる十分な理由になる(みんなが使わなくなれば一蓮托生になるという別種のリスクを背負うことになるが)。
いずれにせよ、「それについて良く知っている」ことが金利を下げるであろうことに異論はないと思う。