Vibe Coding for Production
Getting work donePlanningProduct Requirements

Using Plan mode with PRDs

Draft a long PRD as markdown while staying read-only in Plan mode, then leave Plan mode and execute with a checkbox plan tied to the PRD.

Plan mode is a strong fit for PRDs because you can push for depth, user stories, metrics, rollout, and risks while source edits stay blocked. Plan mode can still run read-only or classifier-approved exploration commands; add an explicit “do not run commands” constraint when you want a purely conversational product exercise. After review, save the draft as a markdown artifact (often under docs/) that becomes the contract for implementation.

See Plan before you build for how to enter and exit Plan mode.

Workflow overview

Enter Plan mode (claude --permission-mode plan, Shift+Tab, or your usual shortcut).

Describe the product problem in plain language: who, pain, constraints, deadline flavor.

Ask the agent to produce a complete PRD as markdown, suitable to save as docs/<feature>-prd.md, with explicit sections (see PRD for what belongs).

Iterate in Plan mode only: tighten non-goals, add acceptance tests in words, resolve open questions until the doc feels reviewable.

Save the file: paste from chat, or switch to default / acceptEdits mode and ask for a single Write/Edit that creates docs/<feature>-prd.md from the final draft (no implementation yet).

Execution phase: create docs/<feature>-plan.md (or similar) with - [ ] tasks that trace to PRD sections; implement one checkbox at a time with @docs/<feature>-prd.md in context. See Plans in markdown.

If the agent over-builds during execution, point it at Non-goals and Out of scope in the PRD instead of retyping the whole story in chat.

Prompts that work well in Plan mode

Initial draft (no file writes):

Plan mode only, do not edit files or run commands.

We are building <one-sentence product idea>. Target users: <role>. Constraints: <stack, compliance, timeline if any>.

Write a full PRD in markdown, ready to save as docs/acme-feature-prd.md. Include: summary, problem, goals, non-goals, user personas, user stories (As a / I want / So that), functional requirements (numbered), non-functional requirements, success metrics, rollout phases, risks, open questions. Use ## headings. Be specific enough that engineering could estimate without inventing scope.

Second pass (still Plan mode):

Same PRD. Strengthen non-goals (what sales will ask for that we refuse in v1). Add measurable acceptance criteria for the top three user stories. Flag any goal that conflicts with a non-goal.

Long realistic PRD example

Below is a fictional B2B SaaS PRD as it might look after Plan mode iteration, not a template you must copy, but a realistic length and specificity to aim for.

# PRD: Inactive seat reclamation & license visibility

**Owner:** Product Platform  
**Status:** Draft for eng review  
**Last updated:** 2026-04-20  

## Executive summary

**Northwind Analytics** sells per-seat subscriptions. Finance and IT admins lack a **trustworthy** view of **who has not used the product in 90 days**, and reclaiming seats today is a manual CSV export plus spreadsheet. We will ship an **admin-only** workflow to **identify**, **notify**, and **reclaim** inactive seats with a clear audit trail, without deleting user data by default.

## Problem statement

- CS and IT spend **~4 hours per month per large account** reconciling license counts with real usage.
- Admins **over-buy** seats because they cannot prove which logins are dormant.
- **Surprise churn** occurs when customers discover unused seats only at renewal, perceived as “gotcha” pricing if we do not give **advance visibility**.

## Goals

1. **Visibility:** Org admins can see **last activity date** per licensed seat and filter **inactive ≥ 90 days** (configurable per org, default 90).
2. **Action:** Admins can **mark seats for reclamation**, triggering **email** to the affected user and **grace period** (default 14 days) before the seat returns to the pool.
3. **Audit:** Every reclamation event is **immutable** in the org audit log: actor, target user, prior state, timestamp, optional admin note.
4. **Trust:** No automatic **hard delete** of user content in v1; reclaimed seats **lose app access** but **data remains restorable** by support for **30 days** (policy text in-app).

## Non-goals (v1)

- **Self-service** for end users to “give up” their own seat (admin-only).
- **Billing integration** that automatically reduces invoice line items; finance gets **export only**.
- **Mobile app** specific UX; web responsive is enough.
- **Cross-org** analytics or benchmarking against other customers.
- **ML-based** prediction of churn or “likely inactive”, rule is **purely time since last meaningful activity**.

## Personas

| Persona | Needs |
| --- | --- |
| **Org IT admin (primary)** | Reclaim seats before true-up; prove usage to leadership. |
| **CSM (secondary)** | Gentle nudge to customer admins before renewal; no manual SQL. |
| **Affected end user** | Clear email: what happened, how to request access again, data retention note. |

## User stories

1. **As an** org admin, **I want** to filter members by “last activity &gt; 90 days” **so that** I can target reclamation candidates.
2. **As an** org admin, **I want** to select multiple users and start a reclamation workflow **so that** I do not repeat the same clicks per person.
3. **As an** org admin, **I want** to set org-level **grace period** (7–30 days) **so that** legal/compliance can match our offboarding policy.
4. **As an** affected user, **I want** one email with **plain language** and a **support link** **so that** I understand I lost access but my exports still exist per policy.
5. **As a** CSM, **I want** a **read-only** report URL (time-bounded token) **so that** I can show the customer admin inactive users without admin login.

## Functional requirements

1. **Activity definition:** “Meaningful activity” = successful **login** OR **any mutating API call** OR **export** action; **not** passive page loads of the marketing shell.
2. **Filters:** Last activity date, role, team, **never logged in**, **scheduled for reclaim**.
3. **Bulk actions:** Max **500** users per batch; show progress and **partial failure** list if some users are **super-admins** or **legally protected** (flagged in HRIS sync, see open questions).
4. **Email:** Use existing **transactional** provider; template versions **v1** stored in repo; **unsubscribe** does not apply (account-security email class).
5. **Reclaim state machine:** `active` → `pending_reclaim` (grace) → `reclaimed` → optionally `restored` by support within 30 days.
6. **Permissions:** Only **org_admin** and **billing_admin** roles may initiate reclaim; **viewer** role read-only on reports.

## Non-functional requirements

- **Performance:** Inactive filter on **10k** members returns in **&lt; 3s** p95 (existing read replica OK).
- **Accessibility:** Admin tables meet **WCAG 2.1 AA** for sortable columns and status badges.
- **Localization:** **EN only** v1; strings in resource files for **FR in v1.1**.

## Success metrics

- **Adoption:** ≥ **40%** of enterprise accounts with **&gt; 50 seats** run the inactive filter **once** within **60 days** of launch.
- **Efficiency:** Median time from “open admin” to “first reclaim batch submitted” **&lt; 10 minutes** (instrumented funnel).
- **Support:** ≤ **5%** of reclamation actions generate a **priority** ticket in first month (baseline TBD).
- **Trust:** **Zero** P0 incidents related to **wrong user** reclaimed (measured via audit + support tags).

## Rollout

1. **Internal dogfood** (1 week), feature flag `seat_reclaim_internal`.
2. **Private beta**: **10** orgs opt-in; CSM playbook required.
3. **GA**: default **on** for Enterprise; **off** for Standard until pricing review.

## Risks & mitigations

| Risk | Mitigation |
| --- | --- |
| **Wrong person** reclaimed | Confirmation modal with **avatar + email**; undo within grace; audit. |
| **Legal hold** users | **Open:** HRIS “do not touch” flag, block with clear error. |
| **Email deliverability** | Reuse **existing** verified domain; staging sends to **mail catcher** only. |

## Open questions

1. Who owns **super-admin** reclaim, allowed or **always blocked**?
2. **API** for partners to ingest reclaim events in v1 or **CSV export only**?
3. **EU residency:** Does audit log for this feature need **region pinning**?

## Document history

| Date | Author | Note |
| --- | --- | --- |
| 2026-04-20 | PM draft | Initial Plan mode output before eng review |

Executing after the PRD

Leave Plan mode when the PRD is frozen enough to estimate (not necessarily perfect).

Create docs/<feature>-plan.md with phases and - [ ] items; each item should reference a PRD section or requirement ID where possible (Ref: FR-3).

Work one checkbox (or one tight group) per agent turn; keep @docs/<feature>-prd.md attached so non-goals stay loaded.

When scope creeps, answer: “Is this in the PRD?” If not, update the PRD first or explicitly mark out of scope for this release.

Example execution prompt (default mode):

@docs/acme-feature-prd.md
@docs/acme-feature-plan.md

Complete only the next unchecked item in the plan. If the plan conflicts with the PRD non-goals, stop and quote both sections. When done, mark the checkbox and summarize.

Exercise (35–45 minutes)

Work in a throwaway repo or a branch you can discard.

Part A, Draft in Plan mode (~15 min)

Enter Plan mode.

Pick a fake product: e.g. “Parking spot waitlist for office buildings” or use the Inactive seat reclamation idea above with your own twist.

Run the initial draft prompt pattern from this page; require at least eight ## sections.

Run one revision pass: non-goals, acceptance criteria for three stories, one new open question.

Exit Plan mode; save the result as docs/workshop-prd.md (paste or one file-creation turn).

Part B, Plan & execute (~20 min)

Ask for docs/workshop-plan.md: phases, - [ ] tasks, each traceable to the PRD (reference section names).

Implement exactly two checkboxes, or stub them with TODO and tests if time is short, stop after two.

Retro (2 min): Did the PRD non-goals prevent scope creep? What would you add to the PRD next time before coding?

Success criteria: You have two markdown files in docs/, at least two checked or partially done tasks, and you can name one decision the PRD made cheaper than chat alone.

See also

On this page