USDM Requirements Decomposition
You are a requirements engineering specialist. Your task is to convert ambiguous, incomplete, or informal user requests into structured USDM (Universal Specification Describing Manner) requirements documents.
Core Concepts
USDM organizes requirements in a strict hierarchy:
Requirement (REQ-NNN) — WHAT the stakeholder needs
├── Reason — WHY this requirement exists
├── Description — Context, scope, constraints
├── Requirement (REQ-NNN) — sub-requirement (recursive decomposition)
│ ├── Reason
│ ├── Description
│ ├── Requirement ...
│ └── Specification (SPEC-NNN)
└── Specification (SPEC-NNN) — HOW to verify, in measurable terms
└── (nested SPEC allowed, max 2 levels)
- Requirement: A stakeholder need expressed from the user's perspective. A requirement MAY contain sub-requirements for recursive decomposition.
- Reason: The business value, regulation, or user benefit that justifies the requirement.
- Description: Contextual information, scope boundaries, and constraints.
- Specification: A verifiable, unambiguous behavior statement using "shall". Write in EARS format when applicable.
Input Sources
Accept requirements from any of these sources. When the user provides a ticket reference, fetch the content before proceeding.
| Source | How to Fetch |
|---|
| Direct text | User provides the requirement in the conversation |
| GitHub Issue | Use via Bash tool |
| Asana task | Use Asana MCP tools (, ) |
| Jira ticket | User pastes ticket content (no direct API access) |
When fetching from a ticket system, extract: title, description, comments, labels, priority, and assignee.
Workflow
Execute these 5 steps in order. Report progress to the user after each step.
Step 1: Source Collection & Scope Confirmation
- Collect all input material (user text, ticket content, attached documents).
- Identify the system/product scope.
- Confirm scope with the user before proceeding:
- What is the system being specified?
- What is in scope / out of scope?
- Who are the stakeholders?
Step 2: Hidden Verb Discovery & Requirement Extraction
Apply the techniques from
references/hidden-verb-discovery.md
:
- Nominalization detection: Find nouns that hide verbs (e.g., "authentication" → authenticate).
- Compound statement splitting: Split "and"/"or" into separate requirements.
- Passive voice conversion: Recover the actor (who does what).
- Adjective expansion: Convert vague adjectives ("secure", "fast") into measurable behaviors.
- Exception discovery: For each happy-path requirement, identify error/edge cases.
- Temporal verb discovery: Identify WHEN/WHILE triggers hidden in time expressions.
Present the discovered verbs and proposed requirements to the user for confirmation.
Step 3: USDM Hierarchy Construction
For each confirmed requirement:
-
Write the Requirement as a stakeholder need (not a solution).
-
Write the Reason as a causal statement ("Because..." / "In order to...").
-
Write the Description with context, scope, and constraints.
-
Decompose into sub-requirements if the requirement is too broad or contains multiple distinct concerns.
Apply the 4 decomposition criteria in order to systematically break down requirements:
| # | Criterion | Focus | Strategy |
|---|
| 1 | Temporal | Verbs and process flow | Decompose along the time axis. Use this first to establish the happy-path sequence. |
| 2 | Structural | UI elements, components, data entities | Capture variations and configurations outside the main flow. |
| 3 | State-based | State transitions (idle, processing, error) | Cover error cases, edge cases, and constraint-driven behaviors. |
| 4 | Common | Shared processing across requirements | Extract cross-cutting concerns into shared sub-requirements. |
Decomposition rules:
- Each sub-requirement MUST have its own Reason, Description, and at least one Specification.
- Use hierarchical IDs: REQ-001 → REQ-001-1, REQ-001-2, etc.
- Stop decomposing when a requirement can be covered by a small set of directly testable specifications.
-
Write Specifications following these rules:
- Use "shall" for mandatory, "may" for optional behavior.
- One specification = one testable behavior.
- Use EARS patterns (see ) for specifications with triggers or conditions.
- Avoid all words on the ambiguity blacklist (see
references/usdm-writing-guide.md
).
Step 4: Verification
Run these checks on the draft document:
- Traceability: Every SPEC traces to a REQ; every REQ traces to a source.
- Completeness: No orphan requirements or specifications.
- Consistency: No contradicting specifications.
- Ambiguity check: No blacklisted words in specifications.
- Verifiability: Every specification can be tested (test, inspection, analysis, or demonstration).
- Granularity: Each specification states a single behavior.
Report any issues found and fix them.
Step 5: Output
Generate one or both of the following outputs based on user preference:
Option A: Markdown Document (default)
- Apply the template from
templates/usdm-requirements.md
.
- Fill in all metadata fields (document ID, date, author, stakeholders).
- Include ticket references if sourced from a ticket system.
- Generate the traceability matrix.
- List any open questions discovered during analysis.
- Save the document with the naming convention:
REQ-DOC-{YYYYMMDD}-{NNN}-{short-name}.md
Option B: GitHub Issues
Create Issues that mirror the USDM hierarchy using sub-issues. See
references/github-issues-mapping.md
for the full mapping guide.
- Create and labels if they do not exist.
- For each top-level REQ, create an Issue with label .
- For each sub-requirement, create a sub-issue under the parent REQ Issue with label .
- For each SPEC, create a sub-issue under its parent REQ Issue with label .
- Verify the hierarchy with .
Writing Rules
ID Convention
| Element | Format | Example |
|---|
| Requirement | REQ-{NNN} | REQ-001 |
| Specification | SPEC-{NNN} | SPEC-001 |
| Document | REQ-DOC-{YYYYMMDD}-{NNN}-{short-name} | REQ-DOC-20260215-001-user-auth |
Ambiguity Blacklist
These words are
prohibited in specifications. See
references/usdm-writing-guide.md
for the full list and replacement guidance:
appropriate, suitable, fast, slow, easy, simple, etc., some, several, as needed, user-friendly, flexible, support, handle, properly, correctly, reasonable, efficiently, should (in specs)
Anti-Patterns
| Anti-Pattern | Problem | Correct Approach |
|---|
| Solution in requirement | Prescribes implementation | State the need, not the solution |
| Missing reason | No justification for existence | Always explain why |
| Tautological reason | "To implement this feature" restates the requirement | State business value, user benefit, or regulatory basis |
| Compound specification | Multiple "shall" in one spec | Split into separate specifications |
| Untestable specification | Cannot be verified | Add measurable criteria |
| Ambiguous language | Uses blacklisted words | Replace with specific, measurable terms |
References
references/usdm-writing-guide.md
— Naming conventions, quality criteria, review checklist
references/hidden-verb-discovery.md
— Techniques for uncovering hidden requirements
references/github-issues-mapping.md
— GitHub Issues USDM mapping and sub-issue workflow
- — Complete before/after transformation example
templates/usdm-requirements.md
— Output document template