Requirements Engineering
Transform user needs and business goals into precise, testable requirements.
Context
Requirements engineering bridges discovery and design. It takes the "what users need" from discovery and turns it into "what the system must do" for architecture. Poor requirements are the #1 cause of project failure -- not because requirements are missing, but because they're ambiguous, contradictory, or incomplete.
Process
Step 1: Gather Functional Requirements
For each user persona and journey, identify what the system must do:
- User actions (login, create, search, purchase, export)
- System responses (validate, calculate, notify, persist)
- Business rules (pricing logic, access control, workflow transitions)
Use a consistent format: "The system shall [action] when [condition] so that [benefit]."
Step 2: Identify Non-Functional Requirements
Quantify quality attributes only when the source material supports a bound or when you clearly label an assumption that still needs owner confirmation:
- Performance: Response time < 200ms p95, support 1000 concurrent users
- Security: OWASP Top 10 compliance, SOC2 Type II, data encryption at rest
- Scalability: Handle 10x growth without architecture changes
- Availability: 99.9% uptime (8.7 hours downtime/year)
- Accessibility: WCAG 2.1 AA compliance
When the source gives a direction but not a number:
- Convert it into a bounded requirement only if the bound is explicitly sourced
- Otherwise record it as an open question or assumption requiring review
- Do not invent precise targets just to make the document look complete
Step 3: Prioritize
Use MoSCoW (Must/Should/Could/Won't) or RICE (Reach x Impact x Confidence / Effort):
- P0 (Must): Product is unusable without these
- P1 (Should): Important but workarounds exist
- P2 (Could): Nice to have, include if time permits
- P3 (Won't): Explicitly out of scope for this iteration
Step 4: Validate and Resolve Conflicts
- Review with stakeholders for completeness
- Check for contradictions between requirements
- Verify technical feasibility with architect
- Ensure traceability (each requirement links to a user need)
- Flag any requirement or NFR whose precision is assumption-driven rather than source-driven
Step 5: Document with Traceability
Each requirement should have: ID, description, priority, source (which user need), acceptance criteria reference, and status.
If a metric, SLA, or retention bound is not directly supported by the source material, include it only as:
- an explicitly labeled assumption, or
- an open question with a named owner
Quality Gate
Anti-Patterns
- Solution masquerading as requirement -- "Use Redis for caching" is a solution, not a requirement. The requirement is "cache frequently accessed data to achieve < 50ms read latency."
- Vague requirements -- "The system should be fast" is untestable. Quantify everything.
- Invented precision -- Turning "must remain responsive" into "p99 < 800ms" without a source or approved assumption creates false certainty. Mark unknown bounds as open questions.
- Requirements by committee -- Too many stakeholders without a single owner leads to bloat. One person owns the requirements doc.
- Scope creep via "just one more" -- Each new requirement has a cost. Evaluate against the backlog, don't just add.
Related Skills
1---2name: requirements-engineering3description: Use when the work is still at the “what should we build” stage rather than design or implementation. Apply before spec-writing, architecture, API design, planning, or coding when interviews, personas, stakeholder notes, or discovery artifacts must be turned into prioritized functional requirements, non-functional requirements, scope boundaries, traceable sources, and explicit “the system shall” statements; not for acceptance criteria, PRD drafting from an approved requirements doc, spec review, or implementation.4---56# Requirements Engineering78> Transform user needs and business goals into precise, testable requirements.910## Context1112Requirements engineering bridges discovery and design. It takes the "what users need" from discovery and turns it into "what the system must do" for architecture. Poor requirements are the #1 cause of project failure -- not because requirements are missing, but because they're ambiguous, contradictory, or incomplete.1314## Process1516### Step 1: Gather Functional Requirements1718For each user persona and journey, identify what the system must do:19- User actions (login, create, search, purchase, export)20- System responses (validate, calculate, notify, persist)21- Business rules (pricing logic, access control, workflow transitions)2223Use a consistent format: "The system shall [action] when [condition] so that [benefit]."2425### Step 2: Identify Non-Functional Requirements2627Quantify quality attributes **only when the source material supports a bound or when you clearly label an assumption that still needs owner confirmation**:28- **Performance**: Response time < 200ms p95, support 1000 concurrent users29- **Security**: OWASP Top 10 compliance, SOC2 Type II, data encryption at rest30- **Scalability**: Handle 10x growth without architecture changes31- **Availability**: 99.9% uptime (8.7 hours downtime/year)32- **Accessibility**: WCAG 2.1 AA compliance3334When the source gives a direction but not a number:35- Convert it into a bounded requirement only if the bound is explicitly sourced36- Otherwise record it as an **open question** or **assumption requiring review**37- Do **not** invent precise targets just to make the document look complete3839### Step 3: Prioritize4041Use MoSCoW (Must/Should/Could/Won't) or RICE (Reach x Impact x Confidence / Effort):42- **P0 (Must)**: Product is unusable without these43- **P1 (Should)**: Important but workarounds exist44- **P2 (Could)**: Nice to have, include if time permits45- **P3 (Won't)**: Explicitly out of scope for this iteration4647### Step 4: Validate and Resolve Conflicts4849- Review with stakeholders for completeness50- Check for contradictions between requirements51- Verify technical feasibility with architect52- Ensure traceability (each requirement links to a user need)53- Flag any requirement or NFR whose precision is assumption-driven rather than source-driven5455### Step 5: Document with Traceability5657Each requirement should have: ID, description, priority, source (which user need), acceptance criteria reference, and status.5859If a metric, SLA, or retention bound is not directly supported by the source material, include it only as:60- an explicitly labeled assumption, or61- an open question with a named owner6263## Quality Gate6465- [ ] All P0/P1 requirements documented with clear acceptance criteria66- [ ] Non-functional requirements quantified where evidence exists; otherwise converted into explicit open questions or assumptions67- [ ] No unresolved contradictions between requirements68- [ ] Stakeholders have reviewed and signed off69- [ ] Requirements are traceable to user needs7071## Anti-Patterns72731. **Solution masquerading as requirement** -- "Use Redis for caching" is a solution, not a requirement. The requirement is "cache frequently accessed data to achieve < 50ms read latency."742. **Vague requirements** -- "The system should be fast" is untestable. Quantify everything.753. **Invented precision** -- Turning "must remain responsive" into "p99 < 800ms" without a source or approved assumption creates false certainty. Mark unknown bounds as open questions.764. **Requirements by committee** -- Too many stakeholders without a single owner leads to bloat. One person owns the requirements doc.775. **Scope creep via "just one more"** -- Each new requirement has a cost. Evaluate against the backlog, don't just add.7879## Related Skills8081- [spec-writing](../spec-writing/SKILL.md) -- transforms requirements into detailed specification82- [domain-modeling](../domain-modeling/SKILL.md) -- runs in parallel to model the domain83- [acceptance-criteria](../acceptance-criteria/SKILL.md) -- creates testable criteria from requirements