I ran 3 months of spec-driven development without ever reading the code A developer known as a scrum master ran a three-month solo project using spec-driven development without ever reading the code, relying on LLMs to write specs and tests. The system, published as 'backlog-as-data', treats the backlog as YAML frontmatter in spec files, with lifecycle automation and fresh-context reviewers to avoid confirmation bias. I'm a scrum master. I was a developer ten years ago. I have enough background to discuss design and trade-offs with an LLM — but three months ago I made a deliberate bet on my solo project: I would never read the code. The specs define the tests. The tests control the code. The code is a black box. I'm not claiming this is what everyone should do. But it's my bet, and it forced a system into existence: when nobody reads the code, the process has to carry the trust that a code-reading human normally provides. I've just published that system as a reference implementation: backlog-as-data — the full Here's the short version. Most agent task-management tools store tasks in a dedicated place — a tasks.json , a database, a backlog/ folder. My bet is different: the backlog is the YAML frontmatter of my spec files. One file per ticket, python --- id: PARSE-07 title: Tolerate CRLF in decklist import type: ticket status: todo priority: should exec: model: sonnet effort: think review: light matured: 2026-07-22 --- PARSE-07 — Tolerate CRLF in decklist import The spec body: design, contracts, test cases. The ticket file IS the spec. Everything below the frontmatter is the spec — written by the LLM, after it has challenged the need I expressed in conversation. The frontmatter is data — owned by a small CLI, mutated only through it. Same file, so they can never drift apart. Why it matters: "move it to Done" is not an operation. LLMs and humans mangle documents when a state change means relocating text. Making status a field makes every transition a one-line, idempotent, testable mutation. The board I look at a small web page on my server, with GitHub deep links to each spec and the readable markdown view are generated projections , locked by a do-not-edit sentinel and covered by a coherence test. Committing to a ticket and deciding how hard to think about it are separate acts. Before any agent runs, a ticket gets matured with a triplet: model — which model implements it haiku → fable effort — reasoning depth injected into the prompt review — the review gate dosage: none , light 1 reviewer , deep 3 A trivial rename gets haiku / none / none . An irreversible data migration gets the most capable model, maximum reasoning, three reviewers. The decision is versioned with the ticket and auditable months later matured: