技術的負債
Technical Debt
Ward Cunninghamが最初に提唱した
Ward Cunninghamが提唱した技術的負債とは、以下の2つの乖離による、生産性低下のこと
自分たちが書いているプログラムの状態
そのドメインに対する理想的な状態
どういうことか?
ソフトウェアを作るとき、その時点で持っているドメインの理解をコードに反映して出荷する
開発を進めるうちに、ドメインについての理解が深まる
ところが、コードは古い(浅い)理解のままになっている
この「今の理解」と「コードに埋め込まれた古い理解」のズレが負債である
そのズレを放置したまま開発を続けると、古い理解の上に積み重ねることになり、「利子」を払い続ける
生産性が落ちる
リファクタリングとは、深まった理解をコードに反映し直して、この負債を返済することである
つまり、負債は避けられない・意図しないもので、学びの副産物である
金融的な「負債」のメタファー
金融の負債が負債である理由は3つある
① 元本がある
借りた額 = 現在の理解とコードのズレ
② 利子が発生する
返さない限り、毎回よけいに払わされる
③ 返済できる
元本を返せば利子が止まる
重要なのは②である
理解とコードがズレているだけ①なら、放っておいても痛くない場面もある
しかし、そのズレたコードの上に次の機能を積む時に、毎回「本当はこういう構造なんだけど、コードはああなってるから…」と頭の中で変換しながら書く
この変換コストを払い続けるのが利子である
利子を払い続ける(=ズレたまま作り続ける)と、ズレた理解を前提にしたコードがさらに積み上がる
→ 借金が借金を呼ぶ
なので、リファクタで元本を返そう ③
つまり、物理的な汚いコードのことを指しているわけではない
よくある誤解の方の技術的負債
極端な例を考えると、
ある時点で、プログラムとドメインが完全に一致していて、プログラムがきれいだったとしても、
その後、ドメインに対する知識が増えたが、プログラムを更新しない、となった時
プログラムはキレイだが、技術的負債がある、と言える
プログラムが綺麗かどうかではなく、ドメイン知識を正しく反映しているかどうかが肝
参考
【翻訳】技術的負債という概念の生みの親 Ward Cunningham 自身による説明 - t-wadaのブログ
#WIP
誤解が生じてると何が問題か?
病気によって必要な薬が異なり、いろんな病気を一括りにしてしまうと薬の選択が難しくなるように、いろんな問題を「技術的負債」の傘の下に一括りにしてしまうと対応を間違ってしまうので、言葉の厳密な定義を持っておくべきだということ。ref
これは誤解の問題ではなく、ある名称が指す範囲の問題ではないのか
誤解がなくても起きうる問題なんじゃないの
Ward が語っている負債のメタファーはどちらかというとポジティブなものです。 ref
そうなのか?どの文章からそう読み取れるのか #??
Wardの主張は前提に「ドメインとコードを一致させるのが最も理想的な状態」がある
「負債」と言った時、その状態から離れているのでポジティブじゃなくない?
面白い事例
MakeMusicはfinaleを開発終了する理由として、OSの進化に合わせてコードが数百万行にまで膨れ上がったと説明。顧客に付加価値を提供するのが難しくなったとしている。ref
コード量が膨れ上がってメンテできなくなったので開発終了
/nishio/AIと技術的負債
https://note.com/yshnb/n/ndf039850b614
https://speakerdeck.com/shinden/living-with-technical-debt
https://speakerdeck.com/mtx2s/technical-debt-and-developer-experience
https://speakerdeck.com/kentaro/rethinking-technical-debt
https://bliki-ja.github.io/TechnicalDebt/
/kawasima/技術的負債の分類
/miyamonz-projects/技術的負債
https://ironoir.hatenablog.com/entry/2021/03/02/190000
『レガシーコードからの脱却』
『事業をエンジニアリングする技術者たち』
https://techlog.voyagegroup.com/entry/technical-debt-battle-phase2
https://www.slideshare.net/koichiromatsuoka/ss-243097467
https://note.com/cyberz_cto/n/n26f535d6c575
技術的負債の発生理由の分類へ言及してる
https://tech.bm-sms.co.jp/entry/2021/05/25/120000?utm_source=feed
/mrsekut-b/表に現れない開発箇所の言語化
/miyamonz-projects/技術的負債
https://qiita.com/hirokidaichi/items/64b444a89410190d965f
https://speakerdeck.com/sadashi/shi-herokuahuritefalseji-shu-de-fu-zhai-tofalsexiang-kihe-ifang
https://logmi.jp/tech/articles/324486
リファクタリング
ボトムアップにコードをキレイにしていく
リアーキテクティング
大きなシステムを寒いステムに分解し、サブシステム単位で置き換えていく
リプレイス/リライト
ゼロから書き直す
リニューアル
https://gyazo.com/32aea87356b7d8c86189fd7f01a8a35c https://speakerdeck.com/mtx2s/internal-quality-issues-caused-by-organizational-design?slide=12
無謀な負債