コードはどこまでも悪化し続ける――「沈む船」という比喩がもたらす誤った安心感

There's No Limit to How Bad Code Can Get

著者がAmazonで経験した巨大レガシーコードベースの事例をもとに、コード品質の悪化に終わりがないことを論じる。ビジネスは沈むかもしれないが、コードは無限に沈み続ける。技術的負債には破産もリセットもなく、建物や橋のような物理的制約がないため、コードは常に悪化し得る。比喩が誤った安心感を与え、技術的負債への対処を先延ばしにすると警告する。

ソフトウェアは抽象の領域にある。建物や橋のように、物理的な領域にあってその本質を見て感じ取れるものではない。建物に永遠に階や部屋を追加し続ければ、それは崩壊する。ソフトウェアにはそのような制約はない。コードは常に悪化し得る。常に新たな間接層が追加され、パフォーマンスが低下し得るのだ。
  1. ChrisMarshallNY

    私の最初の仕事の一つは、1979年代のFORTRAN IVで書かれた10万行以上のコードベースの保守エンジニアでした。

    コメントなし。

    サブルーチン(現在「関数」と呼ばれるもの)なし。

    変数名は4文字以内。

    楽しかったです。最も効果的なデバッグツールは、ウィジャボードでした。それのおかげで、私は推測の専門家になりました。

    それが、最近私がコードの品質にこれほどこだわる主な理由です。誰にもあんな思いをさせたくありません。

    ちなみに、今日のLLMを使えば、ドキュメントが不十分だったり、フォーマットが悪いコードには本当に言い訳できません。商業グレードのスパゲッティコードを千行書いて、LLMにフォーマットとドキュメント化を指示すればいいのです。

  2. lukasgelbmann

    洞察に富んだ記事です。著者は、組織における技術的負債のダイナミクスについていくつか優れた点を挙げています。

    しかし、「沈没する船」はかなり良い比喩だと思います。ただし、「沈んだ船」は恐ろしく、ひどい結果です。

    この比喩では、コードベースが「沈んだ」状態とは、それを使い続けることが不可能になった状態です。組織はそのコードベースの作業をやめ、実行もしなくなります。この時点で、コードはビジネスにとって完全に無価値であり、海底の船のようなものです。確かに、コードが理論上さらに悪化することを想像することはできます。しかし実際には、それはただそこに置かれ、腐敗していくだけです。[0] ビジネスは書き直しを試みるか、製品を廃止するかもしれません。

    ビジネスがそのコードベースの一つと共に沈む可能性はありますが、必ずしもそうなるとは限りません。これは、ビジネスが船に大きく依存している場合にも起こり得ます。

    [0] https://en.wikipedia.org/wiki/Software_rot

  3. blevinstein

    > 技術的負債には破産も、きれいなリセットもない

    技術的負債の破産オプションは確かに存在します。

    特定のコードやテクノロジーの使用をやめることができます。例えば、それを(新しいコードやサードパーティ/ベンダーソリューションで)置き換えたり、コードの機能が不要になるようにシステムやビジネスプロセスを再構築したりすることで。

    これはまさに技術的負債の比喩が意味するところです。短命なシステムは、それほど心配せずに多くの技術的負債を蓄積できます。なぜなら、すぐに破産(廃止と撤去)を宣言する予定だからです。一方、長命なシステムは、通常の分割払いで技術的負債を返済する計画を立てなければなりません。

  4. socalgal2

    2つのこと

    1. LLMは私の経験ではこれを修正できます。LLM、特に最近のものは、ほとんどの人間よりもはるかに多くの短期記憶を持っています(少なくとも私よりははるかに)。彼らはこの種のコードを掘り下げて、すべてのエッジケースを理解し、テストを書き、改善のためのさまざまな道筋を提案し、それらの道筋を実行することができます。要求すれば、移行を安全にするために、開発システムやステージングシステムなどを喜んでセットアップします。少なくともそれが私の経験です。彼らは私が思いつくよりもはるかに深く掘り下げることができます。

    2. LLMによる修正とは別に、あるいはそれがない場合、この技術的負債のパターンは、少なくとも人間が関わる限り、ほぼ避けられないと思います。完璧な世界では、すべての人間とすべてのレビュアーが、どのアーキテクチャを書くべきか、どのテストですべてのルールと前提を伝えるべきかを正確に知っています。なぜなら、何があっても人々は去っていくからです。しかし、私はそのようなコードベースを見たことがありません。だから、ルールと前提はせいぜい半分しか書き留められておらず、おそらくいくつかのコメントやドキュメントにあり、それらのコメントやドキュメントは、コードベースのその部分を次に編集する人が見るかもしれないし、見ないかもしれません。そして、それは続いていきます。

    私はWindows、Mac、Linux、Android、iOSで動作するコードベースで働いています。これらのOSは時間とともに変化し、要件も変化し、APIも変化し、世界は変化し、人々が行う新しいことのために新しいAPIが必要になり、クロスプラットフォームソリューションに対する私たちの当初の選択は、もはや完全には適合しません。私たちは動き続け、出荷し続ける必要があり、世界を止めて再構築することはできません。さらに、投稿者のように、すべての…

  5. cebert

    低コストのオフショア請負業者と仕事をしたことがあるなら、これが真実であることを知っているでしょう…

この日のほかの記事

2026-09-05