ADLCThe Agentic Development Lifecycle
Chapter 22 · Part V — Modes and Practice

Chapter 22 — Vibe Coding, Spec-Driven, and ADLC

3637 words

The mistake is not vibe coding. It is failing to notice when the artefact stopped being a prototype.

What you'll learn
  • What vibe coding actually is according to the research rather than the discourse
  • A precise formulation: it is A2 with the acceptance criterion held in the human's head, and the derived condition under which that is correct
  • The security evidence — 1,471 vulnerabilities across 200 deployed applications — and why its three root causes are mechanisms this book already established
  • Chapter 3's open question answered: specification and harness are substitutes for the same constraint, with different cost structures
  • Where spec-driven development belongs, and when it beats building a harness
  • What ADLC must preserve rather than spend
The claim this chapter defends

specification strength and harness strength are two ways of satisfying the same Ashby constraint — reducing the variety a regulator must govern — and they differ in cost structure rather than in kind. Specification is per-task and recurring; harness is per-topology and amortised. Which means the choice between spec-driven development and harness engineering is an economic one determined by task volume and homogeneity, not a philosophical one.


22.1 What it actually is

Andrej Karpathy coined vibe coding in February 2025. The research literature that followed is more interesting than the discourse that followed, and it is worth starting there.

Pimenova, Fakhoury, Bird, Storey, and Endres — with Fakhoury and Bird at Microsoft Research — analysed over 190,000 words from semi-structured interviews, Reddit threads, and LinkedIn posts, producing a grounded theory of the practice [B]. Their characterisation:

A natural-language programming paradigm centred on iterative co-design with an AI assistant, emphasising flow and experimentation over strict upfront specification.

Three findings from that study matter for this chapter, and none of them is what the dismissive version predicts.

It is a distinct interaction paradigm, not lazy engineering. The theory they build treats vibe coding as supporting the co-creation of software by humans and AI agents — a mode of working, with its own structure, rather than an absence of one.

Flow is central and psychological. The paper's title names it, and the study captures the flow experiences of developers while "vibing". This is not incidental colour. Section 22.9 argues it is a design constraint on any lifecycle that hopes to be adopted.

Practitioners personify the assistant. Many describe the LLM as a partner or pair programmer. That framing does real work — it explains why the practice feels like collaboration rather than tool use, and it is worth noticing that Chapter 5 established the partner has no memory, no stake, and no accountability. The felt relationship and the actual one differ, which is Chapter 18's territory.

So: a real paradigm, with real psychological content, that people adopt deliberately. Any treatment that opens by calling it undisciplined has already misdescribed its subject.

22.2 The precise formulation

The formulation this book's research notes proposed is that vibe coding is A2 with the harness switched off. That is close and not quite right, and the correction matters.

Chapter 13 defined A2 — Delegated: the agent completes a scoped task and the human reviews the resulting diff. Vibe coding has the delegation. What it lacks is not the harness exactly — it is the acceptance criterion as an artefact.

Vibe coding is A2 with the acceptance criterion held in the human's head rather than written down. The human still verifies. They verify by looking, running it, and judging — live, in the moment, against a standard that exists only in their mind at that moment.

This is more precise and it is more useful, because it immediately yields the condition under which the mode is correct rather than merely popular.

The acceptance criterion lives in one person's live judgment. So the mode works exactly when that judgment is an adequate acceptance test — and fails, predictably, when it is not.

VIBE CODING IS CORRECT WHILE ONE PERSON'S LIVE JUDGMENT IS AN ADEQUATE ACCEPTANCE TEST. IT FAILS WHEN:the artefact is TOO LARGE to hold in viewjudgment cannot cover what it cannot seethe artefact OUTLIVES the sessionfuture-you is not in the room, and Ch 19 showed the work was not deeply encodedsomeone ELSE must maintain ittheir standard is not yours, and yours was never written downfailures are SILENTjudgment-by-looking cannot detect what does not present · 1,471 vulnerabilities across 200 deployed appsAll four are properties of the CONTEXT, not of the practice — which is why the mode is right or wrong situationally.
Figure 22.1 — Four conditions, each derived rather than asserted. Note that all four are properties of the CONTEXT, not of the practice — which is why the mode is right or wrong situationally.

Notice what Figure 22.1 does not say. It does not say the code is worse. It says the verification is bounded by one person's attention at one moment, and lists the four ways that bound is exceeded.

22.3 The security evidence

The fourth condition — silent failure — has the strongest evidence behind it, and it is recent.

Deng and colleagues built VibeApps, a corpus of 10,517 open-source vibe-coded applications, randomly sampled 200 deployed applications, and identified 1,471 vulnerabilities across them [B]. That is roughly seven per application, in software that was deployed.

Three recurring classes:

ClassWhat it is
Placeholder logicCode that stands in for behaviour that was never implemented, and looks implemented
Unfiltered inputInput handled without validation
Secret exposureCredentials in code, logs, or client-visible surfaces

And now the part that should interest a reader of this book. The authors attribute these to systematic limitations of AI agents across the vibe-coding lifecycle, and name three root causes:

Memory loss. Chapter 5's third failed assumption — the author has no interrogable intent — and Chapter 7's finding that no repository in a 2,853-repository study used the persistent memory feature available to it [A].

Locally optimised objectives. Chapter 4's cost gradient, precisely: the agent optimises within the scope it was given, and the cheapest correct action is the locally-scoped one. That chapter derived duplication from this mechanism; here it produces placeholder logic, which is the same locality applied to completeness.

Insufficient security knowledge. Chapter 11's argument that belief-based controls fail — you cannot instruct your way to security, and an agent's security knowledge is a belief-shaped asset.

Three root causes, arrived at independently by security researchers analysing 10,517 applications, and each is a mechanism this book derived from different evidence in different chapters. That convergence is worth more than any single figure in it.

Their conclusion is the one to carry forward: advances in model capability and improved prompting reduce the incidence of these vulnerabilities but do not eliminate the underlying risks. This is Chapter 9's distinction restated — some deficits are capability deficits that training closes, and some are structural, and no model improvement closes a structural one.

The general phenomenon underneath is worth naming, because it is what makes the fourth condition of Figure 22.1 bite: silent failure — code that compiles perfectly and executes flawed logic. It is exactly what judgment-by-looking cannot catch, because there is nothing to look at. (The construction-safety study often cited for this framing remains 🔴 unverified in this book's ledger and is not relied upon here; the VibeApps evidence carries the point on its own.)

22.4 Spec-driven development, placed

The alternative discipline takes the opposite approach: write the specification first, make it precise enough to be checkable, and let generation proceed against it.

Farrag's specification-driven governance ladder, introduced in Chapter 12 §12.11, gives the escalation: post-hoc review → natural-language specification → executable contract → constitutional governance [B]. Chapter 8's held-out acceptance set is a point on that ladder. Chapter 12 made Intent a phase with an artefact rather than an assumed precondition, which is spec-driven thinking absorbed into the lifecycle.

So this book already contains a substantial amount of spec-driven development. What it has not done, until now, is answer the question of when specification should be the primary investment rather than one guide among several — and Chapter 3 left that question open in a form that threatens the book's argument.

22.5 Chapter 3's open question

Chapter 3 plotted the realism gradient and then raised an objection to its own reading:

Is the gradient a gradient of task realism or of specification completeness? Every high-scoring study supplied a clear specification; METR's real tasks did not. If it is the latter, the remedy is specification discipline rather than harness scope, and Chapter 22 has to take that possibility seriously.

Take it seriously. In that dataset the two variables are almost perfectly confounded: toy tasks arrive fully specified, real tasks arrive under-specified. So the gradient is consistent with both readings.

There is one datum that partially separates them, and it favours the specification hypothesis more than I expected.

The Google trial put 96 engineers on a realistic enterprise task — build a logging service on Google's internal infrastructure, editing 10 files and 474 lines — that was nonetheless clearly specified. Result: 21% faster, though losing statistical significance under controls [A]. METR's tasks were realistic and under-specified: 19% longer [A].

Realistic-and-specified came out positive. Realistic-and-unspecified came out negative. The confounds are real — Google engineers on Google infrastructure versus open-source maintainers with five years in their own repositories, and a 96-minute task versus multi-hour ones — so this is suggestive rather than decisive. But it is enough that the specification hypothesis cannot be waved away.

Here is the resolution, and it dissolves the opposition rather than picking a winner.

Chapter 8 established the Ashby constraint: a regulator can only govern variety it has a model of, an unconstrained generator has unbounded variety, so variety reduction is forced. What that chapter did not say is that there are two places to reduce it.

ASHBY SAYS VARIETY MUST BE REDUCED. THERE ARE TWO PLACES TO REDUCE IT.SPECIFYreduce the space of ACCEPTABLE outputsspec-driven development · executable contractsCOST: per TASK — recurring, linear in task count▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ (never falls)best when: few, varied, high-stakes tasksSTRUCTURE + SENSEreduce the space of REACHABLE outputscontext · harness · graph · structure · gatesCOST: per TOPOLOGY — fixed, amortised over every future task▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░ (falls per task with volume)best when: many similar tasksThey are SUBSTITUTES at the margin. So the choice is economic — set by task volume and homogeneity — notphilosophical.
Figure 22.2 — The answer to Chapter 3's question. Both readings of the gradient are correct because both variables are the same variable, measured at different ends of the pipeline.

So the answer to Chapter 3's open question: it is both, and they are not rivals. Under-specification and structural illegibility are the same failure — too much variety reaching the generator — differing only in where you would intervene.

And the choice between interventions is economic, not philosophical. A team doing a hundred similar changes a month should build the harness, because the fixed cost amortises. A team doing three novel high-stakes changes a quarter should specify, because there is no volume to amortise against. Most organisations need both, in a ratio set by their task distribution rather than by their methodology preference.

This also explains a persistent disagreement in the field. Spec-driven advocates and harness advocates are usually both right, about different task distributions, and neither says which distribution they are describing.

22.6 Three modes

Vibe codingSpec-drivenADLC
Source of truthThe conversationThe specificationIntent + harness; spec is one guide among several
Acceptance criterionIn the human's head, liveWritten, before generationWritten, plus held-out (Ch 8)
Where variety is reducedNowhere — bounded only by judgmentUpstream, per taskUpstream and in the environment
Upfront investmentNear zeroHigh, per featureAmortised into harness and templates
FeedbackHuman eyeballs; run itSpec conformance and testsLayered computational and inferential sensors
Optimal forPrototypes, exploration, learning, personal toolsWell-understood features; regulated domains; low volumeProduction systems at team and organisational scale
Fails whenAny condition in Figure 22.1Requirements genuinely unknown; spec drifts from codeHarness unmaintained or contradictory (Ch 21)
Failure signatureSilent failure; plausible-but-wrong; security gapsSpec/code drift; ceremony overheadHarness Theatre; Review Collapse
Cognitive riskDeskilling; over-trustOver-specification; slow learningComplacency at high autonomy (Ch 19)

Now place them on the two-dimensional space Chapter 12 §12.11 established, where the axes are specification strength and agent authority:

THE SAME PRACTICE AT TWO POINTSACCEPTANCE IN THE HEADWRITTEN SPEC → EXECUTABLE CONTRACTMODE CONFUSIONvibe coding's operating point applied to production stakesCh 21's Prompt-and-PrayADLCauthority matched to specification and harnessHIGH AUTHORITYA2 – A4VIBE CODING — correct HEREprototypes · exploration · learning · personal toolsSPEC-DRIVENcorrect here — and over-ceremony if the authority neverrisesLOW AUTHORITYA0 – A1Vibe coding is not wrong. It is a LOCATION. Mode confusion is a location the artefact moved into without anyone deciding.
Figure 22.3 — The same practice at two points. Vibe coding is not wrong; it is a location. Mode confusion is a location the artefact moved into without anyone deciding.

22.7 Mode confusion, and the heuristic

The failure named in Chapter 21 as Prompt-and-Pray is not vibe coding. It is vibe coding's operating point applied where Figure 22.1's conditions have been violated — the upper-left region of Figure 22.3.

And the crucial property, which Chapter 23 develops: nobody moves there deliberately. The artefact moves. A weekend prototype acquires a user. A script someone wrote to check something acquires a maintainer. A demo acquires a credential. The mode was correct when chosen and became incorrect without any decision being made.

The selection heuristic, which is the practical output of this chapter:

BLAST RADIUS × PERSISTENCE × MAINTAINER COUNTwhat breaks if this is wrong? · how long will it exist? · how many people must understand it?all three LOW → vibe coding is correctany one HIGH → the acceptance criterion must leave your headtwo or more HIGH → and the environment must be constrained too (Part II)None of the three inputs is a judgement about how good the code looks — deliberately, because that faculty is the one Chapter 18 showed isdecoupled.
Figure 22.4 — Three inputs, all knowable at the start, none of them about how good the code looks.

Note that none of the three inputs is a judgement about quality. That is deliberate. Quality assessment is exactly the faculty Chapter 18 showed is decoupled from performance and Chapter 19 showed is degrading. The heuristic uses inputs you can know without trusting your own assessment of the artefact.

22.8 What ADLC must preserve

A lifecycle that eliminates vibe coding would be a mistake, and not only on grounds of fairness. Three arguments, in ascending order of strength.

Flow is real and it is in the research. Pimenova et al. name it in their title and capture it in their theory [B]. Chapter 17 §17.6 listed craft satisfaction as the cost of the author-to-director shift, and noted it was the only cost on that table with no measurement attached. Whatever the size of the effect, a discipline that treats enjoyment of the work as free to spend is making an assumption it has not tested.

A process that kills flow will be routed around. This is the same argument Chapter 21 made about anti-patterns: the remedy for a rational behaviour is never exhortation. If your lifecycle makes the good path miserable and the bad path pleasant, people take the bad path, rationally, and your controls become something to evade. Flow preservation is therefore an engineering constraint on the lifecycle, not a concession to sentiment.

And exploratory building is the practice Chapter 19 said protects judgment. This is the strongest argument and it is not obvious. Chapter 19 §19.7 reported the ordering effect: forming your own answer before delegating preserved recall and prefrontal activation, while the reverse ordering produced shallow encoding [B]. Vibe coding — building something exploratory, yourself, with a partner, against a standard in your own head — is attempt-first at the scale of a whole artefact.

Which means the prototype phase is not merely commercially useful. In an environment where Chapter 19 showed the work is becoming verification, and verification is the faculty whose feedback signal is decoupled, the exploratory mode may be where competence is still being built. An organisation that eliminates it in the name of rigour would be removing one of the few remaining places where engineers form their own answers before seeing someone else's.

That is a hypothesis rather than a finding, and I flag it as such. But it inverts the usual framing entirely: vibe coding is not the indulgence that a serious lifecycle tolerates. It may be a load-bearing part of how the people in that lifecycle stay able to run it.


The takeaway

Specification and harness are substitutes for the same Ashby constraint, differing in cost structure rather than in kind — so the choice between spec-driven development and harness engineering is economic, set by task volume and homogeneity, and vibe coding is the correct mode wherever one person's live judgment is genuinely an adequate acceptance test.

Open questions
  • Does the specification hypothesis survive a proper test? §22.5's Google-versus-METR comparison is suggestive and confounded. The experiment is straightforward: take real brownfield tasks and supply complete specifications for half. If performance recovers, specification dominates; if not, structural legibility does. Nobody has run it, and the answer changes where an organisation should spend.
  • Where is the crossover? Figure 22.2 says harness amortises with task volume and specification does not. The crossover point — how many similar tasks per quarter justify building the harness — is computable in principle and unknown in practice.
  • Does exploratory building actually protect competence? §22.8's strongest argument is an inference from Chapter 19's ordering effect applied at a larger scale. It is testable and it would change how organisations think about prototype work.
  • Is flow measurable enough to defend in a budget? Chapter 17 flagged craft satisfaction as unmeasured. Until someone connects it to retention or to competence maintenance, it will lose every prioritisation argument it enters — which is the same structure as Chapters 16, 19, and 20, appearing here for the fourth time.
Sources
  • Karpathy, Andrej — coined vibe coding, February 2025 ✅ verified via Pimenova et al.
  • Pimenova, Veronica; Fakhoury, Sarah; Bird, Christian; Storey, Margaret-Anne; Endres, Madeline. Good Vibrations? A Qualitative Study of Co-Creation, Communication, Flow, and Trust in Vibe Coding. arXiv 2509.12491 [B] ✅ verified — Microsoft Research and collaborators; over 190,000 words from semi-structured interviews, Reddit, and LinkedIn; grounded theory of vibe coding as a new interaction paradigm supporting human–AI co-creation; captures psychological flow; AI personification — practitioners describe the assistant as partner or pair programmer; "emphasising flow and experimentation over strict upfront specification." ⚠️ The report's claim that "AI trust regulates movement along a continuum from delegation to co-creation" is not directly verified and is not printed
  • Deng, Junquan; et al. Understanding the (In)Security of Vibe-Coded Applications. arXiv 2606.23130 [B] ✅ verified — VibeApps, a corpus of 10,517 open-source vibe-coded applications; 200 deployed applications randomly sampled; 1,471 vulnerabilities identified; recurring classes placeholder logic, unfiltered input, secret exposure; root causes memory loss, locally optimised objectives, insufficient security knowledge; capability and prompting improvements reduce but do not eliminate. Described as the first large-scale empirical study of security in agent-built applications
  • How much does AI impact development speed? An enterprise-based randomized controlled trial. arXiv 2410.12944 [A] ✅ — 96 Google engineers, realistic and specified task, 21% faster, significance lost under controls. The half of §22.5's comparison that favours the specification hypothesis
  • METR, arXiv 2507.09089 [A] ✅ — realistic and under-specified, 19% longer. The other half
  • Farrag, Sabry E. arXiv 2605.01160v1 [B] ✅ — the specification-strength ladder: post-hoc review → natural-language specification → executable contract → constitutional governance
  • Galster, Mohsenimofidi, Lulla, Abubakar, Treude, Baltes. arXiv 2602.14690, AIware '26 [A] ✅ — no repository used Subagent persistent memory, corroborating the memory loss root cause
  • Your Brain on ChatGPT. MIT Media Lab, arXiv 2506.08872 [B] ✅ — the brain-to-LLM ordering effect underlying §22.8's third argument
  • Ashby ✅ canonical — the constraint that Figure 22.2 shows has two levers
  • A Survey of Vibe Coding with Large Language Models, arXiv 2510.12399, and Hope or Hype? Understanding Vibe Coding through Software Practitioner… (ACM) [B] 🟡 — noted, not relied upon
  • Vibe Coding as a Reconfiguration of Intent Mediation, arXiv 2507.21928; Building Software by Rolling the Dice, arXiv 2512.22418; construction-safety domain study, arXiv 2604.12311 [B] 🔴 — unverified, not relied upon. The silent-failure framing in §22.3 rests on the VibeApps evidence instead

Full entries and verification status: references/sources.md.