Vlad BabiiFeature Smith|click ↑ to go back
Method walkthrough · fictional demo

AI-assisted PRDs with simulations you can play

In this method a product feature is first written as a short spec, then built as an interactive simulation (SIM): a single-file app where you can see the screens, play each use case, and watch the state, API calls and events behind them. Before anyone writes production code, the SIM goes through a feasibility gate. Every decision is logged with its reason, and rejected ideas are kept together with the conditions under which they could come back. After release, an AI drives the shipped app and the docs are corrected to match reality. An AI assistant helps at every step. People make the decisions.

Executable specsEarly feasibility gatesPreserved reasoning & historyAI assistance throughout

The demo app, ShelfShare (a neighbourhood book-swap app), its company and everything in it are invented. The method comes from real product work; none of that work's content appears here.

Statement labels used below:FACTsource factAIAI analysisDECISIONhuman decisionHYPOTHESISRECrecommendationHISTORYhistorical rationale

The loop

A product loop, plus two loops that keep the knowledge alive. The walkthrough below applies all 14 steps, in order, to one feature.

1Idea and stakeholders

What happens: one sentence of idea, then the problem in numbers, the outcome we want, and what each stakeholder wants or worries about. The result is a short list of initial use cases.

Why: the PRD starts from the problem, not a screen. Tensions between stakeholders are written down early, because they decide the design later.

Where AI helped. Summarised the survey and the support tickets. Flagged the tension between "show who's close right now" and "don't show where I live" as open question Q1, which ends up driving the restructure.
demo/01-idea-and-stakeholders.mdfull file

FACT61% of agreed swaps never happened: "couldn't agree where/when" 38%, "no-show" 27%.

HYPOTHESISIf the app arranges where and when, and confirms the handoff, completion rises.

StakeholderWantsWorries
Community leadFast, friendly swapsBureaucracy
Trust & safetyPublic places, reportingLocation leaks
Platform engReuse existing servicesNew real-time infra

AITension logged as Q1: live proximity vs location privacy.

2PRD v1 outline

What happens: a one-page outline. It lists the use cases (each with a SIM scenario ID and a status), the technical interactions as currently imagined, the assumptions and the open questions.

Why: the first PRD is a hypothesis. It only has to be concrete enough to build a SIM from. Each assumption is written down so the next stage can test it.

Where AI helped. Drafted the use-case table from the stakeholder notes, linked each use case to a scenario ID, and marked each API as existing, new or "needs engineering definition".
demo/02-prd-v1.mdfull file
IDUse caseSIMStatus
UC-1Browse nearby, sorted by metres, "nearby now" dotbrowseProposed
UC-4Meet now: both members see a live mapmeetnowProposed
UC-5Handoff code, books change shelveshandoffProposed

Assumption A1: members accept sharing live location during a swap.
API: location.stream.publish/subscribe: NEEDS ENG DEFINITION

3SIM v1: the executable spec

What happens: the outline becomes a single-file interactive app. It shows both members' phones, a use-case driver, a state matrix (empty, loading, error, timeout), a live server-state panel, an API & event log, and per-element rationale (Inspect mode).

Why: playing a use case shows what a document hides. In this case the server-state panel shows two members' coordinates being exchanged every 5 seconds, which nobody had noticed in the text.

Where AI helped. Built the SIM from the use-case table and scripted every scenario. A headless browser run checks each use case for console errors before anyone reviews it.
demo/sim-v1.html · scenario meetnowfull file

API log while two members walk towards each other:

16:40 → maya location.stream.publish  NEEDS ENG DEFINITION
       {"lat":51.512,"lon":-0.1118}
16:40 → tom  location.stream.publish  NEEDS ENG DEFINITION
16:40 ⚡ location.updated {"swapId":"sw1","members":2}

Server state: member_positions (shared between members) → both rows filled.

Play it below ↓

4Feasibility and internal impact GATE

What happens: the SIM, including its API log, is checked against the existing architecture, policies, other in-flight PRDs and other products. Each finding is labelled as fact, AI analysis or hypothesis.

Why: this is the cheapest moment to find out the core idea can't ship. Here four findings combine into one serious issue.

Where AI helped. Compared each API in the SIM log with the platform docs, found the conflicting in-flight PRD ("Quiet profile"), and pointed out that repeated live positions reveal a home address. It also proposed the reuse that became v2: the public venues the platform already has.
demo/03-analysis-v1.mdfull file
#Finding
F2No real-time channel; 9–12 weeks to buildFACT
F3Policy P-7: coordinates never sent to another memberFACT
I1"Nearby now" dot conflicts with the in-flight Quiet profile PRDAI
I4Home location inferable after ~3 swapsAI
⚠ Serious issue SI-1: "Meet now" can't ship as designed.
RECUse public Swap Spots and a boolean check-in, so no coordinates leave the phone.

5Competitive analysis

What happens: 2–3 comparable products are studied for how they solve the same problem: what works, what users complain about, and what not to copy.

Why: it comes after the gate, so it shapes the restructured version rather than polishing a version that can't ship. The lessons become element rationale inside the SIM.

Where AI helped. Sampled 300 app-store reviews per product and grouped the complaints. Each lesson was mapped to a use case and to the SIM element that carries it.
demo/04-competitive.mdfull file
LearnedFromBecame
Credits break the "nothing I want" deadlockPageTradeUC-2b credits
Fixed public places feel safeBookBenchSwap Spots
"Box was empty when I got there"BookBenchHold after accept

Not copied: live location (SwapCircle: safety reviews), public star ratings (risk of retaliation), postage.

All three competitors are fictional.

6Restructure: decision log, PRD v2, SIM v2

What happens: the decision is logged with who, when, why, the rejected alternatives and the conditions for revisiting it. Then PRD v2 and SIM v2 are written. v1 is not edited; it stays readable as a superseded version.

Why: a year from now someone will say "why don't we just show who's nearby?" The answer, and the conditions under which it could become yes, are already written down.

Where AI helped. Drafted the decision log entry from the analysis, generated the "Changes vs v1" list inside SIM v2 (each change has a reason, a source and a Try it button), and checked that every v1 use case is either carried over or explicitly replaced.
demo/06-decision-log.md · DL-1full file

DECISIONDL-1, week 4: replace live location with Swap Spots, 1-hour windows and boolean check-in. Keep the handoff code.

Rejected: blurred live location (still triangulates); live location only near venues (same infrastructure cost); chat only (doesn't fix the failure rate).

HISTORYRevisit v1 when all are true: (1) a real-time channel exists for other reasons, (2) legal approves a consented P-7 exception, (3) proximity can be computed without exchanging coordinates, (4) Swap Spots miss the 70% target.

7Review, design and engineering handoff

What happens: reviewers play SIM v2 and comment against a named scenario. An AI reviewer goes first. Each piece of feedback becomes a tracked change, a new use case or an explicit "build last".

Why: comments tied to a scenario are concrete and quick to check. Engineering receives behaviour, not drawings: the API log and server state show exactly what the system has to do.

Where AI helped. Found the missing code expiry (R1) and the unspecified credit release on decline (R5), pre-filled the review table, and kept the PRD, the SIM and the API list in sync after each change.
demo/07-review-and-handoff.mdfull file
#FromChange
R1AICode expires after 10 min
R2Trust & safetyNew UC-9: private Report a problem
R3PlatformReuse the existing one-time code service
R4DesignCode shown as 482 · 913 to read aloud
R7PlatformCounter-offer marked "build last"

Handoff: PRD 2.0.1 + SIM v2 + decision log. Two APIs left for engineering to define: slot capacity and check-in radius.

8AI-driven release validation

What happens: after release, an AI agent drives the real app on a test device with two test accounts. It runs every use case and compares screens and network calls with the PRD, the SIM, the engineering docs and the ticket history.

Why: what ships always differs a little from what was specified. The aim isn't to blame anyone; it's to find out what actually exists.

Where AI helped. Ran the use cases end to end, captured screens and calls, and traced each difference back to its ticket. Proposed a classification for each difference and flagged a possible privacy leak in the new feature.
demo/08-release-validation.mdfull file
FindingClass
V1 · 30-min slots instead of 1-hour windows🔁 intentional change
V2 · No counter-offer (swaps.counter → 404)⛔ omitted
V3 · "Want list" ♡ on book cards: in no document➕ undocumented addition

AIHYPOTHESISV3 pushes at listing time may reveal when a neighbour is active, the same concern as I1.

9Reconciliation and the knowledge loop

What happens: each difference is reconciled. Nothing is silently deleted, so the docs end up describing reality and how it got that way.

Why: the next person to read the PRD sees what is really live, what is still wanted, and which ideas are waiting for their conditions to change.

Where AI helped. Rewrote the affected use cases, added a Reconciled note on the SIM element concerned, wrote the new use case for the undocumented feature, and filed the omitted one in the backlog with its original intent.
demo/05-prd-v2.md · versionsfull file
  • Intentional change (V1) → PRD 2.1 updated, DECISION DL-4; SIM window picker shows "↺ Reconciled: 30-min slots"; the 1-hour design is kept as history.
  • Omitted (V2) → UC-3c moves to backlog BL-1 with its original intent; the SIM scenario stays, with a not in 3.4 badge.
  • Undocumented addition (V3) → documented as UC-10, status shipped, under privacy review; its rationale is marked added during development.
VerChange
1.0Live "Meet now" (superseded, kept)
2.0Swap Spots, credits, holds
2.0.1Review changes
2.1Reconciled with release

Play the demo

Both SIMs are fully interactive and run offline. Pick a use case on the left; it plays on both phones while the server state and the API & event log update on the right. Turn on 🔍 Inspect elements and tap anything on a phone to see why it exists. In v2, Changes vs v1 lists every difference with its reason.

v2.1: Swap Spots, check-in, credits; reconciled with release 3.4.

History: why nothing is thrown away

v1 was not wrong to build. It was the fastest way to find out the core idea couldn't ship. Keeping it, together with the reason it was replaced, turns a dead end into knowledge someone can reuse.

v1 · "Meet now" superseded, week 4

Meeting
Live map; both members stream their position every 5 s
Distance
Metres, plus a "nearby now" presence dot
Exchange
Book for book only
Confirmation
6-digit code, no expiry
Infrastructure
Needs a new real-time channel (9–12 weeks)

v2 · "Swap Spots" shipped as 2.1

Meeting
Public venue + time slot; check-in sends arrived:true only
Distance
Areas ("in your area"); no presence shown
Exchange
Book or credit; both items held after accept
Confirmation
Code read aloud as 482 · 913, 10-min expiry
Infrastructure
Existing services + one small new one (3 weeks)
DECISIONDL-1: v1 depended on location sharing that policy forbids, a channel that doesn't exist, presence that conflicts with another in-flight PRD, and a pattern that reveals home addresses.
HISTORYv1 could come back if a real-time channel is built for another reason, legal approves a consented exception, proximity can be computed without exchanging coordinates, and Swap Spots miss their 70% target.
Also kept: 1-hour windows (replaced at release by 30-min slots, DL-4)
Also kept: Counter-offer, backlog BL-1, original intent preserved
Also kept: rejected alternatives in DL-1 (blurred location, venue-only live map, chat only)
Also kept: both SIMs, playable above. sim-v1.html is frozen; the build script refuses to overwrite it

Principles

  1. Preserve source and reasoning. Don't store only conclusions. Keep the source, the analysis, the reasoning, the decision, the version, the date and the links. (Every finding above names where it came from.)
  2. Preserve rejected ideas. A rejected idea is historical knowledge: keep the proposal, the analysis, why it was rejected, its assumptions and constraints, its version, and the future conditions under which it could work. (DL-1, BL-1.)
  3. Separate observation from interpretation. Label each statement as source fact, AI analysis, human decision, hypothesis, recommendation or historical rationale. (The labels used throughout this page.)
  4. Make the spec executable. A SIM shows behaviour, state and API calls, and it exposes gaps a document hides. It isn't the production design.
  5. Gate feasibility early. Check the SIM against the architecture, policies and other PRDs before detailed design.
  6. AI assists, people decide. AI researches, builds, compares and validates. People make product decisions, and engineering owns the implementation.

The demo artifacts