読者です 読者をやめる 読者になる 読者になる

技術的負債はリボルビング払いで返そう!

読み物 開発プロセス

qiita.com

という記事がTwitterに上がってたので見てみましたが、大変共感できるものでした。

システム開発をしていれば技術的負債はつきものです。特にサービス運営をしていれば、「たとえ借金をしてでも今出すべき!」ってタイミングは良くあります。

技術的負債はあくまで価値を生む資産であって、有用なものなのです。返済しないといけないのと利子が付くだけで....

で、元記事の中で、「技術的負債を大きく返すパターン」「技術的負債を小さく返すパターン」が書かれていますが、これって実際の金銭的負債の考え方で言えばリボ払いですよね!

というわけで、今回は技術的負債を実際のクレジットカードの返済方式になぞらえて返し方を考えてみました。

主なクレジットカードの支払い方式

さて、なぞらえるからには前提の説明が必要でしょう。絵心無いですが簡単なイラストにしてみました。

f:id:pascal256:20160927022819p:plain

大別すると以下の三つです。

  • 一括払い : 利用日の翌月払いです。クレジットカードだと利子かかりません!
  • ボーナス払い : ボーナス月にまとめて払う方式です。特定月しか支払わなくて良いのがポイント。
  • リボ払い : 毎月決められた金額だけ支払う。ご利用は計画的に。

本当は他にも分割払いとかもありますが、正直技術的負債を分割払いで考えることは無いと思うので割愛。

技術的負債における支払い方式

さて、それではそれぞれの支払い方式で技術的負債を返済する場合を考えてみます。

一括払い

利用日の翌月とありますが、言ってしまえばプロジェクトリリース直後とかですかね。

リリース当日には無理してでも間に合わせる。出してから直せば良い。まあ、良く「考える」ケースですねー。

リリース直後に対応するのであれば、保守性の低下という手数料の支払いもゼロなので、悪く無い方式です。

一方で、それなりの支払い能力、すなわち余剰生産力が必要です。なにしろリファクタリングとか直接的には利益を生みづらい作業をするので、それをしても問題がない組織的な余裕が必要になってきます。

また、プロジェクト内で技術的負債が消化できないレベルのリリースの直後とか、どうせトラブるので人的リソースは枯渇し技術的負債は滞納されます。チーン

ボーナス払い

会社にもよりますが、繁忙期とそうでない時期があります。

そうでない月をボーナス月としましょう。この間に、たまった技術的負債を返すのです!

クレジットカードの支払い方式のイラストを見てわかる通り特定月以外は請求されないので、その分の生産力をトラブル対応や新たな機能の開発に充てることが出来るので、リソースを効果的に使いシステムやサービスの価値を高めることが出来ます。

でも、ちょっと待ってください! 本当にボーナスは支払われるのでしょうか?

年に2回しかないボーナス月です。それまでにたまった負債はとても一人が片手間に返せるものではありません。 私は社会人としてSEになって7年くらいになりますが、プロジェクトの切れ目なんて見たことありません。ましてやチーム単位で。

そう、多くの会社は(技術的負債返却という意味では)ボーナス月の存在しないブラック企業なので、技術的負債は滞納されます。チーン

リボ払い

さて、最後に悪名高きリボ払いです。

これは元金にかかわらず毎月決められた額だけ支払う方式です。これをシステム開発で言うなら一定のコストを常にリファクタリング向けに許容するという事になりますね。

人的リソースを消費しますが、そもそも支払い能力すなわち組織としてプロジェクト影響が許容できる範囲を決めて払いづづければいいのです。

カードでの支払い方式のイラストでも、固定の小さな額だけ払えば良いので負担はちいさそうですよね?

自らが決めてコントロールできるので、技術的負債を返済し続けることが出来ます。そう、つまり滞納しないんです! グレート

ただ、決めた量以上が減らないため、借金する速度の方が返済速度より早ければ元金は減るどころか増え続け、無限に支払いをし続けることになります。

でも、だから何だっていうんでしょうか? サービスが死ぬまで技術的負債を払い続ける覚悟をすれば良いだけじゃないですか! 死んだら払わなくて良いのです!

f:id:pascal256:20160927030701j:plain

まあ、あんまり元金増えすぎると利子(保守性の低下)が溜まり過ぎて、死ぬんですけどね!

でも、多少は減り続けるだけ、他の方式よりましだとおもいませんか?

まとめ

さて、あおりっぽくタイトルは「技術的負債はリボルビング払いで返そう!」としましたが、他よりマシってだけで、これだけやればOKという方式でもないかなと思います。

実際には本当の金銭の負債と同様に支払い能力に余裕があるうちはプロジェクト期間内または直後の一括払いを前提として、 手元にキャッシュ(人的リソース)を残してほかの生産的な作業に充てたいときはリボ払い方式を採用しつつ、 ボーナス月が来たらおまとめ払いで元金を可能な限り減らすというのが現実的でしょう。

個人的には技術的負債はずっと付き合っていかなければならないものだと思っているので、計画的に支払い続けれるリボ払い方式を採用できる体制にしていきたいなと思っています。

まあ、カードのリボ払いは手数料高いからしたくないけどね!

それでは、Happy Hacking!