Gather Requirements
Turn a vague "build X" into structured, prioritized requirements before any design work begins. This skill produces the spec that architecture consumes — it does not pick technologies, draw boxes, or model data. Those are other skills' jobs.
Current context
!ls .context/architecture/requirements/ 2>/dev/null || echo "(none yet)"
Decision tree
- What does the user need?
- Full requirements gathering for a new system → follow the full process below
- Quick NFR analysis for an existing design → jump straight to "NFR analysis"
- Single-question scope check ("do I need X?") → answer directly, then suggest full gathering if the question reveals gaps
- User already has a design and wants feedback → hand off to
workflow:design-review when available
- User wants to start designing → capture requirements first, then hand off to
workflow:architecture when available
Interview framework
Pin down 7 areas using AskUserQuestion. Ask in batches of 3-4 — not all at once, not one at a time. Skip questions you can answer from the codebase. Call out assumptions explicitly so the user can correct them.
Before asking, scan the project for existing context:
- Read
.context/ files, README, and existing docs
- Check the codebase for clues about scale, stack, integrations
- Pre-fill what you can. Don't waste the user's time asking things the code already answers.
Areas to cover
- Purpose — What problem does this solve? Who uses it? What does success look like? What happens if we don't build it?
- Scale — Users, requests/second, data volume, growth trajectory. Today and 2 years out. If the user doesn't know, help them estimate from comparable systems.
- Latency and availability — p50/p99 targets for key operations, uptime requirement, acceptable downtime window, recovery expectations.
- Consistency — Are stale reads acceptable? Where? For how long? Are there transactional writes that must be atomic? What's the blast radius of a bug or inconsistency?
- Data — Core entities, key relationships, hot paths (what gets read/written most). Don't model the schema — just understand what exists.
- Constraints — Existing stack, team skills and size, budget ceiling, compliance obligations (GDPR, SOC2, PCI), hard deadlines.
- Integrations — Upstream and downstream systems, auth providers, payment processors, third-party APIs, event buses. What already exists vs what's new.
Functional requirements structuring
Once the interview is done, structure what the system must DO:
- List capabilities, not implementation details. "Users can reset their password via email" — not "send a POST to /reset with a JWT".
- Use MoSCoW prioritization:
- Must — launch blocker, the system is useless without it
- Should — important, but a workaround exists for v1
- Could — nice-to-have, build if time allows
- Won't — explicitly out of scope (write these down so they stop coming up)
- Each requirement must be testable. "Users can reset their password" is testable. "Good UX" is not.
- Number them (F1, F2, ...) so the architecture skill can trace design decisions back to requirements.
NFR analysis
Walk references/nfr-checklist.md area by area. For each relevant NFR:
- Set concrete targets with units. Not "fast" but "p99 < 300ms for search". Not "highly available" but "99.95% uptime, < 5min RTO".
- Identify the rationale. Why this number? Legal requirement? Business impact? User expectation? Gut feel? Be honest — gut feel is fine as a starting point, but label it.
- Mark hard vs soft constraints. Hard = non-negotiable (legal, contractual, physics). Soft = can be traded off during design if something else matters more.
- Identify the hardest constraint — the single NFR the architecture must optimize for. There's always one. If the user says "everything is equally important", push back — because that means nothing is prioritized and the design will try to optimize for everything and achieve nothing.
- Call out conflicts. Strong consistency vs low latency. High availability vs cost efficiency. Global distribution vs data residency. Name the tension so the architecture skill can make an informed trade-off.
Output
Write structured requirements to .context/architecture/requirements/<system>.md using the template from references/requirements-template.md. Read the template before writing — match its structure exactly.
Include an "Open questions" section for anything unresolved. These become the first thing the architecture skill addresses.
Cross-references
| Situation |
Hand off to |
| Requirements done, ready to decompose into components |
workflow:architecture if installed |
| Requirements done, ready to write a design doc |
documentation:write-design-doc if installed |
| Need to review an existing design against these requirements |
workflow:design-review if installed |
Key references
| File |
Covers |
references/nfr-checklist.md |
Non-functional requirements checklist — walk this during NFR analysis |
references/requirements-template.md |
Structured output template — match this format |
1---2name: requirements3description: Gathers, structures, and prioritizes requirements for a system before any design work begins. Use when the user has a vague idea ("I need to build X", "we need a service that does Y"), wants to define what a system should do and under what constraints, asks about non-functional requirements, says things like "what are the requirements for", "help me scope this", "what do I need to think about before building", or "let's figure out what this needs to do". Do NOT use for designing the system itself — this skill produces the inputs that architecture and design skills consume.4---56# Gather Requirements7Turn a vague "build X" into structured, prioritized requirements before any design work begins. This skill produces the spec that architecture consumes — it does not pick technologies, draw boxes, or model data. Those are other skills' jobs.89## Current context10```shell11!ls .context/architecture/requirements/ 2>/dev/null || echo "(none yet)"12```1314## Decision tree15- What does the user need?16 - **Full requirements gathering for a new system** → follow the full process below17 - **Quick NFR analysis for an existing design** → jump straight to "NFR analysis"18 - **Single-question scope check** ("do I need X?") → answer directly, then suggest full gathering if the question reveals gaps19 - **User already has a design and wants feedback** → hand off to `workflow:design-review` when available20 - **User wants to start designing** → capture requirements first, then hand off to `workflow:architecture` when available2122## Interview framework23Pin down 7 areas using `AskUserQuestion`. Ask in batches of 3-4 — not all at once, not one at a time. Skip questions you can answer from the codebase. Call out assumptions explicitly so the user can correct them.2425Before asking, scan the project for existing context:2627- Read `.context/` files, README, and existing docs28- Check the codebase for clues about scale, stack, integrations29- Pre-fill what you can. Don't waste the user's time asking things the code already answers.3031### Areas to cover321. **Purpose** — What problem does this solve? Who uses it? What does success look like? What happens if we don't build it?332. **Scale** — Users, requests/second, data volume, growth trajectory. Today and 2 years out. If the user doesn't know, help them estimate from comparable systems.343. **Latency and availability** — p50/p99 targets for key operations, uptime requirement, acceptable downtime window, recovery expectations.354. **Consistency** — Are stale reads acceptable? Where? For how long? Are there transactional writes that must be atomic? What's the blast radius of a bug or inconsistency?365. **Data** — Core entities, key relationships, hot paths (what gets read/written most). Don't model the schema — just understand what exists.376. **Constraints** — Existing stack, team skills and size, budget ceiling, compliance obligations (GDPR, SOC2, PCI), hard deadlines.387. **Integrations** — Upstream and downstream systems, auth providers, payment processors, third-party APIs, event buses. What already exists vs what's new.3940## Functional requirements structuring41Once the interview is done, structure what the system must DO:4243- **List capabilities, not implementation details.** "Users can reset their password via email" — not "send a POST to /reset with a JWT".44- **Use MoSCoW prioritization:**45 - **Must** — launch blocker, the system is useless without it46 - **Should** — important, but a workaround exists for v147 - **Could** — nice-to-have, build if time allows48 - **Won't** — explicitly out of scope (write these down so they stop coming up)49- **Each requirement must be testable.** "Users can reset their password" is testable. "Good UX" is not.50- **Number them** (F1, F2, ...) so the architecture skill can trace design decisions back to requirements.5152## NFR analysis53Walk `references/nfr-checklist.md` area by area. For each relevant NFR:5455- **Set concrete targets with units.** Not "fast" but "p99 < 300ms for search". Not "highly available" but "99.95% uptime, < 5min RTO".56- **Identify the rationale.** Why this number? Legal requirement? Business impact? User expectation? Gut feel? Be honest — gut feel is fine as a starting point, but label it.57- **Mark hard vs soft constraints.** Hard = non-negotiable (legal, contractual, physics). Soft = can be traded off during design if something else matters more.58- **Identify the hardest constraint** — the single NFR the architecture must optimize for. There's always one. If the user says "everything is equally important", push back — because that means nothing is prioritized and the design will try to optimize for everything and achieve nothing.59- **Call out conflicts.** Strong consistency vs low latency. High availability vs cost efficiency. Global distribution vs data residency. Name the tension so the architecture skill can make an informed trade-off.6061## Output62Write structured requirements to `.context/architecture/requirements/<system>.md` using the template from `references/requirements-template.md`. Read the template before writing — match its structure exactly.6364Include an "Open questions" section for anything unresolved. These become the first thing the architecture skill addresses.6566## Cross-references67|Situation|Hand off to|68|---|---|69|Requirements done, ready to decompose into components|`workflow:architecture` if installed|70|Requirements done, ready to write a design doc|`documentation:write-design-doc` if installed|71|Need to review an existing design against these requirements|`workflow:design-review` if installed|7273## Key references74|File|Covers|75|---|---|76|`references/nfr-checklist.md`|Non-functional requirements checklist — walk this during NFR analysis|77|`references/requirements-template.md`|Structured output template — match this format|