Skip to content

Complexity and Technical Debt

In this section we will look at the relationship between two of the most important concepts in software development: complexity and technical debt.

Software development practices and technology choices are fundamentally tools for managing complexity. Imagine you work in a warehouse, fetching hats for customers at the front desk. If there are only a few items, throwing everything into a pile might work fine. But as inventory grows, you add boxes and shelves, then basic labels, then more sophisticated labeling schemes — and eventually you might outgrow the building entirely.

Technical debt is what happens when complexity goes unmanaged. It's the equivalent of running a thriving hat business out of that original pile. Customers at the front desk may not notice anything wrong at first, but what happens when they're left waiting at the front while you search for the hat they need? What happens when you need to know how many hats of a certain type are in stock? Eventually, progress will grind to a halt.