技術的負債には「格付け」をしよう
技術的負債とは
現代のソフトウェア開発において、「技術的負債」という概念は避けて通れない重要なテーマとなっています。技術的負債とは、短期的な利益や迅速なリリースを優先するために採用される一時的な解決策や、劣悪なコード品質、ドキュメント不足などが原因で将来的にシステムの保守性や拡張性に悪影響を及ぼすことを指します。
技術的負債の種類
技術的負債を以下の2軸で分けてみます。
-
意図的 vs. 非意図的負債
意図的負債: 開発チームが意図的に決断した結果生じる負債。例えば、リリーススケジュールを守るために後で修正することを前提に一時的な解決策を採用する場合。
非意図的負債: 不注意や知識不足、経験不足などが原因で発生する負債。例えば、新しい技術の導入失敗や設計ミスなど。 -
短期的 vs. 長期的負債
短期的負債: 短期間で解消可能な負債。例えば、簡単なコードリファクタリングやドキュメントの整備。
長期的負債: 長期的に解消する必要がある負債。例えば、大規模なアーキテクチャ変更や技術スタックの更新。
この「負債」という言葉は金融の用語からきていますが、似たような言葉に「債券」があります。(正確には違う意味ですが、この記事では類似の単語として扱います。)
債券における格付けとは
債券の格付けは、債券の信用リスクを評価するために専門の格付け機関が付与する評価です。この評価は、債券の発行体が債務を履行する能力を示すもので、投資家にとって重要な指標となります。
格付けの目的としては、
- 信用リスクの評価:発行体が債務を履行する能力を評価し、デフォルト(債務不履行)のリスクを示す。
- 投資判断の支援:投資家が債券のリスクを理解し、投資判断を行う際の参考情報を提供する。
- 市場の透明性向上:債券市場の透明性を高め、公正な取引を促進する。
といったものがあります。
格付けの例
格付け機関の1つであるスタンダード&プアーズ(S&P)の格付けスケールは次のようになっています。
- AAA:最上位の信用力。リスクが非常に低い。
- AA :信用力が非常に高いが、AAAよりわずかに劣る。
- A :信用力が高く、リスクは低い。
- BBB:投資適格(Investment Grade)の最低レベル。リスクは中程度。
- BB :投機的(Speculative)。リスクが高くなる。
- B :信用力が低く、リスクが非常に高い。
- CCC:極めて高いリスク。
- CC :非常に危険な状態。
- C :デフォルトが迫っている。
- D :デフォルト(債務不履行)。
格付けの影響
債券の格付けは、発行体と投資家の双方に大きな影響を与えます。
発行体への影響
- 高い格付けは、発行体は低金利で資金を調達できる可能性が高まり、
- 低い格付けは、資金調達コストが増加し、投資家の信頼を得ることが難しくなる。
投資家への影響
- 高い格付けの債券は、リスクが低く、安全な投資先と見なされ、
- 低い格付けの債券は、リスクが高いため、投資家はより高い利回りを要求することがある。
負債は悪いものじゃない
企業会計のバランスシート上では、取引先への買掛金、クレジットカードでの建て替え、社員ボーナスの積み立て、仕入れ先からの請求など、が負債に当たります。企業活動をする際には、企業活動をしていれば負債は必ず発生する項目であり、負債が完全に0になることはあり得ません。金融機関からの借入に関しても(貸し手から見ると債権)、銀行は企業の財務状況や経営状態から必ず信用格付けを行いますし、スコアの高い企業ほど低金利で資金調達することができます。
個人の負債については、住宅ローン、クレジットカードの上限枠、奨学金などは広く使われていますし、属性のいい人ほど信用が高く、金利も低かったり、ポイントや減税の恩恵も受けることができます。逆にリボ払いや消費者金融など、低い格付けの負債に関しては、金利が高く、周りからの信用も失うことが多いです。
技術的負債を格付けしよう
「負債」という概念が金融業界からIT業界に持ち込まれたからには、「格付け」という概念も持ち込むべきだと筆者は考えています。また金融業界においては負債=信用であり、以後は「信用格付け」という言葉を用いて進めます。
高い信用格付けの技術とは
- その技術がプロダクトの競争優位性を生み出す。
- 長期にわたってサポートが見込まれる。
- コミュニティ活動が活発で、
- 人材の調達も容易。
反対に信用低い格付けの技術とは
- その技術が開発に支障をきたす。
- 継続的なサポートが見込まれない。
- コミュニティ活動が消極的で、
- 人材の調達が困難。
なものを指します。完全に筆者の主観ではありますが、技術的信用格付けの目安を書いておきます。
- AAA:最上位の技術力で、テックに関するリーダー的存在になれる。その組織への所属がブランド化する。
- AA :高い技術力を誇り、他社が真似するレベル。
- A :技術的な優位性が事業競争力と結びついている。(ここから上がテックカンパニーと名乗って良い)
- BBB:軽微なリファクタ/アップデートで最新についていける。(短期的負債が存在する。)コミュニティが活発なものを使っている。
- BB :直近で事業へのマイナスはないが、長期的負債を抱えている。いづれかのタイミングで大規模なリファクタリングが必要になる。
- B :長期的負債を抱え、テックが事業の足を引っ張っている。
- CCC:コミュニティの非活発な技術を使っている。新規での人材確保も困難。
- CC :技術課題によりいつ事業が止まってもおかしくない。
- C :サポート切れの技術を多数使い続けている。人材の流出が激しい。
- D :デフォルト(技術課題により事業継続が不可能)。
なぜ技術的負債に信用格付けが必要なのか
「技術的負債」という言葉は、技術記事や登壇、はたまた開発を進めている中でも至る所で見ますが、現状としてさまざまな文脈で使われています。
「技術的負債により新規開発が困難」
「コーディングを始めた時点で技術的負債が発生する」
同じ「技術的負債」という言葉を使っていますが、同じ意味なんでしょうか?同様の例をクレジットカードによる借金に当てはめて見てみましょう。
「リボ払い(借金)は金利が高くて元本が減らないから危ない」
「一括払い(借金)は引き落としが来月になってポイントも付いておトク」
同じ「借金」という言葉に置き換えられますが、見える景色が全然違いますね!信用のランクによって言葉やサービスが明確に分かれているので、どちらも正しく理解できます。これをテック領域に適用して信用格付けを補完してあげると、こうなります。
「技術的負債(CC)により新規機能開発が困難」
「コーディングを始めた時点で技術的負債(AAA)が発生する」
こっちの方が文脈を理解できると思います。前者の信用格付けの低い技術的負債を抱えていると金利が高くて首がまわらない(=新規機能開発ができない)というのも納得できますし、後者の文章はむしろ信用という意味の方がしっくりきます。
「技術的負債」に関する発信は最後にこう締めくくられていることが多いように思います。
技術的負債と上手く付き合おう。
キレイな言葉で締めくくられていますが、受け手によって「上手く」の解釈は分かれますし、技術的負債の許容レベルもバラバラです。この言葉を言われて多くの人は具体的なアクションまで落とし込めませんし、言った本人も「上手く」運用できていない場合がほとんどだと思います。
「技術的負債」に関しては信用格付けも絡めて、開発現場での運用は次のようにしてはどうでしょう。例:
「BBB以下の技術的負債が発生した場合、次のスプリントでリファクタリングタスクを優先させ、AA以上を目指す。」
「新規顧客の獲得を目指し、CCCまでの技術的負債を許容して新規機能開発を優先させる。」
組織によって運用レベルは分かれますが、信用格付けをした方が開発メンバー内での認識も統一されやすいですし、優先順位に関しても納得しやすいと思います。
信用格付けの具定例
利用技術のバージョンに限った場合で具体例を見てみましょう。
弊社のフロントエンド開発ではNextJS(App Router)採用していますが、Vercelが今後App Routerの開発に力を入れていることから、執筆時点(2024年6月)では
NextJS(Page Router, ~13.3):BB
NextJS(App Router, 13.4~):BBB
NextJS(App Router, 14.0~):A
NextJS(App Router, 14.2~):AA
と格付けすることができます。
また最近EOLとなったVue2の場合ですと、EOLを発表した2022年7月時点でBBの格付けとなり、EOLになった2023/12/31の時点でCという扱いになります。
IT領域は移り変わりが激しく、バージョンアップの度に既存バージョンの格付けが落ちていきます。技術的負債の返済のためには、定期的に格付けを見直し、アジャイルの中に適切に負債返済のタスクを組み込むのが良いでしょう。
組織やメンバーの状況によってどこまで技術的負債をどこまで許容するかは変わりますが、信用格付けの低い技術を扱うにはそれ相応のレベルが求められます。(キャッシングしたお金でFX運用で勝ちに行くようなものです。)実際問題として、信用格付けの低い技術を上手くコントロールできるエンジニアはほとんどいないでしょう。金利負担が重くないうちに返済した方が、実態としては上手くいくように思うのでオススメです。
まとめ
技術的負債と上手く付き合おう。
技術的負債に関してはまず信用格付けを行い、メンバー間の認識を合わせた上で議論を前に進めることができる。
フィシルコムのテックブログです。マーケティングSaaSを開発しています。 マイクロサービス・AWS・NextJS・Golang・GraphQLに関する発信が多めです。 カジュアル面談はこちら(ficilcom.notion.site/bbceed45c3e8471691ee4076250cd4b1)から
Discussion