技術的負債の利息とは何か

負債は醜いコードではなく、以後の変更が毎回余分に払うコストです。判定は測定可能で、1 回の変更で触るファイル数、テスト時間、同時に直す箇所の数です。

技術的負債を道徳の問題として語ると結論は出ません。これは経済の問題です。借りを作り、以後の操作が毎回利子を払っています。

利子は数値化できる

症状 測定できる指標
一箇所の変更で多数のファイルを触る 変更あたりのファイル数
触るのが怖い 壊していないことを示す試験があるか
フィールド追加で五箇所直す 同じ概念の定義箇所数
ビルドが遅くなる 編集から結果が見えるまでの秒数
新しい人の立ち上がりが遅い clone から最初の修正まで日数

症状を数値に訳せば、負債は意見ではなく事実になります。

元本と利子

  • 元本:その部分を書き直す一度きりの費用
  • 利子:以後の変更が毎回払う追加時間

返すべきかは、元本と将来の利子の合計を比べます。

リファクタ費用:3 日
フィールド追加ごとの追加:2 時間
今後追加する数:20 → 40 時間 ≈ 5 日
結論:今リファクタする方が得

そのモジュールを三か月触らないなら、利子はゼロで返す必要はありません。 危険なのは負債の存在ではなく、高利子の領域に積み上がることです。

高利子の領域

  • 全員が依存する中核の型:一変更が全体に波及
  • 毎回のリリースで手作業の手順:一つ飛ばすと事故
  • 誰も触れない起動スクリプト:壊れたとき追跡不能
  • 試験が無い重要経路:変更は運任せ

最初の二つは複利です。毎回払ううえ、規模とともに高くなります。

意図的な借り入れは許される

「今出す、一週間後に直す」は正当な判断です。条件は書き残すことです。

TODO(負債): 決済コールバックが同期処理で、時間切れで注文が消える。
影響: 繁忙時に注文を失い得る。
返済: 非同期の待ち行列へ、約 1 日。
期限: 公開後二週間以内。

要点は期限です。期限の無い TODO は永久の負債で、しかも当時トレードオフだったことを誰も覚えていません。後から読む人には意味不明なコードに見えるだけです。

醜さを負債と呼ぶな

不格好な名前、少し長い関数、少ないコメント。それらが将来の変更費用を上げないなら、負債ではなく流儀です。負債と呼ぶと本物の負債が埋もれます。

判定は一つです。次の変更でいくら余分に払うか。払えない分だけが返済に値します。

← 記事一覧に戻る

コメント

…