Sources#
- Full Walkthrough: Workflow for AI Coding — Matt Pocock
- Uncle Bob on Software Fundamentals in the Age of AI
The question#
From Spec-Driven Development as the New Waterfall: is persistence the right definitional line between prompting and spec-driven development, as Pocock proposes and Martin's practice assumes?
Verdict#
No. Persistence is a proxy — cheap to observe, correlated with the thing that matters, and wrong at the edges in both directions. The property the corpus actually uses to separate a spec from a prompt is authority: an artifact is a spec when later work is judged against it. Persistence matters only because storing an artifact is the cheapest way to make judging-against-it possible.
Three findings support this, and the first two are corrections to the question's own premises:
- Pocock's proposal has two clauses and only the second survives. He asks "are you persisting your specifications, right? are you returning to those specifications?" (Full Walkthrough: Workflow for AI Coding — Matt Pocock). Return is the operative clause, persistence is the enabling one, and his own reason for deleting PRDs — doc rot, an agent finding a stale document and being misled by it — is a harm that requires reading back, not merely storing.
- Martin's practice does not assume the persistence line. He does keep a specification file in the repo. What he refuses to keep is a plan.
- The corpus classifies persistent artifacts as specs or non-specs on a different variable, and it already has a name for it — the policy / work-graph / enforcement split in Agent Control Plane Patterns: Tickets, Loops, Specs, and Memory Files and Agent Context Files.
Correction 1: Pocock's line is persist and return#
The exchange is worth reading as posed, because the wiki page compresses it. Pocock's frustration is with the label, not the practice — "you can have like 10 different interpretations of it and every time you pass information to an agent… Is prompt engineering spec-driven development? Like it kind of is" — and he reaches for persistence as a way to stop the term from swallowing everything. But the sentence he actually produces is a conjunction, and the two conjuncts are not the same test.
His own workflow separates them. He generates exactly two documents after a grilling session — a PRD (destination) and a Kanban (journey) — and then, per Design Concept Grilling, neither deletes nor keeps the PRD in the ordinary sense: he closes the GitHub issue. In his words: "I just mark it as closed. It can fetch it if it wants to, but it's got a visual indicator that it's done." The artifact persists; its authority is revoked. That is not a persistence rule, it is a return rule with a persistence-preserving implementation — and it is the practice the doc-rot argument actually licenses, since a stale document harms only when something reads it back as current.
Two further details from the same source make persistence a poor fit for his own view. He declines to optimise the PRD at all ("I don't think there's a lot of value in that… the thing that really matters is getting alignment with the AI, which is you do in the grilling session") — so the durable document is the low-value artifact and the ephemeral conversation is the high-value one. And his push/pull distinction is an authority distinction, not a storage one: CLAUDE.md content is pushed to every agent unconditionally, a skill is pulled when the agent chooses; he recommends pushing coding standards to the reviewer and letting the implementer pull them. Both files are equally persistent. The design decision is entirely about which one binds.
Correction 2: Martin persists a specification file — with a checker attached#
The page reads Martin's "no, I do not… the specifications are ephemeral, they go away" as a flat refusal to persist. In the same interview, forty minutes earlier, he describes the opposite for a different artifact class:
"I've also put together another deterministic tool where I can define which module should depend on which, which one should not depend on which, how the dependency should flow. That goes into a nice tight little specification file that the agents cannot violate. There's another little checker that runs at the end and if they violate it, they've got to fix it somehow." — Uncle Bob on Software Fundamentals in the Age of AI
That file is persisted, repo-resident, read on every run, and binding — the strongest form of spec in his whole practice. So Martin's position is not specs are ephemeral; it is constraints persist and are mechanically enforced, while plans are ephemeral and enforced by nothing. His stated substitute for the persisted spec — the CRAP scorer, the mutation tester, the dependency-rule checker (Reviving Impractical Quality Tools) — is the same point made about the enforcement mechanism rather than the file: he is not deleting the durable statement of intent, he is moving it into things that fail the build.
Read this way his practice does not assume the persistence line at all. It assumes something closer to Deterministic Pre-Execution Gates' rule that the corpus states elsewhere as "the skill makes violations rare and the hook makes them close to impossible" (The Committed-Artifact Chain): advisory prose is the weak artifact, executable constraint is the strong one, and storage is incidental to both.
Test 1: persistent artifacts the corpus does not call specs#
If persistence were the line, all of the following would be spec-driven development. None of them is described that way anywhere in the corpus.
| Persistent artifact | Why it fails the "spec" reading |
|---|---|
CLAUDE.md / AGENTS.md / SOUL.md / .cursorrules (Agent Context Files) | Versioned, inspectable, deterministically injected every session, dual-audience — maximal persistence and maximal return. The corpus files it as the policy plane: it governs how an agent behaves inside a work envelope, not what is being built |
WORKFLOW.md (Symphony, Ticket-Driven Agent Orchestration) | Repo-versioned prompt-as-policy — "work an issue, check out a repo, put it in progress, add the PR". Process, not product |
SPEC.md (Symphony) | Persistent and genuinely a spec — but note it specifies the orchestrator, and OpenAI compiles it into six languages to fuzz its ambiguities. Its spec-hood comes from being the thing implementations are checked against, not from sitting in a repo |
| The ticket graph (Ticket-Driven Agent Orchestration) | The most durable and most authoritative artifact in the whole control-plane stack, and explicitly "objectives, not transitions" — it selects work, it does not specify it |
REVIEW.md, hooks, lint config (The Committed-Artifact Chain, Deterministic Pre-Execution Gates) | Persistent, agent-read, binding, uncontroversially not a spec |
| Martin's dependency-rule file (Uncle Bob on Software Fundamentals in the Age of AI) | Persistent, and its author says in the same conversation that he keeps no specs |
The CLAUDE.md row is the decisive one. It satisfies every clause of the persistence test — persisted, returned to, on every single session, by construction — and if that made a workflow spec-driven, then essentially every Claude Code user is doing spec-driven development and the term distinguishes nothing. That is precisely the failure Pocock was trying to avoid when he reached for the test.
Test 2: non-persistent artifacts that do the whole specification job#
The under-inclusion side is worse, because it misfiles the corpus's most specification-heavy position.
- The grilling transcript. Design Concept Grilling is the left pole of the PRD-replacement spectrum — the position with maximal pre-build specification, 10 to 100 questions, sessions running an hour. Its output artifact is "the conversation history itself", consumed once by a
write-a-PRDskill and then gone. By the persistence test the corpus's most spec-driven position is prompting. - Carey's recorded why-not-what conversation (Prototype Over PRD). A transcript, handed to Claude, discarded; what it produces — "the prototype is the spec" — is the durable artifact but is not a document at all. Carey specifies more precisely than a PRD, on his own argument that "two people [can] look at the same doc and have two different products in mind", with no persisted specification anywhere in the loop.
- Martin's own deleted plans. The plans he writes govern the entire build — the agents follow them past the point a human would have stopped, which is his whole complaint. They do 100% of the specification job for the duration of the work. Only the storage differs from the
plan.mdin The Committed-Artifact Chain, which the corpus certainly calls spec-driven. - A spoken constraint. Karpathy's MenuGen fix — "these must be unique user IDs we tie everything to" (Vibe Coding vs. Agentic Engineering) — is the human residue he names as "spec" outright, and it was said, not filed.
Test 3: the reductio Pocock supplies himself#
His example against the label is "you just fix that loading issue in the header" — a one-line instruction to a colleague. Persistence answers "not a spec," which feels right. But write the identical sentence into a committed TODO.md and the same test answers "spec-driven development," with nothing about the work having changed. A definitional line that a git add can flip is tracking the filesystem, not the methodology.
The line the corpus does draw: authority#
Across every case above, the variable that separates spec from prompt is whether downstream work is evaluated against the artifact:
plan.mdis a spec because "the PR [is] reviewed againstplan.md" (The Committed-Artifact Chain).- Fung's checked-in spec is a spec because "Claude is very good about verifying against spec drift" — Code as Source of Truth states the check, not the storage, as the payoff of committing it.
- Evals are the spec because "the PRD describes intent; the eval defines done", and at Shopify the rubric literally becomes the RL reward (Evals as Product Spec).
- Martin's dependency file is a spec because a checker fails the run on violation.
CLAUDE.mdis not a spec because nothing is checked against it — the corpus has a documented case of a correctly-targetedCLAUDE.mdrule being loaded, current, and simply not followed, with no gate to catch it (Agent Context Files).- The ticket is not a spec because it names an objective and the work is judged against the objective's artifacts, not against the ticket text.
Code as Source of Truth already states the strong form as a rule, taken from the Anthropic playbook's legacy-migration sidebar: name exactly one system as the source of truth per artifact, and let everything else hold a copy or a link. That rule is unintelligible on a persistence reading — Jira, the repo and the markdown working copy are all persistent — and exactly right on an authority reading, since it is precisely a rule about which durable copy binds.
The alternative lines, ranked by how much corpus they explain#
| Candidate line | Verdict |
|---|---|
| Authority — is later work judged against it? | Best. Classifies every case in Tests 1–3 correctly, is already the corpus's own taxonomy, and is what both Pocock and Martin are reaching for underneath the persistence language |
| Return / re-read (Pocock's second clause) | Strong, and the correct reading of his argument, since doc rot is a read-back harm. Fails only on CLAUDE.md, which is returned to maximally and is not a spec — so it needs authority to finish the job |
| Executability / mechanical checkability | A sharp sub-case of authority, and the one Martin actually acts on. Cleanly separates advisory prose from enforced constraint (Deterministic Pre-Execution Gates), but under-includes: intent.md and a destination PRD bind human decisions without any checker |
| Source-of-truth precedence | The formal version of authority, already written down as the per-artifact rule in Code as Source of Truth. Answers "which artifact wins when two disagree" and nothing more — a tiebreak rule, not a definition |
| Human review / a named accepter (The Committed-Artifact Chain) | Weakest of the plausible lines, and the corpus knows why. Pocock deliberately does not review his own PRD; the chain's own compounding-corrector problem means a commit log "records that a human accepted, never that a human read" (Is Human Review of AI-Authored Code Still a Real Control, or Already Rubber-Stamping?). A line no cited practice honours |
| Implementation visibility (DHH, Vibe Coding vs. Agentic Engineering) | A different genus of answer and worth naming: DHH draws the neighbouring vibe-coding line on the human's behaviour (do you look at the implementation?) rather than on any artifact. It is binary and observable, which is what makes it attractive for the same reason persistence is |
Why persistence looks right anyway#
The honest defence, and the reason to keep it as a heuristic rather than discard it: authority is a disposition and persistence is an observable. You cannot see whether an artifact binds later work without watching the next month of work; you can see whether it is in the repo in one second. And persistence is close to necessary for authority — the corpus holds no case of an artifact governing later work without some durable form (Martin's checkers are code; Carey's prototype is committed; the grilling transcript's authority ends exactly when the conversation does). So the defensible statement is:
Persistence is the cheapest enabling condition for authority, and therefore a decent field test. It is not the definition, and it misclassifies the corpus's own poles in both directions.
One structural confirmation: the corpus's spectrum of positions (The PRD-Replacement Spectrum at AI-Native Speed) is ordered by how much specification precedes the build, and carries "durable artifact" as a fifth descriptive column rather than as the ordering key. Every position on it has some durable artifact — PRD-plus-Kanban, a one-pager, the chosen PR, the prototype, and past the right pole, Martin's checkers. If persistence were the axis, the spectrum would collapse to a single point.
Evidence tier#
This cluster is almost entirely practitioner-opinion, and the question is a definitional one that no source in the corpus was written to answer.
- Pocock (workshop,
practitioner-opinion), Martin (interview,practitioner-opinion), Carey (talk), DHH (podcast), Fung (talk) — five first-person reports, no measurement of spec form anywhere among them. - The Committed-Artifact Chain is
vendor-claimwith, by its own page's accounting, no measurement of any kind — every "how to measure it" block names an indicator to collect. - Planning / Execution Division of Labor is the only telemetry in the cluster (400K Claude Code sessions, ~70% of planning decisions human) and it measures the decision split, not the artifact form. It cannot adjudicate this.
- The two nearest measured things in the vault are both about context files, not specs, and about content rather than storage: Khatri's bounded null on correctness, and NVIDIA SkillEvaluator's +41 Correctness on proprietary-knowledge skills (both on Agent Context Files, both with stated methodological limits).
So the verdict above is a conceptual result — it is derived by testing a proposed definition against the corpus's own classifications, and it is as good as those classifications are. It is not an empirical claim about outcomes, and it should not be read as one.
What would overturn this#
- A measurement where storage-per-se moves an outcome. Hold content and read-back behaviour fixed and vary only whether the artifact is committed; if rework, defect rate or drift differ, persistence is an independent variable rather than a proxy and the verdict weakens sharply. Nothing in the corpus runs this; Khatri's ablation harness is the closest existing instrument, and the The Committed-Artifact Chain indicator set (
spec.mdcommits dated after the firstplan.md) is the closest existing metric. - An artifact that binds later work with no durable form at all — later work genuinely checked against something that exists only in a conversation. That would break the "persistence is near-necessary" half and demote it from proxy to coincidence.
- A social mechanism for persistence independent of reading. If committing a spec changes behaviour because it is visible rather than because it is read — team commitment, auditor acceptance, the "auditors and regulators already accept them" pressure named in Code as Source of Truth — then storage does real work that authority does not capture. The corpus has one adjacent hint that committing a file changes the world without anyone reading it, but it is a security surface rather than a methodology argument: a committed
CLAUDE.mdfunctioning as reconnaissance for an attacker (Agent Context Files, UK AISI INC-2026-07-28-01). - Usage settling by fiat. If a major tool ships a "spec-driven development" mode whose literal mechanism is persistence, the term will follow the tool. That would settle the sociological question and leave the conceptual one exactly where this page leaves it.
Connections#
- Spec-Driven Development as the New Waterfall — the page that poses the question; the correction is that Martin's own practice draws the line at enforceability, not storage
- Agent Context Files — the decisive over-inclusion case, and the source of the policy-vs-work-graph taxonomy the verdict rests on
- Code as Source of Truth — states the authority line in its strong form (one source of truth per artifact) and gives the spec-drift check as the reason to commit
- The Committed-Artifact Chain — the "reviewed against
plan.md" formulation that makes authority visible, plus the review-is-not-reading caveat - Prototype Over PRD / Design Concept Grilling — the two under-inclusion cases: an ephemeral conversation doing the full specification job at both ends of the spectrum
- Vibe Coding vs. Agentic Engineering — the neighbouring definitional quarrel, where DHH draws the line on the human's behaviour instead of on an artifact
- Evals as Product Spec — the cleanest instance of authority without prose: the eval defines done, and at Shopify becomes the reward
- Agent Control Plane Patterns: Tickets, Loops, Specs, and Memory Files — the layered taxonomy (tickets / loops / policy / memory) that already sorts these artifacts by authority
- The PRD-Replacement Spectrum at AI-Native Speed — the spectrum whose ordering key is pre-build specification, with durable-artifact as a descriptive column
Sources#
- Uncle Bob on Software Fundamentals in the Age of AI — Robert C. Martin with Matt Pocock, 2026-08-19,
practitioner-opinion. Both the "specifications are ephemeral" exchange and the "nice tight little specification file that the agents cannot violate" passage - Full Walkthrough: Workflow for AI Coding — Matt Pocock — Matt Pocock workshop,
practitioner-opinion. The doc-rot answer ("I just mark it as closed… it's got a visual indicator that it's done"), the "no value in optimising the PRD" answer, and the push/pull distinction - The Committed-Artifact Chain — Anthropic Applied AI, 2026-08-21,
vendor-claim, no measurement - Planning / Execution Division of Labor — the cluster's only telemetry, and not on this question
Cited by 8
- Spec-Driven Development as the New Waterfall×3
Does storage-per-se move any outcome once content and read-back behaviour are held fixed — the same…
- Agent Context Files
Persistence As The Spec Driven Line — uses this page as the decisive counterexample to…
- Code as Source of Truth
Persistence As The Spec Driven Line — reads this page's two rules as the strong form of the…
- The Committed-Artifact Chain
Persistence As The Spec Driven Line — takes this page's "the PR is reviewed against plan.md" as the…
- Design Concept Grilling
Persistence As The Spec Driven Line — this page as the under-inclusion case that breaks…
- AI Coding Practice
Persistence As The Spec Driven Line — No — persistence is an observable proxy for the property that…
- Prototype Over PRD
Persistence As The Spec Driven Line — this method as a counterexample to defining spec-driven…
- Vibe Coding vs. Agentic Engineering
Persistence As The Spec Driven Line — settles that neighbouring quarrel against persistence and…
Related articles
- Spec-Driven Development as the New Waterfall
Robert C. Martin reads the 2026 spec-driven-development movement as the 1970s big-design-up-front temptation returning…
- Agentic Technical Debt
Debt that *compounds* (not just accumulates) because each agentic-coding session re-derives architectural decisions wit…
- Open Questions Backlog
Generated by `_system/lint.py --write-backlog`. Do not hand-edit. Domain and Watching sections carry one row per page —…
- The Committed-Artifact Chain
Anthropic's Applied AI SDLC playbook makes every stage end by committing a machine-readable artifact the next stage rea…
- Building Is Cheap, Arguing Is Expensive
"In technical debate, code wins": generate three PRs vs whiteboard; prototype over design doc; reduce design docs
