Files
2025-11-30 09:06:46 +08:00

342 lines
10 KiB
Markdown

---
name: spec-driven-planning
description: Use when planning new features or need structured requirements - creates feature structure, elicits EARS requirements through systematic questioning, proposes architectural approaches with trade-offs. Activates when user mentions "new feature", "requirements", "specs", "design", "architecture", or uses /dev-workflow:spec commands (create, requirements, design).
allowed-tools: Read, Write, Glob, Grep
---
# Spec-Driven Planning Skill
## Purpose
Guide feature planning through three structured phases: Feature Creation → Requirements (EARS) → Technical Design. This systematic approach ensures clear requirements and thoughtful design before implementation begins.
## Activation Triggers
Activate this skill when:
- User says "create a new feature"
- User mentions "requirements", "specifications", or "specs"
- User uses `/dev-workflow:spec` command with planning options
- User asks to plan or design a feature
- User says "I need to build [feature]"
- User mentions "architecture" or "technical design"
## Three-Phase Planning Workflow
### Phase 1: Feature Creation
**Goal:** Establish feature structure and placeholder files
**Process:**
1. Parse feature name from user input
2. Check existing features using Bash tool: `ls docx/features/`
3. Determine next number (NN) for feature directory
4. Create directory using Bash tool: `mkdir -p docx/features/[NN-feature-name]`
5. Copy templates from plugin to feature directory:
- Use Read tool: `dev-workflow/templates/requirements.md`
- Use Write tool: `docx/features/[NN-feature-name]/requirements.md` (replace [Feature Name] with actual name)
- Use Read tool: `dev-workflow/templates/design.md`
- Use Write tool: `docx/features/[NN-feature-name]/design.md` (replace [Feature Name] with actual name)
- Use Read tool: `dev-workflow/templates/tasks.md`
- Use Write tool: `docx/features/[NN-feature-name]/tasks.md` (replace [Feature Name] with actual name)
**Output:**
```
Created feature: docx/features/[NN-feature-name]/
- requirements.md (from template)
- design.md (from template)
- tasks.md (from template)
Next step: Define requirements using EARS format
```
**User Confirmation:**
> "Feature structure created. Ready to define requirements?"
---
### Phase 2: Requirements Definition (EARS Format)
**Goal:** Capture clear, testable requirements using EARS methodology
**Brainstorming Integration (Optional):**
- If user has rough idea but unclear requirements, use Skill tool to invoke: `dev-workflow:brainstorming`
- Helps clarify what to build vs. what's out of scope
- Explores different feature scopes through collaborative questioning
- Determines must-haves vs. nice-to-haves
**How to activate:**
```
Use Skill tool: Skill(skill: "dev-workflow:brainstorming")
```
**EARS Format Explained:**
EARS (Easy Approach to Requirements Syntax) provides five templates for unambiguous requirements:
1. **Ubiquitous Requirements** - Always true
- Template: "The system SHALL [requirement]"
- Example: "The system SHALL validate all user inputs before processing"
2. **Event-Driven Requirements** - Triggered by events
- Template: "WHEN [trigger] THEN the system SHALL [response]"
- Example: "WHEN user clicks submit THEN the system SHALL validate form data"
3. **State-Driven Requirements** - Active during specific states
- Template: "WHILE [state] the system SHALL [requirement]"
- Example: "WHILE processing payment the system SHALL display loading indicator"
4. **Conditional Requirements** - Based on conditions
- Template: "IF [condition] THEN the system SHALL [requirement]"
- Example: "IF user role is admin THEN the system SHALL show management panel"
5. **Optional Requirements** - Feature toggles
- Template: "WHERE [feature included] the system SHALL [requirement]"
- Example: "WHERE premium subscription is active the system SHALL enable advanced analytics"
**Systematic Questioning Approach:**
Ask the user these questions to elicit requirements:
1. **Core Functionality**
- "What is the primary purpose of this feature?"
- "What problem does it solve?"
2. **Event-Driven Requirements**
- "What user actions trigger this feature?"
- "What system events are involved?"
3. **State-Driven Requirements**
- "Are there different states or modes?"
- "What should happen during each state?"
4. **Conditional Requirements**
- "Are there different behaviors for different users/roles?"
- "What conditions affect functionality?"
5. **Performance Requirements**
- "Are there response time requirements?"
- "What's the expected load/scale?"
6. **Security Requirements**
- "What data needs protection?"
- "Who should have access?"
7. **Error Handling**
- "What can go wrong?"
- "How should errors be handled?"
8. **Edge Cases**
- "What are the boundary conditions?"
- "What happens at extremes?"
**Best Practices:**
- Use "SHALL" for mandatory requirements
- Be specific and measurable (avoid "quickly", use "within 2 seconds")
- One requirement per statement
- Avoid ambiguous terms ("appropriate", "reasonable", "user-friendly")
- Use active voice
**Output Format:**
Update `docx/features/[NN-feature-name]/requirements.md` with:
- Overview section
- Functional requirements (organized by EARS type)
- Non-functional requirements (performance, security, usability)
- Constraints
- Acceptance criteria (checkboxes)
- Out of scope items
**User Confirmation:**
> "Requirements complete. Ready for design phase?"
---
### Phase 3: Technical Design
**Goal:** Create comprehensive technical design with architectural decisions
**Process:**
1. **Brainstorming Integration**
- Use Skill tool to invoke: `dev-workflow:brainstorming` for collaborative design exploration
- Explore 2-3 different architectural approaches
- Discuss trade-offs for each approach
**How to activate:**
```
Use Skill tool: Skill(skill: "dev-workflow:brainstorming")
```
**UltraThink for Complex Designs:**
Before proposing technical approaches, activate deep thinking when:
- Architecture involves multiple services or complex data flows
- Trade-offs between approaches aren't obvious
- Design impacts security, performance, or scalability
- Requirements seem contradictory or incomplete
> 🗣 Say: "This design requires deep thinking. Let me ultrathink the architectural fundamentals before proposing approaches."
**During UltraThink, question:**
- Are we solving the right problem?
- What are we assuming that might be wrong?
- What could break at scale?
- What's the simplest architecture that works?
- What are the hidden costs of each approach?
- What would we do differently if starting from scratch?
**After UltraThink:** Present approaches with explicit reasoning about architectural trade-offs and scalability considerations.
2. **Approach Comparison**
Present options with trade-offs:
**Option A: [Approach Name]**
- Pros: [Advantages]
- Cons: [Disadvantages]
- Complexity: Low/Medium/High
- Timeline: [Estimate]
**Option B: [Approach Name]**
- Pros: [Advantages]
- Cons: [Disadvantages]
- Complexity: Low/Medium/High
- Timeline: [Estimate]
3. **Recommendation**
- State recommended approach
- Provide clear reasoning
- Explain why it best fits requirements
4. **Design Document Structure**
Create comprehensive `design.md` covering:
**Architecture Overview**
- How feature fits into system
- High-level component diagram (ASCII art)
**Component Structure**
- List components with responsibilities
- Define dependencies between components
- Specify public interfaces
**Data Flow**
- Step-by-step data movement
- Diagram showing flow
**API Contracts**
- Input/output schemas
- Error responses
- Example requests/responses
**Error Handling**
- Error scenarios and handling strategy
- Fallback behaviors
**Security Considerations**
- Authentication/authorization
- Input validation
- Data protection
**Performance Considerations**
- Optimization strategies
- Caching approach
- Database indexing needs
**Testing Strategy**
- Unit test areas
- Integration test scenarios
- E2E test workflows
**Approval Gate:**
> "Design complete. Ready for task breakdown?"
Wait for explicit user approval before proceeding.
---
## Next Steps
After design approval, use `/dev-workflow:spec tasks` or `/dev-workflow:spec execute` to activate the `spec-driven-implementation` skill, which will:
- Break down your design into TDD tasks with Red-Green-Refactor cycles
- Guide systematic execution with quality gates
- Track progress with checkbox updates
- Integrate with code-quality and git-workflow skills
---
## Examples
### Example 1: Creating User Authentication Feature
**User:** "I need to add user authentication"
**Assistant:**
```
Activating spec-driven-planning skill for feature planning.
Let me create the feature structure:
Created feature: docx/features/01-user-authentication/
- requirements.md
- design.md
- tasks.md
Phase 1 Complete. Ready to define requirements?
```
**User:** "Yes"
**Assistant:**
```
Phase 2: Requirements Definition (EARS Format)
Let me ask some questions to capture clear requirements:
1. Core Functionality:
- What authentication methods should be supported? (email/password, OAuth, etc.)
- Should there be session management?
2. Events:
- What happens when user tries to log in?
- What happens when session expires?
[...continues with systematic questioning...]
```
### Example 2: Resuming at Design Phase
**User:** "/dev-workflow:spec design"
**Assistant:**
```
Activating spec-driven-planning skill at Phase 3: Design
Found latest feature: docx/features/01-user-authentication/
Requirements already defined. Let me propose architectural approaches:
**Option A: JWT-Based Authentication**
Pros: Stateless, scalable, works across services
Cons: Token invalidation complexity, larger payload
Complexity: Medium
**Option B: Session-Based Authentication**
Pros: Simple invalidation, smaller cookies, familiar pattern
Cons: Requires session storage, scaling challenges
Complexity: Low
Recommendation: Option A (JWT-Based)
Reasoning: Better for microservices, future-proof, industry standard
Proceed with JWT-based design?
```
---
## Notes
- Always request explicit approval between phases
- Use EARS format strictly for requirements
- Focus on "what" and "how", not "doing"
- Create clear, complete documentation before implementation
- Explore multiple architectural options before recommending one
- Wait for user approval before activating implementation skill