← Build log

PRD-Driven Development for Solo Builders: Enterprise Discipline Without Enterprise Overhead

May 2026
SoloBuilderPRDDocumentationMethodologySoftwareEngineering

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

  1. Define the frontmatter schema — 9 fields, copy from below (10 min)
  2. Define the accuracy audit block — pasted at the bottom of every PRD (5 min)
  3. Set up docs/ with the right folders — PRDs, ROADMAP, ERRORS, CLAUDE.md (15 min)
  4. Write your first PRD on the next feature — don’t retroactively PRD what’s already shipped (30–60 min)
  5. 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:

FieldPurposeRequired?
idUnique identifier for cross-linking. Slug-format.Yes
titleHuman-readable name (shown in TOC).Yes
domainOne of your taxonomy buckets (audio, transcription, ui, distribution, etc.).Yes
typeAlways prd for PRDs. Use procedure, reference, decision-log for others.Yes
applies_toList of code surfaces this PRD governs.Yes
prerequisitesPRDs that must be true before this one applies.Yes (can be empty)
relatedOther PRDs to read alongside.Yes (can be empty)
statusplanned / current / deprecated / in-progressYes
confidencehigh / medium / low — how sure are you the PRD is correct?Yes
implementedtrue / partial / false — does the code actually do this yet?Yes (for PRDs)
last_verifiedISO 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.md at 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):

  1. Open every PRD whose last_verified is older than 30 days
  2. For each: skim the PRD, cross-check 2–3 claims against the actual code
  3. Update the audit block:
    • Move resolved “potentially outdated” items to “verified accurate” or “deprecated”
    • Add any new drift you noticed
    • Update last_verified to today
    • Update implemented if status changed
  4. 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.