はじめに:バックログの底に沈む「リファクタリング」チケット
スプリントプランニングの風景。
プロダクトオーナー(PO)が画面を共有し、バックログの上から順にタスクを読み上げます。
「新機能A、クライアント要望B、UI改善C…」
私が3ヶ月前に起票した「レガシーモジュールのリファクタリング」チケットは、優先度「低」のまま画面の遥か下、スクロールしないと見えない深海のような場所に沈んでいました。
勇気を出して声を上げます。
「あの、そろそろあのリファクタリングにも着手したいんですが…」
POは穏やかに、しかし即座にこう返しました。
「うーん、気持ちは分かるんだけど、今は新機能の方がビジネスインパクト大きいからね。動いてるものを壊すリスクを取るより、新しい価値を届けよう。 リファクタリングは余裕ができたらね」
「余裕ができたら」──エンジニアなら誰もが知っています。その日は永遠に来ないことを。
私の実体験ではリファクタリングをしっかりしなかったおかげで、それに起因する改修作業が死ぬほどかかりました、、戒めに残しておきます。
技術解説:「技術的負債」という概念の起源と本質
ウォード・カニンガムの「借金」メタファー
「最初のコードを出荷することは、借金をすることに似ている。小さな負債は書き直しで返済すれば開発を加速するが、負債を返済しないまま放置すると利子が膨れ上がり、最終的にプロジェクトは停止する」
(ウォード・カニンガム, 1992年 OOPSLA Conference)
「技術的負債(Technical Debt)」という言葉を最初に使ったのは、Wiki(WikiWikiWeb)の発明者でもあるウォード・カニンガムです。
彼が天才的だったのは、エンジニアの「コードが汚い問題」を、経営者やPMが最も理解できる言語──「お金(借金)」──に翻訳したことです。
マーティン・ファウラーの「技術的負債の四象限」
マーティン・ファウラーはさらにこの概念を整理し、技術的負債を4つのタイプに分類しました。
│ 意図的 │ 無自覚
─────────────┼─────────────────────┼─────────────────────
無謀 │「設計なんて後でいい │「レイヤーって何?」
│ から早く出せ!」 │ (そもそも知らない)
─────────────┼─────────────────────┼─────────────────────
慎重 │「今はこの設計で出す │「あの時はベストだっ
│ が、後で直す前提」 │ たが、今は違う」
(Martin Fowler "TechnicalDebtQuadrant")
重要なのは、「慎重かつ意図的な負債」は戦略的に許容されるべきだということです。
スタートアップが市場投入速度を優先して多少の設計妥協をするのは、「意図的な借金」であり、ビジネス判断として正しい場合があります。
問題は、その借金を返済するつもりで借りたのに、「返済計画(リファクタリングのスケジュール)」が永遠に立てられないことなのです。
PMに「返済しないとヤバい」と伝える翻訳術
エンジニアが「リファクタリングしたい」と言っても、非エンジニアのPMや経営層には「今動いているものを触ってリスクを負う意味が分からない」と映ります。
この断絶を埋めるために、カニンガムのメタファーを使った「翻訳」が必要です。
1. 「利子」を数字で見せる
「このモジュールに機能を追加するのに、1年前は2日で済んでいました。今は、コードの複雑さのせいで5日かかっています。この『余計な3日分』が、毎回発生する利子です。 年間で機能追加が10回あるなら、利子の合計は30人日。リファクタリングに10人日投資すれば、この利子がゼロになります」
2. 「障害リスク」をビジネス言語に変換する
「このレガシーコードは、触るたびに意図しない副作用(バグ)が出ます。過去半年で関連障害が3件。復旧対応に延べ5人日、さらにSLAに影響する可能性もあります。リファクタリングは『コストセンター(コスト源)』ではなく『リスク低減投資(保険)』です」
3. 返済計画をバックログに「機能チケット」と同列で積む
「リファクタリング」という曖昧なチケット名をやめます。
代わりに、「○○モジュールの認証ロジック刷新(目的:機能追加工数を50%削減)」のように、ビジネス上のメリットをチケット名に埋め込みます。これで、POが優先順位をつける判断材料が揃います。
エンジニアの「きれいなコードにしたい」という想いは正しい。しかし、その想いをPMに伝える時、技術用語のまま話してしまうから承認されないのです。
カニンガムが教えてくれた「借金」という共通言語を使い、利子と返済計画をビジネスの言葉で語る。それが、バックログの底からリファクタリングを救い上げる唯一の方法です。