This is the third post in a series on technical debt. Part One discussed the predominant definition of technical debt (the rework required by past choices) and tried to make sense of why we use debt as the operative metaphor for that state of affairs. Part Two continued on that theme and raised some issues with centering choice as the mechanism for tech debt creation.
This is Part Three and it’s about air conditioners. So buckle up, buttercups.
Air Conditioners Mostly Don’t Work
Consider the humble air conditioner, humming away making this grass field cooler:
Oh, except it’s not making that grass field cooler because:
The air conditioner isn’t plugged into a source of power so it can’t function at all.
Even if it was plugged in, it can’t make the field cooler because the heat generated by the air conditioner is going into the same undifferentiated space as the cooler air and air conditioners always generate more heat than they remove. That’s the Second Law of Thermodynamics which is also known, by me, as Carnot’s Revenge. And now by you, dear reader.
An air conditioner is a complex system that is also a solution to a problem, the problem of making a part of the universe cooler than the parts it is next to. But for an air conditioner to actually be a solution to that problem, the air conditioner has to be hooked up to the universe in some very particular ways:
The power input of the air conditioner has to be connected to a source of power with the right voltage, frequency, etc.
The air intake has to be connected to a source of the right sort of air.
The cooler air output has to be connected to a part of the universe that is relatively sealed off from the other parts, including the air intake.
You can come up with a bunch of other conditions that have to prevail for an air conditioner to actually condition the air in a space, including temperature ranges, humidity, etc. The vast majority of arrangements of atoms to which one might try to hook up an air conditioner will result in the air conditioner failing to fulfill the function for which it was designed.
Here’s a highly unlikely arrangement of atoms where things will probably work out:
But this homeowner is going to run into problems:
The air conditioner might be in mint condition, powered up, and ready to go. No matter, it will be the little air conditioner that couldn’t because the house it’s attached to isn’t structured so as to be air conditionable. Maybe when the house was first built, everything worked fine. Then over time, the homeowner put all their resources into keeping the air conditioner in excellent working condition, while letting the house fall into ruin.
OK, seems unlikely! What if the homeowner just kept expanding the house while keeping the air conditioner the same. Poor little air conditioner! It might be in perfect working order, but no matter, the house is now just too big for the AC to cool the whole thing.
Complex systems like air conditioners are solutions to very specific complex problems in the world. In other words, the solution, the problem, and their coherence with each other are low-entropy states.
Low-entropy states tend to decay into high-entropy messes. An air conditioner hooked up to a house will eventually stop working if:
The air conditioner falls apart.
The house falls apart.
The house changes such that the air conditioner no longer suffices for the needs of the house.
The third point may not seem like decay, but we can view it as a decay in the coherence between the solution system and the problem system, coherence that is needed for the solution to actually work. Any random change in either the solution or the problem is likely to reduce the coherence and thus reduce the effectiveness of the solution.
Please talk about software now
Software solutions are complex systems and thus subject to entropic decay. Software code is an unchanging virtual artifact, like mathematics. But code isn’t a solution any more than a blueprint is a house. Turning code into a working system requires instantiating it on a physical substrate that interfaces with the world in the particular ways required by the solution. And just like the air conditioner / house system, that specific instantiation will, absent sufficient inputs of energy and effort, degrade over time, becoming a worse and worse solution until, one day, it just stops working at all.
Sad! It is helpful to consider how software systems, in particular, decay over time. Most directly, the equipment upon which the software is running are physical systems that will age and eventually fail. This is normal physical asset depreciation.
But even though code itself is unchanging, specific code as a good solution can decay. Consider the prevalence of obsolete languages, tools, and dependencies. When you started writing that shiny new greenfield solution, of course you picked a new version of a well-supported language, the latest versions of tools and libraries, etc. So hot!
And now, years later, those exact same versions of languages, tools, and libraries are embarrassingly out of date, increasingly unsupported, and riddled with subsequently discovered security vulnerabilities. A part of the house decayed while you were focused on the air conditioner.
Or now your database, which worked so well when there were hundreds of records, struggles with millions or billions of records. The house got bigger, the air conditioner stayed the same.
That decay just happened, because the world changed, and will keep changing, and every change includes the possibility that your solution gets further out of coherence with your problem. That’s life. That’s Carnot’s Revenge.
The bankruptcy of debt as past decisions
And now hopefully it is clear why I think “tech debt is the cost of past decisions” fails to capture the true nature and scope of the problem. Over time, the explicit changes we make are nowhere near a comprehensive account of the total changes to the solution/problem system, the rest of which happened independently of our decision-making and likely caused the problem and its solution to decohere.
In the next part of this series I will discuss alternate ways of defining technical debt, by moving from the exciting world of air conditioning to the thrilling world of financial accounting. In the meantime, here is a possibly not historical picture of the bad-ass Nicolas Carnot:
And here is a very good boy just minding his own business, not decohering anything:
May your day be as peaceful.







