Spec-Driven: Building Software with Coding Agents in Production
Using AI coding tools with twenty years of engineering judgement.
Most AI-coding content is written by people who have never had to live with software for a decade. This series is the other perspective: what changes — and what absolutely does not — when an engineer with twenty years across payment systems, prison software, and retail infrastructure hands the typing over to a machine.
Specs before prompts. Review gates before merges. Evidence before claims. The tools are new; the judgement is not.
Spec-Driven, Part 1: How I Actually Use Claude
After a year of daily use, my biggest mistake was treating Claude like a search engine. What changed once I gave it context like a new colleague, and where Projects, MCP and Claude Code fit into a real working routine.
Spec-Driven, Part 2: Claude Code vs. the Rest
Which AI coding tool do I trust on a regulated .NET codebase? Claude Code and Copilot both hallucinated an EF migration, but only one corrected itself when challenged. Where each wins, from inline autocomplete to terminal-first refactors and CI.
Spec-Driven, Part 3: The PRD Is the Program — Running Agents in a Loop with Ralph TUI
What happens when your PRD stops being a briefing document and becomes an executable artefact — running Claude Code through a task list autonomously with Ralph TUI, and why Karpathy's autoresearch repo suggests this is where the whole industry is heading.
Spec-Driven, Part 4: Interview First, Code Second
My coding assistant rarely wrote bad code. It wrote good code for a problem I never had. The fix wasn't a better prompt, it was making the assistant interview me about every acceptance criterion before it touched a file.
Spec-Driven, Part 5: Your AI Context Is a Budget
My sessions felt heavy before I'd typed a word, so I measured what every one of them loaded. I moved 742 lines of always-on guidance into rules that only load for the files they govern, and switched off a plugin that was quietly fighting my process.
Spec-Driven, Part 6: If It Happens Twice, It's a Script
A pull request turned up carrying a commit from a different ticket, and the fix wasn't another line in the assistant's instructions. Judgement stays with the model and the reviewer. Mechanical mistakes get a small deterministic script.
Spec-Driven, Part 7: Green Isn't Right
I ran a real feature through an AI agent loop: 27 stories, a green test suite at every boundary, and some of the later stories were quietly fixing maths an earlier story had got wrong. What the gates caught, what they didn't, and what I'd put in every story now.
Spec-Driven, Part 8: Your Docs Lie Too, Including the Ones Your Assistant Wrote
I audited our engineering docs against the code and made 13 corrections. Some of the wrong facts were ones an assistant had helped write, and every one of them was a fact an assistant would read next session and treat as true.
Spec-Driven, Part 9: The Loudest Log Line Wasn't the Bug
My AI-assisted log analysis built a confident case around the noisiest pattern in the logs, and a reviewer rejected it in capitals. The name on the write-up was mine, the mistake was mine, and the fix went into the tool's first instruction.
Spec-Driven, Part 10: Review the Batch, Not the Diff
A loop compresses the writing and leaves the reviewing exactly where it was. I review a batch of agent-written stories without rubber-stamping it: by story, against the spec, with the diff last.
Spec-Driven, Part 11: The As-Built Spec
When a loop outruns its plan, write the spec back from what was built, before anyone forgets why. Nine stories of a 27-story feature shipped with no written spec as the scope grew. I rebuilt the record from commit messages. The post covers what that record is good for, and what it can't recover.
This series is becoming a course
Spec-Driven is being turned into a full course. Email me to join the waitlist and hear when it launches.
Join the waitlist