review-plan
What This Skill Does
Evaluate and pressure-test an existing feature plan for technical soundness, system fit, feasibility, scope control, and implementation readiness. Read the plan and codebase, verify claims against reality, apply adversarial analysis lenses to surface hidden risks and overengineering, deliver a verdict. No new documents are produced.
This is the design review step in the planning pipeline (plan-feature → write-a-prd → review-prd → ubiquitous-language → design-feature → review-plan). This is the last checkpoint before implementation — your job is to find what was missed, underweighted, or left unsaid.
Finding the Plan
Look for the plan in this order:
- If the user names a specific file, read that file.
- Check
./plans/for design files (*-design.md). If there's exactly one, use it. If there are several, ask which one. - If the plan was produced earlier in this conversation (via design-feature), use the conversation context.
If no plan can be found, say so and stop. Do not fabricate a review.
If the plan is obviously a partial draft (missing major sections like the Phased Build Plan), note this and recommend completing the plan before a full review. Do not review a half-finished plan as if it were complete.
Check for upstream documents
After finding the plan, also look in ./plans/ for:
- A matching PRD (
*-prd.md) — the requirements the design is supposed to implement. - A matching scope document (
*-scope.md) — the boundaries the design is supposed to stay within.
If either exists, read them. Discrepancies between the design and its upstream documents are findings.
Analysis Process
Work through these steps before writing any output. Do the investigation silently — the user sees only the final verdict, not a play-by-play of your exploration.
Step 1: Understand the plan on its own terms
Read the plan fully. Identify what it proposes to build, the key design decisions, the stated scope, and the phasing. Note anything that feels underspecified, internally inconsistent, or surprising.
Step 2: Verify against reality
The plan will make claims about the current system — existing models, patterns, auth approaches, API conventions. Check these against actual code and project documentation (READMEs, ADRs, architecture docs, inline doc comments). Look for:
- Mismatches: The plan says "we use X" but the code shows Y.
- Missing context: The plan assumes a capability exists that doesn't, or ignores a constraint that does.
- Stale references: Files, functions, or patterns mentioned in the plan that have moved or changed.
- Source-of-truth conflicts: Where plan, code, and documentation disagree. Classify each: stale docs, incomplete implementation, intentional divergence, or unclear.
A plan that doesn't match the codebase it will be built on is not ready — no matter how elegant the design.
PRD alignment
If a PRD exists for this feature, verify that the technical design covers all functional requirements:
- Are all user stories addressed by at least one behavior spec or build phase?
- Are there PRD requirements that the design ignores or contradicts?
- Does the design introduce behavior not called for by the PRD? If so, is this justified (technical necessity) or scope creep?
Scope alignment
If a scope document exists, verify that the design stays within scope boundaries:
- Does the design tackle items marked as "out of scope" in the scope document?
- Does the design miss items marked as "likely in for v1"?
- Are scope-level risks and assumptions acknowledged?
Step 3: Pressure-test through adversarial lenses
Work through these lenses. Include only the ones that surface real concerns. Present them in order of severity, not in the order listed below. Skip any section where you'd be reaching or padding.
Assumptions That May Not Hold
What is the plan taking for granted? Dependencies that might not exist, performance characteristics that haven't been measured, user behavior that hasn't been validated, third-party services that might not support what's needed. Name each assumption and explain why it's shaky.
Failure Modes & Edge Cases
What happens when things go wrong? Not the happy path — the 2am pager path. Race conditions, partial failures, data corruption scenarios, rollback complexity, error propagation. Think about what breaks in production at scale, not just in a dev environment.
Overengineering & Unnecessary Complexity
Where is the plan doing more than needed? Premature abstractions, configurable things that will only ever have one value, infrastructure that anticipates scale that hasn't arrived, layers of indirection that make the code harder to debug. The best code is code you don't write.
Scope Creep Risks
Where might this expand beyond what was intended? Features that invite follow-up requests, abstractions that beg to be generalized, boundaries that are fuzzy enough that adjacent work starts bleeding in. Identify the slippery slopes.
Scope Drift
Does the technical design actually solve the problem defined in the scope document and PRD? Or has the design drifted — solving an adjacent problem, gold-plating requirements, or reinterpreting the problem statement to fit a preferred technical approach?
PRD Coverage Gaps
Are there functional requirements from the PRD that the technical design doesn't address? Walk through the PRD's user stories and functional requirements and identify any that have no corresponding behavior spec, build phase, or design decision. Requirements that evaporate during technical design are a common failure mode.
Implementation Readiness
Could a developer pick this up and start building? What questions would they immediately have? Are acceptance criteria specific enough to verify? Is the testing strategy adequate?
Security & Access
Does the plan handle permissions, tenancy, trust boundaries, and sensitive data appropriately? What are the security implications of each design decision?
Operational Readiness
Are rollout, backward compatibility, monitoring, and failure recovery addressed? Feature flags? Migration strategy?
Maintenance Burden
What will this cost to maintain over time? Dependencies that will need updating, custom implementations that duplicate what a library does, patterns that future developers will find confusing, test coverage gaps that will allow regressions.
Simpler Alternatives
Is there a way to achieve the same goal with less? A library instead of a custom implementation, a simpler architecture that trades some flexibility for clarity, a phased approach that delivers value sooner with less risk, an existing feature that could be extended rather than building from scratch.
Should This Be Solved At All?
The most radical question. Is the problem real? Is it worth solving now? Could the team's time be better spent elsewhere? Is this solving a symptom rather than a root cause?
Timeline & Effort Realism
Does the estimated effort match the actual complexity? Are there parts of the codebase that look simple in the plan but are deeply entangled in practice? Is the team size realistic for the proposed timeline and scope?
Feasibility & Phasing
Is the proposed phasing realistic? Are dependencies in the right order — does any phase assume infrastructure from a later phase? Are there hidden complexities the plan glosses over?
Output Format
Deliver a concise review in chat. Use this structure:
Verdict: [Ready / Revise / Rethink]
Reviewing: [plan name/file]
Strengths (2-4 bullets)
- What the plan gets right
Issues (severity-ordered, most critical first)
- [Category]: Description. Why it matters. What to do about it.
Risks (if any found)
- Risks the plan doesn't adequately address
Recommended next step One clear sentence on what to do now.
Keep the review concise. This is a verdict, not a rewrite. If an issue is best explained with a code snippet from the codebase, include it, but don't pad the review with lengthy quotations.
Scale your response to the severity of what you find. A solid plan with minor gaps gets a short, focused review. A fundamentally flawed plan gets the full treatment. The length of your review should itself signal severity.
If the verdict is Revise, end with a numbered list of specific items to address — phrased as instructions that could be acted on directly. Example: "Update the data model section to use the existing users table structure from src/db/schema.ts."
Interaction Model
This skill is designed to minimize user interaction. Do not:
- Re-interview the user about their requirements
- Ask questions the codebase can answer
- Ask the user to confirm what you found in code
- Rewrite or revise the plan (you may only append a Pipeline Status entry)
Ask a clarifying question only if there is a true blocking ambiguity — for example, the plan references a system you cannot find any trace of in the codebase or documentation, and you cannot determine whether it exists. If there are two plausible interpretations that lead to very different risk profiles, briefly note both rather than asking which one is correct.
After delivering the verdict, the user may want to discuss findings or ask you to revise the plan. That is a normal follow-up conversation, not part of this skill's protocol.
What happens on Revise
If the verdict is Revise, the expected workflow is: edit the design to address the numbered items, then re-run /review-plan to verify. For a Rethink verdict, re-run /design-feature to redesign from scratch.
Tone
Be direct, specific, and unapologetic. Name the file, the component, the dependency, the assumption. Generic warnings ("make sure to handle errors") are worthless — say what error, in what scenario, with what consequence.
Acknowledge what works — a good critic knows what's solid — but don't soften genuine problems. If the plan has issues, the team needs to hear it now, not after two weeks of implementation.
More from michaelmerrill/skills
design
Design specification interview → standalone spec.md (flows, screens, states, components, responsive, a11y). Triggers: 'design this,' 'what screens,' 'how should users interact,' post-product. Not for: technical design (engineering), requirements (product). Skip for API-only, CLI, backend, or infra features.
8plan
Decompose technical design into agent-sized implementation issues → numbered markdown files + standalone plan.md. Triggers: 'plan this,' 'break into issues,' 'create tasks,' 'ready to implement,' post-engineering. Not for: designs without file paths/phases (run engineering first).
7design-ux
MUST USE when a user wants to design user flows, interaction patterns, or screen-level UX for a feature that has defined requirements. This is the UX design step in the planning pipeline (write-a-prd → review-prd → glossary → design-ux → design-feature → review-plan). Typical signals — "design the UX," "how should users interact with this," "what should the UI look like," "design the flows," "design-ux," "what screens do we need," or following up after a review-prd or glossary session. Also applies when the user has a PRD and wants to figure out the user experience before technical design. Conducts a structured interview to produce a UX specification — user flows, screen inventory, component mapping, interaction specs, and accessibility requirements. Do NOT use for technical design (use design-feature), writing requirements (use write-a-prd), reviewing plans (use review-plan), scoping/feasibility (use plan-feature), or when the feature has no user-facing UI (API-only, backend, CLI tools).
6plan-feature
Scoping interview for new features -> scope doc with go/no-go. Triggers: user wants to add/build/implement any new capability. First pipeline step. Not for: bugs, PRDs (write-a-prd), design (design-feature), executing existing specs.
6define
Product requirements → living doc Requirements section + quality gate + domain glossary. Stateful: detects existing sections and resumes where needed. Triggers: 'define this,' 'write a PRD,' 'define requirements,' 'spec this out,' post-explore. Not for: scoping (explore), UX (design), technical design (architect).
5explore
Scope and assess new feature ideas → living doc with go/no-go. Elaborates vague ideas into clear concepts. First pipeline step. Triggers: user wants to add/build/implement any new capability. Not for: bugs (triage-issue), requirements (define), design (design/architect).
5