🐷

技術的負債を説明できるようにしてみよう

2025/01/29に公開

Daily Blogging39日目

技術的負債やばいよねーって話するけど具体的に技術的負債ってどう説明すればいいんだ?ってなった

技術的負債とは

英語で言うと「Technical debt」
一言で表すと、
短期的なメリットを選択することで、将来的に払わなければいけなくなったより大きなコスト
文字通り、借金をすることで価値を手に入れるが、それ以上に利息が発生してまう状態である。

ことの始まり

「負債」って最初に言い出したのはWard Cunninghamさん
1992年にまで遡る(そんな前から...!)
Wardさんは当時、金融のシステムを開発していたことから、メンバーが認識しやすい言葉として「負債」と言う言葉を選んだらしい

「ソフトウェア開発において、設計の品質を犠牲にして短期的に開発を進めることは、借金をするのと同じである。これにより、短期的には素早く成果を得られるが、後でその負債(=技術的な問題)を返済しなければならず、返済しなければ利息(=開発速度の低下やバグ修正コストの増加)が積み重なる。」

イメージはこんな感じ

金融の借金 💰 技術的負債 💻
すぐに現金を手に入れられる すぐに動くコードを書ける
返済しないと利息が増える 修正を怠るとバグや開発コストが増える
早く返せば利息は少ない 早くリファクタリングすれば負担は軽い
返済できないと破産する 技術的負債が溜まりすぎると開発が停滞する

このWardさんの「負債」から始まり、のちに二人の人間の思考によってさらに意味が発展していく

ちなみに、Wardさんの「負債」についての解説動画t_wadaさんの翻訳もあるよ

意図的か、偶発的か

2007年、Steve McConnellさんが「負債」を2つに分類しました。

負債の種類 説明
意図的負債 短期的な成果を上げるために、計画的に品質を犠牲にする。後で修正を行う前提で、早期の開発を優先する。
偶発的負債 計画なしに生じる負債で、時間の経過や変更により、予期しない設計の問題やコードの複雑さが積み重なる。

4つに分けちゃう

2009年、Martin Fowlerさんが技術的負債の4象限を提唱したよ

https://martinfowler.com/bliki/TechnicalDebtQuadrant.html

まとめるとこんな感じ?

無謀 慎重
意図的 計画なしで負債を選び、後で多大なコストが発生する可能性がある。 短期的なメリットを意図的に選び、後で修正する計画がある。
偶発的 知識不足や計画不足で無意識に負債が積み重なる。 最善を尽くして選んだが、後でより良い方法が見つかる。

負債って悪?

負債って聞くと、少しでもあると良くない、完全に「0」にしないとダメだって感じる。
実際そう感じてた。

でも調べていくとそうでもないらしいということに気づく

最初に記述したが、負債を負うことで「短期的なメリット」を得ることができる。
変化が目まぐるしい「VUCA」の時代である今、大切なのはできるだけ早くリリースし、いち早くFBを得て、さらに改善を加えてより良いものに進化させ続けること。

だからこそ、戦略的にこの「短期的なメリット」を選択することは悪いことではなく、むしろ必要なこと
ポジティブな意味合いが強い

じゃあ何が悪いんだろう

Martin Fowlerさんの4象限にもあったが、一番問題なのは
「知識不足や計画不足で無意識に負債が積み重なること」
つまり、負債に対する「未知の未知」がたくさんあることこそがなんじゃあなかろうか

技術的負債は金融的な負債と同じで、適切に管理されていれば問題ない。
むしろ有効活用できるいいもののはず

逆に金融的な負債と同じで無計画に、自分の気づかない間に負債を増やしていくと、気づいた時にはもう人生破滅してる

未知の未知に立ち向かえ

じゃ「未知の未知」減らすためにはどうしたらいいのか。
とりあえず下記2点できていれば良さそう

  • コードの健全性を可視化
  • 定期的な技術的負債の棚卸し

コードの可視化はライブラリとか使えばすぐにできるので、とりあえず入れてみて何が問題なのかを認識してみる。

定期的に技術的負債を確認するのはすぐできそう
開発する上で問題になっている箇所をブレストしていけばどんな技術的負債があるのか明確になる

変更容易性を意識しよう

負債を負うのは悪ではない
でも返済しないのは悪なので、定期的に返済は必要
返済するときに欠かせないのは、変更容易性が担保されているのかどうか

なので、コードを書くとき、負債を負う時はあとで変更しやすいように設計してあげるのが良い。
変更容易性は、色々な設計本で解説されているのでそっちで勉強してみるよい
まぁとにかく「低結合、高凝集」が最低限意識できていれば大事にはならなさそう

まとめ

大切なのは、

  • どういうメリットを得るために負債を負うつもりなのか
  • その負債はいつどうやって返済する予定なのか
    この2点をちゃんと意識しておくこと

Discussion