Prompt-Driven Development
Prompt-Driven Development (PDD) is a way of building software where a natural-language prompt is the main unit of work: you describe the change you want, an AI assistant writes the code, and you review, run and correct it in a loop.
The loop
- Prompt - describe the intent and constraints: "Add a debounced search input to
UserList, reuseuseDebounce, no new dependencies". - Generate - the assistant edits the code.
- Verify - read the diff, run tests and the app.
- Refine - follow-up prompt with what is wrong, or fix by hand.
What makes a good prompt
Context: React 19 + TypeScript, TanStack Query, Tailwind
Task: add pagination to the orders table
Constraints: keep the existing API hook, page size 20, URL-synced (?page=)
Done when: tests in orders-table.test.tsx pass, no new lint errorsContext, a precise task, constraints and a definition of done - the same things a good ticket for a human needs.
Strengths and weaknesses
| Good at | Weak at |
|---|---|
| Small, well-scoped changes | Large features spanning many files |
| Prototypes, boilerplate, tests | Keeping decisions consistent over weeks |
| Exploring an unfamiliar API | Knowing why the code is the way it is |
The main problem: the intent lives in a chat history that disappears. The next session (or teammate) starts from zero, and nothing records what was decided. Vibe coding is the extreme form - accepting output without reading it.
Second meaning of the term
PDD is also used for building LLM features where the prompt itself is production code: prompts live in the repo, are versioned, reviewed and covered by evals like any other code.
PDD is great for speed on small tasks. When a feature is big enough that you would write a design doc for a human, it is big enough for Specification-Driven Development.
updated