There's No Limit to How Bad Code Can Get

Sep 05, 2026 09:13 PM - 1 week ago 3
  • 04 September 2026
  • software-engineering,
  • essay

TL;DR: Metaphors for illustration "a sinking ship" are often utilized to picture codebases, but are misleading. A business will descend agelong earlier codification value reaches a hypothetical floor. Technical indebtedness has no bankruptcy, nary cleanable reset, truthful metaphors that connote an extremity supply a mendacious consciousness of security.

Software is successful the domain of the abstract. It is not for illustration a building, aliases a bridge, that is in the beingness realm wherever you tin spot and consciousness the quality of the thing. If you proceed to add floors and rooms to a building forever, it will collapse. Software faces nary specified constraint. The codification tin always get worse. There tin always beryllium a caller furniture of indirection or a simplification successful performance.

1: Boarding a sinking ship

Over a decade agone I had my first brushwood pinch an ugly bequest codebase. I had conscionable joined Amazon as a "Software Development Engineer", caller retired of university, and worked connected a squad that owned code related to processing orders. On the surface, what our codification had to do seemed simple. Processing an bid progressive penning immoderate things to a database and calling into services owned by different teams, either to inquire validity questions aliases to update bookkeeping connected their end. My colleagues and I estimated that a capable implementation of this strategy shouldn't need more than 2 twelve beardown engineers to support and evolve. Yet, our statement was hundreds of people, and the strategy had grown truthful ample and analyzable that it had go intolerable to learn really it each worked.

It was uncommon to enactment longer than a fewer years successful this org, and organization knowledge had eroded. This resulted successful codification that was afloat of "haunted graveyards". Fear suppressed immoderate (under-rewarded) efforts to simplify existing systems. The business rules for what had to beryllium done for each type of bid were decided by group agelong agone who weren't astir anymore. These rules could sometimes beryllium recovered successful a hopelessly retired of day record proudly calling itself a 'living document', but often the rules simply were not written anyplace we could find. Tracing behaviour yourself wasn't easy either because much of the strategy lived crossed squad boundaries wherever the codification was not easy to access.

When immoderate obscure process wasn't happening pinch an bid that should person been happening, our pagers would angrily notify america that personification successful our tangled web of work limitations was unhappy. As a result of this feedback mechanism, the strategy stayed afloat, but remained difficult to change and had abysmal performance. Despite this, caller layers were perpetually added to support the latest Amazon products and features. This felt unsustainable, and this emotion is what makes maine and others reach for a "sinking ship" arsenic a metaphor to picture an statement that doesn't salary down their technical debt.

To their credit, location were ever ongoing attempts to hole the architecture, and these usually went arsenic follows: A caller head aliases elder technologist joins the statement and observes that "things are bad". Leadership astatine the statement agrees and wants to make things better, but location are nary engineers available, truthful each hole effort includes adding caller engineers and teams.

The re-architectures were ever a failure: The strategy required years of study to properly understand and was perpetually changing. It's not politically viable to return truthful agelong to creation a fix for the system, truthful people everyone attempting to hole things must activity with incomplete information. Some of this impatience is from within: If you are trying to design a expansive hole for specified a prominently achy architecture, you are doing it successful portion because you want a promotion (and you don't want to hold excessively agelong for a promotion).

Each rhythm would extremity pinch the remains of the caller effort permanently grafted onto our architecture and the starring technologist having departed pinch their requisite promotion. The accrued headcount stays because the migration plans are excessively achy and unpopular to really finish. The cycle continued arsenic it had agelong earlier I had arrived. The sinking vessel seemed to person nary end.

2: Where does it end?

About 3 years aft I had left, I was chatting connected the telephone pinch a erstwhile workfellow from that team. He had precocious near the institution aft an awesome 6-year tenure and had witnessed the cycle complete again. We were commiserating, and some of america reached for the sinking vessel metaphor to picture the org, contempt america having near years apart.

"Where does it end? How does it end?" he asked me, funny to perceive my return connected what would hap to that org successful the future.

The mobility and metaphor didn't beryllium correct pinch me, and I realized the mobility conflated two things. Are we talking astir the code, aliases are we talking astir the company?

A business tin sink. Bad package is simply a existent resistance connected the business, but really overmuch that actually matters depends connected a batch of factors. For a institution pinch plentifulness of rate travel for illustration Amazon, they can tolerate immoderate bouts of soul rot present and location earlier it has immoderate meaningful effect connected their bottom line. For different institution whose business exemplary is much delicate to package quality, bad software whitethorn beryllium a latent invitation to a competitor to present the metaphorical hull breach (and no, LLMs don't alteration this).

For the code, the sinking doesn't end. It's an infinitely sinking ship, because location is nary limit to really bad codification tin be. You didn't flight a building that was astir to collapse. It is successful a constant, neverending authorities of collapse. There's thing incorrect pinch utilizing words that connote there's an end.

Software is successful the domain of the abstract. It is not for illustration a building, aliases a bridge, that is successful the physical realm wherever you tin spot and consciousness the quality of the thing. If you continue to adhd floors and rooms to a building forever, it will collapse. Software faces nary specified constraint. The codification tin always get worse. There tin always beryllium a caller furniture of indirection aliases a reduction successful performance. ↩

The pedants will rightfully constituent retired that package tin wholly neglect to usability if it gets bad enough. In practice, specified breaking changes are quickly reverted. The thousands of changes that came before to make the codification worse are not. The package continues to 'work'. Other cases without a single breaking alteration to revert are wherever the ballooning costs of the bad package eclipse its benefit, or if improvement velocity approaches zero because thing tin beryllium shipped without a breakage. In all of these cases, it is the business that dies agelong earlier the codification hits immoderate hypothetical level (so don't enactment for illustration there's a floor!).

3: Technical indebtedness has nary bankruptcy

The resistance of bad package connected the business is simply a existent threat and the logic why bully organizations pay attraction to codification quality. Since location is nary abrupt nonaccomplishment period associated pinch software quality, it's often described arsenic "technical debt", which tin beryllium a amended metaphor (debt can compound forever) but is besides imperfect.

Debt has an 'ending' constituent because bankruptcy is simply a forced reset, and the equivalent in package is simply a afloat rewrite, which is rarely an option.

The closest action that a mega-corp specified as Amazon has is what I telephone a side-channel, wherever they divided disconnected a squad that builds a new, completely disconnected strategy pinch only the minimal group of features needed for immoderate caller usage case. Moving forward they past person the action to nonstop much caller use-cases astatine this simplified, separate system. Importantly, the aged strategy must stay and beryllium maintained (it's not an 'end'), because all the aged use-cases still exist, and caller organizational-level symptom is felt whenever deciding which to use successful the future. That's not precisely slate-clearing for illustration we deliberation of a bankruptcy.

The incorrect intelligence models astir package lead to bad decisions. If a 'hard reset' flight hatch exists, then punting method indebtedness doesn't look truthful bad. The belief that a rewrite astir the area could fix things results successful worse decisions today, because the decision-maker coming doesn't understand that location is nary flight hatch.

Metaphors for illustration a "collapsing building" aliases a "sinking ship" are not due for software, yet we can clasp them anyhow to stress what makes package different. The building is infinitely collapsing. The vessel is infinitely sinking. There is nary earthy constraint that will aftermath your project head up and unit them to woody pinch method debt. Software will only enactment precocious quality if we put successful the effort to extremity the sinking. Grab a bucket.

  • ← Previous
    Zach's GameDev Story
More