The Hidden Technical Debt of ML

Why ML systems rot faster than ordinary software — and the anti-patterns to name out loud.

0/1 done

The debt lives in the plumbing

ML code is the tip of the iceberg

Google's classic paper Hidden Technical Debt in Machine Learning Systems makes one uncomfortable point: the model code is a tiny box in a sprawling diagram of configuration, data collection, feature extraction, serving infra, and monitoring. The debt lives in the plumbing, not the model.

Name the anti-patterns so your team can call them in review:

  • Glue code — endless adapters around a vendor library.
  • Pipeline jungles — scrapes and joins accreted until no one dares change them.
  • Dead experimental codepathsif EXPERIMENT_42: branches that never got cleaned up.
  • Configuration debt — hundreds of flags, half undocumented.
  • CACEChanging Anything Changes Everything: a model's inputs are entangled, so tweaking one feature silently shifts the decision boundary everywhere.

Unlike normal tech debt, ML debt is invisible at the code level — it hides in data dependencies and feedback loops a linter can't see.

Analogy

An ML system is an iceberg. The model is the glinting tip above the water; the nine-tenths below — data pipelines, configs, monitoring — is what sinks ships. Teams that only inspect the tip hit the rest at speed.

Reflect

Hunt for hidden debt in a system you know.

  • Which pipeline would you be afraid to change, and why?
  • How many config flags could you delete today without anyone noticing?
  • Where does CACE bite you — which feature change ripples furthest?

Reading in progress · 0 of 1 activity done