リファクタリングを後回しにする上司と『技術的負債』
あるある!こんなシチュエーション
「今は動いてるからいいじゃん」「リファクタリングは時間の無駄」「新機能の方が大事」コードの品質を無視して突き進む上司。技術的負債の利子で破産することを知らないんですか?
実践!こう使え!
「後でリファクタリング」と言われたら「技術的負債って利子がつくんですよね。ウォード・カニンガムが言ってたような」とボソッとつぶやく。
詳しく解説!雑学のコーナー
技術的負債(Technical Debt)は、1992年にWard Cunninghamが提唱した概念です。ソフトウェア開発において、短期的な利益のために品質を犠牲にすることを、金融の負債になぞらえた比喩です。一時的な借金は事業を加速させますが、返済しなければ利子が膨らみ、最終的には破産に至るという警告でした。 Cunninghamは、最初のWikiであるWikiWikiWebの開発者としても知られています。彼は「最初のコードは借金のようなもの。少しの借金は開発を加速させるが、返済(リファクタリング)を怠ると、利子(保守コスト)で押しつぶされる」と説明しました。この比喩は、経営者にも理解しやすく、瞬く間に業界標準の用語となりました。 技術的負債には複数の種類があります。「意図的な負債」は、市場投入を急ぐために意識的に質を落とすもの。「無意識の負債」は、知識不足や経験不足から生じるもの。「ビット腐敗」は、環境の変化により、かつては適切だったコードが負債化するもの。それぞれ異なる対処法が必要です。 定量化の試みも進んでいます。SonarQubeなどの静的解析ツールは、技術的負債を「修正にかかる時間」として数値化します。ある調査では、平均的なソフトウェアプロジェクトは、コード1000行あたり42時間の技術的負債を抱えているとされています。100万行のシステムなら、4.2万時間、つまり約20人年の負債です。 Microsoftの研究では、技術的負債がプロジェクトに与える影響を詳細に分析しました。負債が蓄積したコードベースでは、新機能の追加に平均2.8倍の時間がかかり、バグの発生率は4.5倍に上昇。さらに、開発者の離職率も2倍になることが判明しました。負債は、財務だけでなく人的資源にも影響するのです。 有名な失敗例として、Netscape Navigatorがあります。ブラウザ戦争の中で、機能追加を優先し、コードの品質を犠牲にしました。結果、Netscape 4.xのコードベースは保守不可能になり、完全な書き直し(Mozilla)を余儀なくされました。その間にInternet Explorerにシェアを奪われ、会社は消滅しました。 日本の金融システムにも深刻な技術的負債があります。メガバンクのシステムの一部は、1970年代のCOBOLで書かれており、理解できるエンジニアが引退していきます。みずほ銀行のシステム障害の背景にも、数十年分の技術的負債の蓄積がありました。完全刷新には4000億円以上が投じられましたが、それでも問題は完全には解決していません。 「レガシーコード」との戦いも、技術的負債の一形態です。Michael Feathersは「テストのないコードはすべてレガシーコード」と定義しました。GitHubの調査では、5年以上前のコードを修正する際、バグを混入する確率は新規開発の3倍になることが分かっています。 対処法として「Boy Scout Rule(ボーイスカウトルール)」があります。「来た時よりも美しく」という原則で、コードに触れる際は必ず少し改善するという習慣です。また、Googleの「20%ルール」の一部を技術的負債の返済に充てる企業も増えています。 最新のトレンドとして、「技術的負債の予算化」があります。Spotifyは開発時間の15-20%を技術的負債の返済に割り当てています。また、「Tech Debt Friday」として、金曜日を負債返済の日とする企業もあります。重要なのは、負債を可視化し、計画的に返済することです。
※ ご利用は自己責任でお願いします。当サイトは、あなたの職場での人間関係を一切保証いたしません。