Software Is Not an Industry Problem

Why predictability breaks down in real software projects

Written early 2026

There is a persistent temptation to treat software development as an industrial activity.

The temptation is understandable. Industries promise predictability. They suggest that, given enough standardization, enough process, and enough enforcement of best practices, outcomes can be made reliable. Define the inputs clearly enough, constrain the process tightly enough, and you should get roughly the same results every time.

This logic works remarkably well when manufacturing physical objects.

It works far less well when building software.

Yet much of how software is planned, managed, estimated, and evaluated assumes that it behaves like an industrial process that simply has not been optimized enough yet. That the problem is one of maturity. That if teams adopted the right framework, followed the right methodology, or adhered more strictly to the right standards, uncertainty would eventually disappear.

After enough years inside real software projects, that belief becomes difficult to sustain.

Not because teams are incompetent. Not because tools are insufficient. And not because people resist discipline. But because software development is not primarily an industry problem to begin with.

It is a knowledge and design problem, carried out by humans, under conditions of uncertainty that do not vanish simply because we would prefer them to.

When a factory produces defects, we assume something went wrong in the process. When software behaves in unexpected ways, we often assume the same. But this analogy quietly breaks down once systems grow beyond trivial size. Software systems are not assembled from stable parts with fixed behavior. They are constructed from evolving abstractions, partial understanding of the domain, and assumptions that reveal their weaknesses only after the system is already in use.

This is why two teams, using the same language, the same framework, the same methodology, and the same process, can produce radically different outcomes. Not because one followed the rules and the other did not, but because the core activity is not mechanical execution. It is continuous interpretation and decision-making.

Treating software development as an industrial problem leads to predictable responses. We double down on process. We add gates. We demand more precise estimates earlier. We try to freeze requirements. We optimize for compliance rather than comprehension. And when reality refuses to cooperate, we blame execution instead of questioning the model.

What often goes unexamined is whether the desire for predictability actually aligns with the nature of the work.

Software does not merely implement requirements; it exposes misunderstandings about them. It does not simply encode designs; it tests their assumptions. Every non-trivial system teaches its creators something they did not know at the beginning. That learning is not a failure of planning. It is the work itself.

This is where the limits of the industrial framing begin to show. It treats learning as deviation, change as instability, and uncertainty as something to be eliminated rather than managed.

None of this implies that software development is chaotic, unstructured, or purely creative in a romantic sense. There is logic, rigor, and discipline involved—often a great deal of it. But discipline in this context does not come from pretending the work is predictable. It comes from acknowledging where it is not, and designing practices that can absorb that reality without breaking.

Many of the frustrations people experience in software projects are not caused by a lack of process, but by a mismatch between the process and the nature of the work. The tighter a system is designed to enforce certainty, the more brittle it becomes when certainty fails to materialize.

Seen this way, recurring problems such as missed estimates, late discoveries, rewrites, refactors, and redesigns stop being mysterious. They are not signs of immaturity in the field. They are symptoms of treating an exploratory, design-heavy activity as if it were a production line.

Software development is not strained because it has failed to become industrial enough.

It is strained because we keep asking it to behave like something it is not.

If you feel like responding, you’re welcome to send me an email at [email protected].