← Back to writing

May 14, 2026

Why AI Teams That Skip the Blueprint Will Pay for It in Six Months

Originally on LinkedIn →

Between 2021 and 2024, something quietly reversed in professional software development. A study analyzing 211 million lines of code found that the activity of improving and reorganizing existing code dropped by roughly 60 percent. In the same period, the practice of copying and pasting code blocks rose by 48 percent, ultimately overtaking refactoring for the first time on record.

AI coding tools were getting better. The code being produced was getting worse.

This is not a coincidence, and it is not a problem that will solve itself by upgrading to the next model version. It is the predictable result of giving a powerful tool to teams without a discipline to govern how that tool is used. The industry has a name for that ungoverned approach: vibe coding.

What vibe coding actually means

The term was coined in February 2025 by AI researcher Andrej Karpathy. In his framing, vibe coding describes a workflow where the developer’s primary job shifts from writing code to directing an AI assistant through conversational prompts, accepting whatever is generated without necessarily reading or understanding every line. You describe what you want. Something appears. You describe a correction. Something else appears. You ship it.

For a weekend prototype or a throwaway demo, this is genuinely fast. Karpathy himself scoped it that way from the start. The problem is that the practice migrated into production systems, inside real companies, managing real data, long before anyone worked out what happens three months later.

What happens is this: every shortcut taken by the AI assistant accumulates as a liability in the codebase. Features that looked functional in isolation begin to conflict with each other. Changes in one area break something unrelated. The team that once moved quickly now spends most of its time firefighting problems it cannot easily explain, because the system was never designed in the first place. It was assembled by a machine following loose instructions, and nobody wrote down what it was supposed to do.

The discipline that predates the problem

Specification-Driven Development is not a new idea. Its roots trace to NASA engineering practices from the 1960s, developed in an environment where the cost of an undocumented assumption was measured in human lives. The principle was straightforward: the specification is the primary artifact, and code is derived from it, not the other way around.

When AI coding tools became capable enough to generate substantial amounts of working code, this principle became newly urgent, for a reason that has nothing to do with technical sophistication.

An AI assistant cannot read intent. It can only pattern-match against what it has been given. Without a clear specification, it fills the gaps with plausible-looking assumptions, and those assumptions compound. With a specification, a machine-readable document that defines what the software must do before a single line is written, the AI has an unambiguous contract to work against. The output becomes reviewable, testable, and traceable. The developer stops gambling on plausible and starts verifying correct.

The operating environment that the specification cannot cover

Here is where a second discipline enters the picture. A specification can guarantee that a piece of software does what it is supposed to do. It cannot guarantee that the software will behave reliably when deployed across different environments, scaled to higher demand, or handed to a different team six months from now.

The Twelve-Factor App methodology addresses this layer. Developed at Heroku from the observation of hundreds of thousands of applications in production, it functions like a building code for software. Where a specification is the blueprint, the Twelve-Factor method defines the structural standards the building must meet, regardless of what the blueprint says: how configuration is stored, how the application handles dependencies, how it responds when parts of its infrastructure go offline.

The analogy is worth sitting with. A skilled architect can design a beautiful and functional building. Without building codes, nothing prevents that building from being constructed with materials that fail in rain, or wired in ways that create risk, or plumbed in a manner that makes future repairs impossible. The codes are not a constraint on good design. They are the guarantee that good design survives contact with the real world.

Why neither one is enough alone

The Twelve-Factor methodology tells a team how an application must behave. It does not tell them what the application should do or provide any workflow for capturing that intent before building begins. Specification-Driven Development provides exactly that workflow, but it does not address how the application should be structured for deployment at scale.

Together, they cover both surfaces. The specification acts as the machine-readable brief that keeps AI-generated code aligned with human requirements. The Twelve-Factor principles act as the operational contract that keeps the resulting application portable, maintainable, and honest about its own complexity.

The teams adopting this combination are not moving more slowly than their vibe-coding counterparts. They are moving at a pace that compounds, rather than one that corrodes. The question for any organization investing in AI-assisted development is whether the speed they are measuring today is real velocity or whether it is borrowed time.


https://www.gitclear.com/coding_on_copilot_data_shows_ais_downward_pressure_on_code_quality

https://arxiv.org/html/2602.20478v1

https://www.augmentcode.com/guides/vibe-coding-vs-spec-driven-development

https://12factor.net