The Hidden Cost of “It Works”
An analysis of maintenance cost as a structural phenomenon rather than a technical one, and why working software can still be expensive to change.
There is a moment in many software projects when someone says: “It works.”
The sentence is usually meant as reassurance. The system behaves correctly. Tests pass. Users can complete their tasks. There are no critical incidents. From the outside, everything appears stable.
And yet, this sentence often marks the beginning of a different kind of cost. A cost that is not immediately visible, not tracked in tickets, and not captured by performance metrics.
“It works” is not a neutral statement. It describes functionality, but it quietly avoids structure.
When functionality becomes the wrong measure
Most software systems are built to work. That is their primary purpose. Functionality is concrete, testable, and easy to validate. A feature either does what it promises, or it does not.
Structure, on the other hand, is harder to measure. It reveals itself over time, not at the moment of delivery.
As long as a system works, structural questions tend to remain unanswered:
- Why is the system organized this way?
- Where does responsibility live?
- Which parts are stable, and which are accidental?
- What is safe to change? And what is not?
These questions are rarely urgent at first. They become relevant only when the system is asked to grow, adapt, or explain itself.
Maintenance cost is not a bug problem
When teams talk about maintenance cost, they often think of bugs, regressions, or outdated dependencies. These issues are visible and actionable. They fit well into backlogs and sprint planning.
But the most significant maintenance costs in long-lived systems usually come from somewhere else.
They emerge when:
- decisions are no longer obvious
- behavior depends on historical context
- changes require coordination across multiple people
- understanding the system takes longer than modifying it
This kind of cost does not show up as broken functionality. The system still works.
What changes is the effort required to act with confidence.
Knowledge as a temporary substitute for structure
In many systems, knowledge compensates for missing structure.
A senior developer knows which parts are fragile. A tech lead remembers why a certain workaround exists. Someone on the team can usually explain how things fit together.
For a while, this works surprisingly well.
Human memory and experience are flexible, fast, and context-aware. They can smooth over inconsistencies and bridge gaps in design. As long as the team is small and stable, knowledge can replace explicit structure.
But knowledge does not scale.
It cannot be versioned. It cannot be queried reliably. And it cannot be inherited without loss.
As systems grow, knowledge slowly turns from an asset into a bottleneck. The system still works, but fewer people truly understand why.
The illusion of stability
One of the most deceptive aspects of “it works” is that it creates the illusion of stability.
Nothing is broken. No urgent action is required. There is no clear signal that something needs to change.
Yet beneath the surface, subtle shifts are happening:
- Changes take longer to implement.
- Refactoring feels risky.
- Discussions about “the right place” for new functionality become harder.
- Decisions rely more on intuition than on shared models.
These are not failures. They are signs that structure has become implicit.
The system is stable in behavior, but unstable in understanding.
Why this cost remains invisible
The hidden cost of “it works” is difficult to address precisely because it does not present itself as a problem.
There is no single commit to blame. No incident report to analyze. No clear moment where things went wrong.
The cost accumulates gradually, embedded in everyday decisions:
- choosing the safest rather than the clearest solution
- avoiding certain parts of the codebase
- relying on specific individuals for critical changes
- postponing structural questions in favor of short-term delivery
Each decision is reasonable on its own. Together, they form a system that is expensive to evolve.
Working systems can still be fragile
A system can work reliably and still be fragile.
Fragility does not mean that it fails often. It means that change carries disproportionate risk.
In fragile systems:
- small changes have unpredictable effects
- confidence depends on specific people
- progress slows not because of complexity, but because of uncertainty
This fragility is rarely intentional. It is the result of growth without explicit structure.
“It works” describes the present. It says nothing about the future.
Seeing the cost is the first step
The purpose of naming the hidden cost of “it works” is not to criticize pragmatism or early decisions. Many successful systems exist precisely because teams focused on making things work first.
The problem arises when “it works” becomes a long-term evaluation criterion.
At that point, functionality masks structural debt. And the longer this debt remains unnamed, the harder it becomes to address.
Seeing the cost does not require rewriting or optimization. It requires making structure visible and discussable.
Only then can “it works” become a starting point rather than an endpoint.