虎の穴ラボ技術ブログ

虎の穴ラボ株式会社所属のエンジニアが書く技術ブログです

MENU

組織として技術的負債に立ち向かう — 「伝わらない問題」を乗り越えるために

はじめに

こんにちは、虎の穴ラボの高照です。

「技術的負債を解消したい」— エンジニアなら誰しも一度は口にしたことがある言葉ではないでしょうか。
しかし実際には、負債の解消に十分な時間とリソースを確保できているチームは多くありません。
本記事では、技術的負債がなぜ放置されがちなのか、そしてそれを組織としてどう乗り越えていくべきかについて、自分なりの考えを整理してみます。

リファクタリング手法やテスト戦略といった技術的なプラクティスの話ではなく、あえて「組織とコミュニケーション」に観点に絞って書きます。
なぜなら、技術的負債の解消を阻む最大の壁は、技術ではなく「理解されないこと」だと考えているからです。

技術的負債は「あとから増える」ものではなく「その瞬間に生まれる」もの

まず前提として押さえておきたいのは、技術的負債は開発するその瞬間に発生するものだということです。

「あのとき手を抜いたから負債が溜まった」という捉え方をされがちです。
しかし実際には、締め切りに間に合わせるための妥協や当時のベストプラクティスの陳腐化など、日々の開発活動そのものが負債を生み続けています。
つまり技術的負債は「発生させないようにする」ものではなく、「発生する前提で、日頃から意識して管理する」ものです。

この認識を持てているかどうかで、負債への向き合い方は大きく変わります。
負債を「失敗の結果」と捉えると誰かを責める話になりますが、「開発の副産物」と捉えれば、継続的に返済していく仕組みの話になります。

すべての負債が「悪」ではない — Fowlerの四象限

この「負債は開発の副産物である」という考え方を整理したものとして、Martin Fowlerが2009年に提唱した「技術的負債の四象限(Technical Debt Quadrant)」というフレームワークがあります。
(出典: Martin Fowler, "TechnicalDebtQuadrant", martinfowler.com, 2009年10月)
負債を「意図的(Deliberate)か偶発的(Inadvertent)か」「無謀(Reckless)か賢明(Prudent)か」の2軸で、次の4種類に分類するものです。

無謀(Reckless) 賢明(Prudent)
意図的(Deliberate) 結果を顧みず悪いコードを出荷する(例: 設計を検討する時間すら取らない) リスクを理解したうえで意識的に近道を選ぶ(例: 需要検証のため最小限の実装でリリースする)
偶発的(Inadvertent) 知識や経験の不足により、気づかないうちに問題を作り込む 当時の知識でベストを尽くしたが、後からより良い方法が分かる

このフレームワークの重要な示唆は、すべての負債が失敗の結果ではないという点です。
「賢明かつ意図的」な負債は、市場投入を早めるための戦略的なトレードオフであり、むしろ活用すべきものです。
また「賢明かつ偶発的」な負債は、学習と成長の必然的な副産物であり、どんな優秀なチームでも避けられません。
問題領域への理解は、実際に作って運用してみて初めて深まるからです。

負債を一括りに「悪」として扱うと、負債の存在自体を隠したくなる文化が生まれます。
四象限で分類すれば、「どの負債が戦略的な選択で、どの負債が構造的な問題の兆候なのか」を冷静に議論でき、ステークホルダーとトレードオフについて話し合うための共通言語にもなります。

なぜステークホルダーに理解されないのか

増えてしまった技術的負債の解消には、まとまった時間とリソースが必要です。そしてそのリソースを確保するには、開発部署から見た経営層などのステークホルダーの理解が不可欠です。
ところが、この理解を得るのが非常に難しいのです。理由はいくつかあると考えています。

動いているシステムは「問題ない」ように見える

ステークホルダーは動いているシステムを見て「問題ない」と判断します。内部のコードがどれだけ複雑化していても、画面上では正常に動作している。
氷山の水面下の部分は、外からは見えないのです。

機能追加・改善が常に優先される

技術的負債の解消と新機能の追加を天秤にかけたとき、ビジネス側から見れば新機能のほうが分かりやすく価値を生みます。
結果として負債の解消は「いつかやること」として後回しにされ続けます。

解消しても直接的な利益が見えない

仮に負債を解消できたとしても、売上が上がるわけでも、ユーザーが増えるわけでもありません。
「何も起きなかった」ことが成果であるため、ステークホルダーにとっては投資対効果が見えにくいのです。

「技術的負債が…」と言っても伝わらない

ここが本記事で一番伝えたいポイントです。エンジニアがステークホルダーに「技術的負債があるので解消したいです」と言っても、理解されることはほとんどありません。
「技術的負債」という言葉自体が、エンジニアの内輪の言葉だからです。

有効なのは、負債そのものではなく、負債がもたらす具体的な影響やリスクを、相手の言葉で示すことです。

セキュリティリスクとしての訴求

特に近年はランサムウェアをはじめとする攻撃が増加しており、古いライブラリの放置や場当たり的な認証実装は、そのまま事業リスクに直結します。
「負債を返済したい」ではなく「このままではインシデントが起きたときに事業が止まる可能性がある」と伝えれば、経営層にとっても自分ごとになります。
セキュリティは、技術的負債の解消を経営課題として認識してもらうための、最も強力な切り口の一つです。

ビジネスへの直接的な影響の提示

もう一つの切り口は、開発速度と品質です。負債が積み上がると、新機能の開発スピードは確実に低下し、不具合の発生率も上がります。
「今は1週間でできる改修が、半年後には3週間かかるようになる」「障害対応に取られる時間が増え、新規開発に割ける工数が減る」— こうした形で、負債を放置した場合の未来をビジネスの言葉で描くことが有効です。

エンジニアを取り巻く環境にも構造的な問題がある

一方で、エンジニアが「解消しづらい環境」に置かれていることも認識する必要があります。これはエンジニア個人の問題ではなく、こちらもまた組織側の構造の問題です。

まず、前述のとおりステークホルダーの理解が得られにくいため、解消のためのリソースがそもそも確保されにくい。さらに深刻なのが人事評価の問題です。
負債の解消はビジネス的に直接利益を生むわけではないため、会社の評価制度上、評価の対象になりづらい、あるいは評価されるためのハードルが高いのです。
これは「エンジニアの意識」でどうにかなる話ではなく、評価制度という組織の仕組みそのものが負債解消にインセンティブを与えていない、という構造的な問題です。
「頑張っても評価されない仕事」に、人は継続的に取り組めません。

そしてこうした環境の帰結としてありがちなのが、少人数で対応しようとして失敗するパターンです。リソースも評価もない中、有志のエンジニアが業務の合間に少しずつ進めようとすることがあります。
しかし、通常業務に押されて手が止まり、結果的に中途半端な状態で終わってしまいます。
リポジトリには「途中まで直したコード」だけが残り、かえって複雑さが増す— そんな経験をした方も多いのではないでしょうか。

技術的負債の解消は「組織全体」で取り組むもの

ここまでの話をまとめると、技術的負債の解消が進まないのは、個々のエンジニアの怠慢ではなく、構造の問題です。だからこそ、解決も構造で行う必要があります。

具体的には、経営層からの理解と支援を得て、技術的負債の解消を「開発チームの課題」ではなく「組織の課題」として認識してもらうことがスタートラインになります。
そのうえで、負債の返済を正式なプロジェクトやロードマップに組み込み、担当者の評価にも反映される形にします。個人の善意に依存する体制から、組織の仕組みとして回る体制への転換です。

「15〜20%ルール」による返済の仕組み化

仕組み化の具体的な方法として広く知られているのが、各開発サイクルの15〜20%を技術的負債の返済に恒常的に充てるという経験則です。
スプリントごとに一定の割合を負債返済枠として最初から確保しておくことで、「時間が余ったらやる」ではなく「毎スプリント必ずやる」に変わります。
ポイントは、この枠を新機能開発の予算や計画とは別枠として扱い、ビジネス側の要求で削られない聖域にすることです。

もう一つのアプローチとして、四半期に一度など定期的に、丸ごと1イテレーションを負債返済に充てる「debt sprint(負債返済スプリント)」方式もあります。
細切れの時間では手を付けにくい、大きなリファクタリングやアーキテクチャ改善に集中できるのが利点です。一方で、次の負債返済スプリントまでの数ヶ月間は負債が溜まり続けるというリスクもあります。

どちらの方式を選ぶにせよ、重要なのは「有志が業務の合間に頑張る」のではなく、返済の時間が計画として最初から確保されていることです。
前述の「少人数で対応して中途半端に終わる」パターンは、まさにこの計画的な時間確保がないことから生まれます。

おわりに

技術的負債は、開発を続ける限り必ず生まれ続けるものです。問題は負債の存在そのものではなく、それを管理し返済する仕組みが組織にあるかどうかだと考えています。

そしてその仕組みを作る第一歩は、意外にも技術ではなく「翻訳」です。エンジニアの言葉で語られる負債を、セキュリティリスクや開発速度の低下といったビジネスの言葉に翻訳し、ステークホルダーに届けることです。
この地道なコミュニケーションこそが、技術的負債への最も本質的な取り組み方なのではないでしょうか。

採用情報

虎の穴ラボでは一緒に働く仲間を募集中です!
この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧ください。
toranoana-lab.co.jp