At vibe coding meetups, I keep encountering the same excitement: people who have never developed software are suddenly building applications. Screens appear. Buttons work. Data gets saved. Something that previously required a development team becomes possible in an afternoon.
That is a remarkable capability. It also makes it remarkably easy to underestimate what remains.
A working application is the visible part of an iceberg. Below the waterline sit authorization boundaries, data integrity, concurrency, failure recovery, observability, dependency management and the ability to change the system safely.
These concerns rarely feature in the first demonstration. They become painfully visible when people start depending on the software.
My concern is that organizations are mistaking the ability to produce that demonstration for the ability to engineer and maintain the system beneath it. People gain production responsibility before they have acquired the judgment needed to carry it.
Now, as coding agents drift, contradict earlier decisions and struggle with growing codebases, specifications are being rediscovered. Write down what you want. Ask structured questions. Decompose the work. Define acceptance criteria. Give the agent clearer boundaries.
I welcome those practices. What worries me is the belief that following a specification-driven development method is sufficient to produce good software.
A method can help uncover missing requirements. It cannot guarantee that the questions cover what matters, that the answers are sound, or that the resulting design is appropriate. Someone still needs to recognize the omissions and challenge the assumptions.
An inexperienced builder may describe the visible behavior in considerable detail while leaving everything below the waterline unresolved. The resulting document can look comprehensive. The agent can implement it faithfully. The tests can pass.
The system can still be insecure, fragile and expensive to maintain.
That is the false confidence I worry about: believing that because we have followed a method, we have specified the whole system.
Dex Horthy makes a related argument in Harness Engineering Is Not Enough. He describes the difficulty of maintaining codebase quality when agents optimize for completing individual tasks. His response is to bring human steering, program design and code review firmly back into the process.
He also acknowledges that he cannot prove his broader claim about models’ long-term maintainability limitations. That distinction matters. His experience describes a credible failure mode; it does not establish that every AI-assisted codebase will deteriorate.
There is nevertheless evidence supporting the concern.
The public summary of Gartner’s Predicts 2026 report identifies generated-code quality risks and calls for architecture-first validation and explicit boundaries between human and AI responsibilities. That is analyst guidance, rather than experimental proof, but it places architectural discipline squarely in the response.
McKinsey’s developer study found productivity gains and marginally improved code quality when developers actively worked with the tools. It also identified human expertise as crucial for finding errors, supplying organizational context and navigating complex requirements. The developers’ judgment was part of the successful result.
The confidence problem has empirical support too. In Do Users Write More Insecure Code with AI Assistants?, researchers found that participants using an AI assistant produced less secure code while being more likely to believe their code was secure. The study used an older model, so it cannot establish today’s vulnerability rate. It does demonstrate how assistance and misplaced confidence can coexist.
The maintenance evidence is more mixed. A study involving 151 participants, overwhelmingly professional developers, found no significant downstream maintainability degradation within its experimental scope. That limits any blanket claim that AI necessarily makes software harder to maintain. It also leaves open my concern about inexperienced builders taking production responsibility without comparable engineering support.
In The Bottleneck Moved, I argued that cheaper implementation shifts the constraint toward ambiguity, architectural clarity, decomposition and validation. Faster code generation also lets us accumulate the consequences of unresolved decisions faster.
That changes what we should ask experienced software people to do.
Bring them into the work while the solution is being shaped. Have them establish the boundaries, examine the data model, challenge assumptions and decide how correctness will be demonstrated. Let AI accelerate implementation inside those decisions. Keep engineers accountable for reviewing the result and making it operable.
This does not require every prototype to undergo a full production process. It requires an honest distinction between exploring an idea and accepting responsibility for a running system.
Nor is a degree or job title sufficient. The capability we need is the ability to reason about a system beyond its visible behavior, recognize the limits of our understanding and investigate what we have missed.
My prediction is that we are building toward a wave of maintenance debt and security remediation as today’s impressive demonstrations become tomorrow’s business-critical systems. Much of the bill will arrive after the original excitement has faded, landing with people who had no part in the decisions that created it.
Perhaps, by the time that wave arrives, AI will have developed the architectural judgment needed to repair what we are producing today. I hope so. But relying on tomorrow’s AI to rescue today’s engineering decisions seems an extraordinary way to run software development.
