Writing PRDs That AI Agents Can Execute
Product-level requirements, not implementation details. 14 common sections, 13 frontend additions, 9 backend additions. UI mocks as first-class artifacts. 18-check automated verification.
~10 minute read
Product-Level, Not Implementation-Level
A PRD describes what the user experiences and what the business needs. It does not describe tables, API signatures, or file paths. Those belong in the phase plan (Part 6). This separation is deliberate: the PRD is the "what" and the phase plan is the "how."
Why this matters for AI agents: if the PRD includes implementation details, the phase plan generator will defer to them even when they are suboptimal. The PRD should describe the desired outcome. The phase plan generator should derive the best implementation from the codebase's current state, patterns, and constraints.
The PRD Template
14 Common Sections (All PRDs)
Every PRD, regardless of category, has these 14 sections:
- Purpose: Why this unit exists. What happens if it does not exist? What user pain does it solve?
- Scope: In scope and out of scope. Every out-of-scope item references which unit handles it.
- Dependencies: Which units must be complete before this one starts.
- Test Pair: Which unit verifies this one (backend units are tested by their frontend counterpart).
- Related Units: Four relationship types: depends on, test pair, composes into, shares pattern with.
- Success Signals: Observable behaviors that indicate this feature is working. Not metrics, behaviors.
- Metrics to Track: Quantifiable measurements with targets and measurement methods.
- Cross-Unit Integration Points: What this unit sends to other units and what it receives. Triggers and data shapes.
- Tier and Metering Constraints: Which features are available at each pricing tier. User experience at each limit.
- Configuration Surface: What is configurable, default values, where configuration lives.
- Assumptions: Things assumed to be true. Documented, not implicit.
- Open Questions: Unresolved items with a resolution path. Allowed in PRDs. Zero allowed in phase plans.
- Cross-Cutting Features: Audit logging, search indexing, notifications: follows defaults or custom behavior?
- Changelog: Date, change, reason. Tracks evolution.
Frontend Additions (F1-F13)
Frontend and full-stack PRDs add 13 sections that define the user experience in exhaustive detail:
| Section | What It Defines | Why It Matters |
|---|---|---|
| F1: User Journeys | 4+ narrative scenarios (morning triage, first use, power user, failure) | Become E2E test cases |
| F2: Page Structure | Layout zones, hierarchy, component composition | Constrains component selection |
| F3: Interactions | Trigger, behavior, feedback, result per interaction | Defines optimistic UI strategy |
| F4: States | 8 sub-variants: empty (first-time), empty (filtered), loading, refresh, loaded, dense, error (full), error (partial) | Prevents missing states in implementation |
| F5: Degradation | 3 levels: individual dependency fail, core service degraded, catastrophic | Defines fallback behavior |
| F6: Responsive | Breakpoint behavior, layout changes, hidden elements | Prevents desktop-only implementations |
| F7: URL Structure | Routes, parameters, deep links | Enables bookmarking and sharing |
| F8: Keyboard | Shortcuts, navigation, focus management | Essential for power-user products |
| F9: Accessibility | ARIA roles, screen reader behavior, contrast requirements | Legal compliance, inclusive design |
| F10: Performance | Load time targets, interaction responsiveness | Become performance test thresholds |
| F11: Brand | Which tokens apply, specific visual requirements | Ensures visual consistency |
| F12: First-Time | Onboarding moments, empty states, progressive disclosure | Defines new-user experience |
| F13: UI Mock | Interactive HTML mock with state switcher | Visual spec for implementation |
Backend Additions (B1-B9)
| Section | What It Defines |
|---|---|
| B1: Capability | Business-level description. No tables or APIs. |
| B2: Business Rules | Absolute constraints. "Issues cannot be deleted, only archived." |
| B3: Data Flows | Step-by-step information flow per scenario, including failure paths. |
| B4: Performance | Targets per operation with expected data volumes. |
| B5: Reliability | Failure points, monitoring, recovery behavior. |
| B6: Security | Auth requirements, data sensitivity, encryption needs. |
| B7: Scalability | Launch, growth, and scale tier expectations. |
| B8: Events | Events this unit emits and consumes. |
| B9: Output Mocks | If the backend produces user-visible outputs (PDFs, emails). |
Purpose
The Issue List View is the primary working surface for engineers. It shows all issues for a team, filterable and sortable, with inline status updates. Without this view, users must navigate to individual issue pages to understand workload, which defeats the "see everything at a glance" positioning.
F1: User Journeys
Morning triage: Engineer opens Linear. Sidebar shows their team. List view loads with issues sorted by priority. They scan the first 10 issues, update two statuses by clicking the status badge (In Progress), and assign themselves to one issue by clicking the assignee avatar. Total time: under 30 seconds for 3 actions.
Power user at scale: Tech lead opens a team with 400+ issues. They apply filters: status = In Progress, assignee = unassigned. List narrows to 23 issues. They select all (Cmd+A), set priority to High, assign to a team member. Bulk action completes in under 1 second.
F4: States
Empty (first-time): Team exists but has no issues. Centered illustration + heading "No issues yet" + body "Create your first issue to get started" + primary button "Create issue" + secondary "Import from Jira."
Empty (filtered to zero): Active filters but no matching results. Show filter summary + "No issues match these filters" + "Clear filters" link. Do NOT show the first-time empty state.
Loaded (dense): 500+ issues visible (virtual scrolling). Column headers sticky. Performance target: 60fps scroll. No layout shift as rows render.
The Brainstorming Process
PRDs are created through structured conversations with AI, not written from scratch. The AI acts as a senior product manager who leads with recommendations, not open-ended questions.
Six Rules for the Brainstorming Session
- Never generate the document until explicitly told. Brainstorm all sections first. Generate last. This prevents premature commitment.
- Never start web research until explicitly told. The founder's domain knowledge comes first. Research fills gaps, it does not drive the conversation.
- One conversation per PRD. Context must stay in one place. No "continue from where we left off."
- No implementation details. If tables or APIs creep in, redirect: "That belongs in the phase plan."
- Every template section must be filled. No skipping. If a section does not apply, explicitly state why.
- One section at a time. The AI presents a recommendation for one section. The founder refines. Move to the next. This prevents overwhelm and ensures depth.
The Session Flow
Start: The AI reads the unit from the Master PRD Index, identifies the category, pulls related unit context, and presents a recommendation for the Purpose section.
Middle: Section by section, the AI leads: "For the User Journeys, I recommend these four scenarios based on the personas in your Company Overview: morning triage, first-time setup, power-user bulk action, and error recovery. Here is my draft for each. What would you change?"
End: After all sections are brainstormed, the AI generates the full PRD as a structured document (markdown or docx). The founder reviews the complete document, makes final edits, and saves it to the docs folder.
UI Mocks as First-Class Artifacts
Every frontend and full-stack PRD includes an interactive UI mock (F13). The mock is an HTML file with inline React or plain HTML/CSS/JS that renders every state defined in F4, with a state switcher panel.
What the Mock Includes
- Every state from F4 (empty, loading, loaded, error, dense) as switchable views.
- Every interaction from F3 rendered as clickable elements (even if they do not have real behavior).
- Responsive breakpoint toggle (desktop, tablet, mobile).
- Brand tokens applied (colors, typography, spacing from tokens.css).
Why Mocks Matter for AI Agents
The mock is a visual contract. The phase plan references specific mock states. The spec references mock states for visual tests. The executing agent can open the mock side-by-side with its implementation and compare. Without a mock, "the list should look right" is subjective. With a mock, "the list should match mock state: loaded-standard at desktop breakpoint" is verifiable.
Automated PRD Verification
After a PRD is written, it passes through an automated verification command that runs 18 checks against all existing PRDs and foundation documents.
The 18 Checks
| # | Check | What It Catches |
|---|---|---|
| 1 | Template conformance | Missing sections, empty sections |
| 2 | Terminology consistency | Same concept using different names across PRDs |
| 3 | Scope overlap | Two PRDs claiming the same feature |
| 4 | Dependency validation | Referenced unit does not exist or is in wrong milestone |
| 5 | Integration symmetry | A sends to B, but B does not list receiving from A |
| 6 | Related unit symmetry | A lists B as related, but B does not list A |
| 7 | Interaction patterns | Similar interactions handled differently across PRDs |
| 8 | Performance consistency | Conflicting performance targets for shared resources |
| 9 | Brand compliance | UI elements not referencing brand tokens |
| 10 | User journey completeness | Persona workflows not covered by any journey |
| 11 | States coverage | Missing states (no loading state, no error state) |
| 12 | Assumption validation | Assumption contradicts a fact established in another PRD |
| 13 | Configuration consistency | Same setting defined with different defaults in two PRDs |
| 14 | Tier limits | Feature available in tier that should not have it |
| 15 | Data flow completeness | Flow described without a failure path |
| 16 | Open question review | Open questions that should have been resolved by now |
| 17 | Cross-cutting features | Notification or audit behavior not specified |
| 18 | Mock verification | Mock does not cover all states defined in F4 |
Each finding is categorized as Critical (blocks phase plan generation), Recommended (should fix), or Informational (awareness). Every finding includes: what is wrong, where the conflict is, and a specific recommendation for how to fix it.
Check 5 (Integration Symmetry) - Recommended: M1-U03 (Issue List View) lists "receives issue.created events from M1-U02 (Issue CRUD API)" but M1-U02 does not list "sends issue.created events to M1-U03." Update M1-U02's Cross-Unit Integration Points section to include: "Sends: issue.created, issue.updated, issue.deleted events consumed by M1-U03 (Issue List View) for real-time list updates."
What You Leave With
For each unit: one PRD (5-15 pages) and one UI mock (HTML file). Both saved to the unit's folder in the docs directory. Both verified by the 18-check automated verification command.
The PRD is now ready for Part 6: Orchestration, where it gets translated into implementation-level phase plans and execution specs.