PRD-Driven Development for Solo Builders: Enterprise Discipline Without Enterprise Overhead
The exact frontmatter schema, the audit-block pattern that keeps docs honest, and the 30-minute weekly ritual that stops docs from rotting.
Published: May 2026 Tags: #SoloBuilder #PRD #Documentation #Methodology #SoftwareEngineering
The “So What?” - Why You Should Care
Bottom Line Value: A lightweight PRD-driven development system stripped down to what a solo builder can actually maintain. Borrowed from an enterprise process, gutted of bureaucracy, and proven on a rewrite that shipped on time.
What You’ll Gain:
- A copy-pasteable PRD frontmatter schema
- An “accuracy audit block” pattern that catches doc drift before it bites
- A folder layout for
docs/that scales from 5 to 50 docs without restructuring - A 30-minute weekly ritual that keeps docs current
- The specific rule that decides “does this deserve a PRD or just a code comment”
- ROI: 2 hours upfront, ~30 min/week ongoing. Saves you from the “wait, why did I build it this way?” archaeology that costs solo builders a full day every 3 months.
Who This Helps: Solo builders who’ve heard “you should write PRDs” and immediately thought “no, that’s enterprise nonsense” — but also keep getting bitten by undocumented decisions from 4 months ago.
Why Bother: As a solo builder, you ARE the institutional memory. When you forget why you made a decision, that knowledge is gone. PRDs aren’t bureaucracy when you’re the only one reading them — they’re a love letter to your future self at 3am with a production bug.
TLDR: The Whole System in 5 Steps
- Define the frontmatter schema — 9 fields, copy from below (10 min)
- Define the accuracy audit block — pasted at the bottom of every PRD (5 min)
- Set up
docs/with the right folders — PRDs, ROADMAP, ERRORS, CLAUDE.md (15 min) - Write your first PRD on the next feature — don’t retroactively PRD what’s already shipped (30–60 min)
- Sunday ritual — 30 min weekly: walk every PRD, update audit blocks, mark drift (30 min/week)
Result: Self-documenting decisions, doc drift caught within 7 days instead of 6 months, future-you can read the codebase from the README outward.
The Moment You’re Probably In
You open a file you wrote 4 months ago. You see a // TODO: figure out why this works comment in your own handwriting. You stare at it for 10 minutes. You eventually realize you made a deliberate trade-off — but you can’t remember what the trade-off was against, or why you chose this way.
Or:
- You ship a feature and 2 weeks later a beta tester reports it doesn’t work. You can’t tell if it’s a bug or “working as intended” because you didn’t write down what “as intended” meant.
- You start designing feature B and realize feature A made an assumption you’ve forgotten. You re-derive the assumption from the code, but you’re not sure you got it right.
- An AI assistant asks “what’s the expected behavior here?” and you genuinely don’t know.
The pattern: decisions you made are decaying because you’re the only one storing them, and your memory has a half-life shorter than your codebase.
PRDs are the fix. Lightweight ones, written for you, not for an enterprise approval committee.
Step 1: The Frontmatter Schema (10 minutes)
Every PRD starts with YAML frontmatter. These 9 fields:
---
id: voicecatcher-prd-transcription-engine
title: "Transcription Engine"
domain: transcription
type: prd
applies_to:
- rust-backend
prerequisites:
- voicecatcher-prd-core-audio-pipeline
related:
- voicecatcher-prd-streaming-segments
status: current
confidence: high
implemented: true
last_verified: 2026-03-15
---
What each field is for:
| Field | Purpose | Required? |
|---|---|---|
id | Unique identifier for cross-linking. Slug-format. | Yes |
title | Human-readable name (shown in TOC). | Yes |
domain | One of your taxonomy buckets (audio, transcription, ui, distribution, etc.). | Yes |
type | Always prd for PRDs. Use procedure, reference, decision-log for others. | Yes |
applies_to | List of code surfaces this PRD governs. | Yes |
prerequisites | PRDs that must be true before this one applies. | Yes (can be empty) |
related | Other PRDs to read alongside. | Yes (can be empty) |
status | planned / current / deprecated / in-progress | Yes |
confidence | high / medium / low — how sure are you the PRD is correct? | Yes |
implemented | true / partial / false — does the code actually do this yet? | Yes (for PRDs) |
last_verified | ISO date you last cross-checked PRD against code. | Yes |
The two fields that do the most work: implemented and last_verified. These are the ones that catch drift. If your PRD says implemented: true and your last verified date is 6 months old, the audit ritual (step 5) will surface that.
Step 2: The Accuracy Audit Block (5 minutes)
This goes at the bottom of every PRD. It’s the section that makes PRDs honest:
<!-- ACCURACY AUDIT YYYY-MM-DD
Status: planned | current | deprecated | in-progress
Confidence: high | medium | low
Verified accurate:
- [specific claim in the PRD that you just verified against the code]
- [another specific claim]
Potentially outdated:
- [claim you suspect has drifted but haven't confirmed]
Unable to verify:
- [claim you can't verify without running benchmarks / building / etc.]
Recommended actions:
- [specific next step, like "RUN benchmark to verify <3s/min target"]
- [another action]
-->
The four sections do specific work:
- Verified accurate: forces you to actually re-read the claim. No skimming.
- Potentially outdated: catches drift early. The PRD is still useful but the reader knows what to double-check.
- Unable to verify: tells future-you “this needs an experiment or measurement.”
- Recommended actions: turns the audit into actual work items.
The discipline: update this block every time you touch the PRD. Don’t trust the date alone. Stale audit blocks lie.
Step 3: The Folder Layout (15 minutes)
docs/
├── PRD-Core-Audio-Pipeline.md
├── PRD-Transcription-Engine.md
├── PRD-Post-Processing.md
├── PRD-Privacy-Model.md
├── PRD-Distribution.md
├── PRD-Cross-Platform.md
├── ROADMAP.md
├── ERRORS.md
├── _doc-audit-template.md
└── v2/
├── PRD-VoiceCatcher-v2-Rewrite.md
└── Execution-Plan-v2-Rewrite.md
CLAUDE.md
The roles:
- PRD-*.md files at top level: one per domain. Flat structure. Don’t nest by topic — PRDs should be discoverable in 2 seconds via filename.
ROADMAP.md: the force-ranked work queue. Top = ships next.ERRORS.md: catalog of every operationally significant error pattern. Symptom, cause, fix._doc-audit-template.md: the frontmatter + audit-block template you copy when starting a new PRD.v2/subfolder: when you’re doing a major version, scope its PRDs and execution plan in a subfolder so they don’t pollute the canonical docs/.CLAUDE.mdat repo root: instructions for AI assistants working in the codebase. Stack conventions, no-go zones, where to find PRDs.
That’s the whole layout. No docs/PRDs/ nesting. No deep hierarchy. PRDs are flat and discoverable.
Step 4: When to Write a PRD (the decision rule)
You do NOT need a PRD for every feature. The rule:
Write a PRD when the answer to “what does correct behavior look like?” requires more than 3 sentences.
Specifically:
- ✅ Audio pipeline (capture format, silence detection, checkpointing, recovery) — PRD
- ✅ Transcription engine (which model, when it loads, what events fire) — PRD
- ✅ Cross-platform support (which platforms, which features per platform) — PRD
- ❌ “Add a button that opens settings” — code comment, not PRD
- ❌ “Fix bug where X was happening” — commit message, not PRD
- ❌ “Adopt this library” — ADR (architecture decision record), not PRD
If a decision affects how multiple features interact, or specifies user-visible behavior, or has invariants you’ll need to remember later — PRD it.
The cost of writing a PRD: 30–60 minutes upfront. The cost of NOT writing one when you should have: 2–8 hours of archaeology in 4 months when you can’t remember.
Step 5: The Sunday 30-Minute Audit Ritual
This is the ritual that makes the system work. Without it, PRDs rot.
Every Sunday, 30 minutes (pick another day if Sunday doesn’t work — just pick one):
- Open every PRD whose
last_verifiedis older than 30 days - For each: skim the PRD, cross-check 2–3 claims against the actual code
- Update the audit block:
- Move resolved “potentially outdated” items to “verified accurate” or “deprecated”
- Add any new drift you noticed
- Update
last_verifiedto today - Update
implementedif status changed
- If anything is fundamentally broken (PRD says X, code does Y, and you don’t know which is right), open an issue/TODO to resolve it
That’s it. 30 minutes. Set a recurring calendar invite.
Why it works: docs drift slowly. A weekly check catches 1 week of drift. A 6-month check catches 6 months of drift, and at that point the drift is too tangled to untangle without rewriting half the PRD.
What This Doesn’t Fix
- PRDs don’t make bad design good. They make decisions visible — including your bad ones. That’s still a feature.
- The first 3 PRDs you write will feel like overkill. They are. By PRD #10, you’ll have your voice and shortcuts.
- PRDs can get out of date faster than you can audit them if you ship 3 features a week. Counter: write the PRD before you ship, not after. It becomes a forcing function for clarity.
- Solo builders sometimes skip the audit and pretend they didn’t. Schedule it on your calendar. Treat it like a meeting with your future self.
- Some decisions don’t deserve PRDs. Don’t over-document. The decision rule above is the gate.
Try It This Week
Sunday afternoon (90 minutes):
- Copy the frontmatter schema and audit block into a
_doc-audit-template.md(10 min) - Set up the
docs/folder layout (15 min) - Pick the next feature you’re going to build. Write a PRD for it using the template. (60 min)
- Schedule a recurring 30-minute Sunday audit on your calendar (5 min)
This week’s first PRD:
- 200–500 words is plenty for v1
- Include: problem statement, functional requirements (numbered: AUD-001, TRN-001, etc.), non-functional requirements (performance targets, security), risk register
- Add the audit block at the bottom with today’s date
Next Sunday:
- Audit your one PRD (will take 5 minutes)
- Notice how much clearer your thinking is when you have to write down what “correct” means
One month in:
- You’ll have 3–5 PRDs and the system will feel natural
- The audit ritual will take 20 min, not 30
That’s the whole onramp. Total cost: ~2 hours week one, 30 min/week ongoing.
The Takeaway
PRDs in their enterprise form are bureaucracy theater. Stripped down — 9 frontmatter fields, an audit block, a flat folder, a Sunday ritual — they’re the single most leveraged knowledge tool a solo builder has.
The reason: as a solo builder, you ARE the institutional memory. Without PRDs, your memory IS the documentation. Memory rots. Code outlives memory. The gap kills you in month 4.
The fix is concrete:
- A 9-field schema you copy
- An audit block that catches drift in 7 days, not 7 months
- A flat folder that’s discoverable in 2 seconds
- A decision rule that prevents over-documentation
- A 30-minute weekly ritual that keeps the system honest
None of this is hard. The discipline is the value.
If you’ve ever opened your own code from 4 months ago and not remembered why you wrote it that way, the next PRD you write is for that future self. Treat it like a love letter. They’ll need it.
Coming up next: post #137 — From Swift CLI to cpal. Once you have PRDs and a rewrite decision in place, the first hard problem is usually the platform-specific subprocess you’re carrying. Here’s how we replaced a 1,628-line Swift CLI with in-process Rust.