Back to catalog

planning-phase

Standard Operating Procedure for /plan phase. Covers research depth, code reuse detection, design pattern selection, and architecture planning.

  • Category: discovered
  • Tags: github, community
  • Version: 1.0.0
  • Author: walid
  • Downloads: 0
  • Updated: 2025-11-22

Download the latest version (v1.0.0) from this page.

SKILL.md

---
name: planning-phase
description: "Standard Operating Procedure for /plan phase. Covers research depth, code reuse detection, design pattern selection, and architecture planning."
allowed-tools: Read, Write, Edit, Grep, Glob, Bash
---

# Planning Phase: Standard Operating Procedure

> **Training Guide**: Step-by-step procedures for executing the `/plan` command with emphasis on code reuse and thorough research.

**Supporting references**:
- [reference.md](reference.md) - Reuse detection strategies, research depth matrix, design pattern catalog
- [examples.md](examples.md) - Good plans (high reuse) vs bad plans (reinventing wheels)
- [scripts/verify-reuse.sh](scripts/verify-reuse.sh) - Script to detect reusable code patterns

---

## Phase Overview

**Purpose**: Transform specifications into detailed implementation plans with emphasis on code reuse, pattern identification, and architecture decisions.

**Inputs**:
- `specs/NNN-slug/spec.md` - Feature specification
- Codebase context (existing patterns, utilities, components)
- Design inspirations (if HAS_UI=true)

**Outputs**:
- `specs/NNN-slug/plan.md` - Detailed implementation plan
- `specs/NNN-slug/research.md` - Research findings and decisions
- Updated `workflow-state.yaml`

**Expected duration**: 15-25 minutes

---

## Prerequisites

**Environment checks**:
- [ ] Spec phase completed (`spec.md` exists)
- [ ] Clarifications resolved (if any existed)
- [ ] Git working tree clean
- [ ] Feature branch active

**Knowledge requirements**:
- Research depth guidelines (3-5 tools for simple, 8-12 for complex)
- Code reuse detection strategies
- Design pattern catalog
- Architecture decision records (ADRs)

---

## Execution Steps

### Step 1: Analyze Specification

**Actions**:
1. Read `spec.md` to understand:
   - Feature requirements and scope
   - Classification flags (HAS_UI, IS_IMPROVEMENT, etc.)
   - Success criteria and constraints
   - Assumptions made during spec phase
2. Identify planning complexity level:
   - **Simple**: Single component, no dependencies (3-5 research tools)
   - **Standard**: Multiple components, some dependencies (5-8 tools)
   - **Complex**: Multi-layer architecture, many dependencies (8-12 tools)

**Quality check**: Do you understand what needs to be built and why?

---

### Step 2: Research Existing Patterns (Code Reuse)

**Actions**:
1. **Search for similar features**:
   ```bash
   # Find similar specs
   grep -r "similar keywords" specs/*/spec.md

   # Find similar implementations
   grep -r "relevant patterns" src/
   ```

2. **Identify reusable components**:
   - Base classes and abstract classes
   - Utility functions and helpers
   - Shared components (if HAS_UI=true)
   - API contracts and interfaces
   - Database models and migrations

3. **Document reuse strategy**:
   ```markdown
   ## Reuse Strategy

   **Existing patterns to leverage**:
   - BaseModel class (api/app/models/base.py) - timestamps, soft delete
   - StandardController (api/app/controllers/base.py) - CRUD operations
   - ValidationMixin (api/app/utils/validation.py) - input validation

   **New patterns to create**:
   - StudentProgressCalculator - reusable across dashboard + reports
   ```

**Quality check**: Have you identified at least 3 reusable patterns for standard/complex features?

---

### Step 3: Research Technology Choices

**Actions**:
1. **For backend features**:
   - Database schema requirements
   - API endpoint patterns
   - Authentication/authorization needs
   - Background job requirements
   - Caching strategies

2. **For UI features**:
   - Component library patterns
   - State management approach
   - Form handling patterns
   - Responsive design requirements
   - Accessibility considerations

3. **For infrastructure features**:
   - Deployment configuration
   - Environment variables
   - Migration scripts
   - Health check endpoints

**Quality check**: Are technology choices consistent with existing codebase patterns?

---

### Step 4: Design Architecture

**Actions**:
1. **Define layers and components**:
   - Data layer (models, schemas)
   - Business logic layer (services, utilities)
   - API layer (endpoints, controllers)
   - UI layer (components, pages) - if HAS_UI=true
   - Integration layer (external APIs, webhooks)

2. **Map dependencies**:
   - Component A depends on Component B
   - Service X requires Database Y
   - Frontend calls API Z

3. **Document architecture decisions**:
   ```markdown
   ## Architecture

   **Components**:
   1. StudentProgressService (business logic)
      - Depends on: Student model, Lesson model, TimeLog model
      - Provides: calculateProgress(), getRecentActivity()

   2. StudentProgressController (API layer)
      - Depends on: StudentProgressService
      - Exposes: GET /api/v1/students/{id}/progress

   3. ProgressDashboard (UI component) - if HAS_UI=true
      - Depends on: StudentProgressController API
      - Displays: Chart, metrics, activity list
   ```

**Quality check**: Can each component be implemented and tested independently?

---

### Step 5: Plan Data Model Changes

**Actions**:
1. **Identify database changes**:
   - New tables/collections needed
   - Schema modifications to existing tables
   - Indexes required for performance
   - Foreign key relationships

2. **Document migration strategy**:
   ```markdown
   ## Database Changes

   **New tables**:
   - `time_logs` (id, student_id, lesson_id, time_spent, created_at)
     - Index on (student_id, lesson_id) for fast lookups
     - Foreign keys to students and lessons tables

   **Schema modifications**:
   - Add `last_activity` column to students table (timestamp, nullable)
   ```

3. **Plan migration safety**:
   - Backward compatibility considerations
   - Rollback strategy
   - Data migration scripts (if needed)

**Quality check**: Are migrations safe to run in production without downtime?

---

### Step 6: Define API Contracts

**Actions**:
1. **Specify endpoints** (for backend/fullstack features):
   ```markdown
   ## API Endpoints

   ### GET /api/v1/students/{id}/progress

   **Request**:
   - Path params: `id` (integer, required)
   - Query params: `period` (string, optional: 7d|30d|90d, default: 30d)

   **Response** (200):
   ```json
   {
     "student_id": 123,
     "completion_rate": 0.75,
     "time_spent": 14400,
     "last_activity": "2025-10-15T14:30:00Z",
     "lessons_completed": 45,
     "lessons_total": 60
   }
   ```

   **Error responses**:
   - 404: Student not found
   - 403: Unauthorized access
   ```

2. **Document request/response schemas**
3. **Specify validation rules**

**Quality check**: Are API contracts versioned and backward compatible?

---

### Step 7: Plan UI/UX Flow (if HAS_UI=true)

**Actions**:
1. **Define screen flow**:
   ```markdown
   ## Screen Flow

   1. Dashboard (/) → Click "View Progress" → Progress Detail Page
   2. Progress Detail → Filter by date range → Updated chart
   3. Progress Detail → Click lesson → Lesson detail modal
   ```

2. **Identify components**:
   - Page components (routes)
   - Feature components (major UI blocks)
   - Shared components (buttons, forms, charts)

3. **Plan state management**:
   - Local component state vs global state
   - API data caching strategy
   - Form state handling

**Quality check**: Is the UI flow clear and matches user expectations?

---

### Step 8: Define Testing Strategy

**Actions**:
1. **Unit tests**:
   - Test business logic in isolation
   - Mock external dependencies
   - Target: ≥80% coverage for business logic

2. **Integration tests**:
   - Test API endpoints with database
   - Test component interactions
   - Target: All critical paths covered

3. **End-to-end tests** (if HAS_UI=true):
   - Test complete user flows
   - Target: Top 3 user journeys covered

**Example**:
```markdown
## Testing Strategy

**Unit tests**:
- StudentProgressService.calculateProgress() - 5 test cases
- StudentProgressService.getRecentActivity() - 3 test cases

**Integration tests**:
- GET /api/v1/students/{id}/progress - 4 scenarios (success, not found, unauthorized, invalid period)

**E2E tests**:
- User views progress dashboard and filters by date range
```

**Quality check**: Are all success criteria from spec.md testable?

---

### Step 9: Estimate Complexity and Task Count

**Actions**:
1. Count anticipated tasks based on components:
   - Data layer tasks (models, migrations)
   - API layer tasks (endpoints, validation)
   - UI layer tasks (components, pages)
   - Testing tasks (unit, integration, e2e)

2. Estimate total effort:
   - Simple features: 10-15 tasks (2-3 days)
   - Standard features: 20-30 tasks (3-5 days)
   - Complex features: 30-50 tasks (5-10 days)

**Example**:
```markdown
## Complexity Estimate

**Task breakdown preview**:
- Data layer: 3 tasks (models + migrations)
- API layer: 5 tasks (endpoints + validation)
- UI layer: 8 tasks (components + pages)
- Testing: 6 tasks (unit + integration + e2e)
- Total: ~22 tasks (estimated 4-5 days)
```

**Quality check**: Does estimate align with spec complexity and deadline?

---

### Step 10: Document Research Findings

**Actions**:
1. Create `research.md` with:
   - Patterns discovered in codebase
   - Technology choices and rationale
   - Design patterns selected
   - Performance considerations
   - Security considerations
   - Accessibility considerations (if HAS_UI=true)

2. Document ADRs (Architecture Decision Records) for major choices:
   ```markdown
   ## ADR: Use Server-Side Pagination

   **Context**: Dashboard may show thousands of lessons per student
   **Decision**: Implement server-side pagination with page size of 20
   **Rationale**: Client-side pagination would degrade performance for large datasets
   **Consequences**: Requires pagination UI component, cursor-based pagination in API
   ```

**Quality check**: Are all major architectural decisions documented with rationale?

---

### Step 11: Write Implementation Plan

**Actions**:
1. Render `plan.md` from template with:
   - Architecture overview
   - Component breakdown
   - Data model changes
   - API contracts
   - UI/UX flow (if HAS_UI=true)
   - Reuse strategy
   - Testing strategy
   - Complexity estimate

2. Organize plan sections logically:
   - Overview
   - Reuse Strategy
   - Architecture
   - Data Model
   - API Contracts
   - UI Components (if applicable)
   - Testing Strategy
   - Implementation Notes

**Quality check**: Can another developer implement the feature from this plan alone?

---

### Step 12: Validate and Commit

**Actions**:
1. Run validation checks:
   - [ ] Reuse strategy documented (≥3 patterns for standard features)
   - [ ] Architecture components clearly defined
   - [ ] API contracts specified (if backend feature)
   - [ ] UI flow mapped (if HAS_UI=true)
   - [ ] Testing strategy defined
   - [ ] Research depth appropriate (3-12 tools used)

2. Commit plan:
   ```bash
   git add specs/NNN-slug/plan.md specs/NNN-slug/research.md
   git commit -m "feat: add implementation plan for <feature-name>

   Plan includes:
   - Reuse strategy (X existing patterns leveraged)
   - Architecture (Y components defined)
   - Testing strategy (Z test categories)

   Research depth: N tools used
   Estimated tasks: M tasks (~P days)
   ```

**Quality check**: Plan committed, workflow-state.yaml updated to planning phase completed.

---

## Common Mistakes to Avoid

### 🚫 Missing Code Reuse Opportunities

**Impact**: Duplicate code, technical debt, wasted implementation time

**Scenario**:
```
Feature: "Add student progress calculation"
Plan: Writes new calculateCompletion() function
Existing: Similar calculateProgress() already exists in 3 other features
Result: 4th duplicate implementation instead of extracting to shared utility
```

**Prevention**:
1. Search codebase for similar patterns before designing
2. Identify base classes, utilities, patterns to reuse
3. Document reuse strategy in plan.md with specific file references
4. Target: ≥60% code reuse rate for standard features

**If encountered**: Extract common logic to utility module, refactor existing code to use it

---

### 🚫 Insufficient Research Depth

**Impact**: Implementation surprises, rework, missed integration points

**Scenario**:
```
Feature: Complex multi-layer dashboard
Research tools used: 2 (constitution check, quick grep)
Result: Missed existing dashboard component, authentication patterns, state management
Result: Rework during implementation, wasted 2 days
```

**Prevention**:
- **Simple features**: 3-5 research tools (constitution, pattern search, similar specs)
- **Standard features**: 5-8 tools (+ UI inventory, performance budgets, integration points)
- **Complex features**: 8-12 tools (+ design inspirations, web search, deep dives)

**Quality check**: Does research depth match feature complexity?

---

### 🚫 Vague Architecture Descriptions

**Impact**: Unclear implementation boundaries, component confusion

**Bad example**:
```markdown
## Architecture
- Frontend calls backend
- Backend queries database
- Returns data to frontend
```

**Good example**:
```markdown
## Architecture

**Components**:
1. **ProgressDashboard** (frontend: src/pages/ProgressDashboard.tsx)
   - Depends on: GET /api/v1/students/{id}/progress
   - State: progressData (from API), dateFilter (local)
   - Renders: ProgressChart, MetricsSummary, ActivityList

2. **StudentProgressController** (backend: api/app/controllers/student_progress.py)
   - Depends on: StudentProgressService
   - Exposes: GET /api/v1/students/{id}/progress
   - Validates: student_id (int), period (enum)

3. **StudentProgressService** (backend: api/app/services/student_progress.py)
   - Depends on: Student, Lesson, TimeLog models
   - Business logic: calculateCompletion(), getRecentActivity()
```

**Prevention**: Specify file paths, dependencies, and responsibilities for each component

---

### 🚫 Missing API Contract Details

**Impact**: Frontend-backend integration issues, rework, confusion

**Bad example**:
```markdown
## API Endpoints
- GET /api/students/progress - returns student progress
```

**Good example**:
```markdown
## API Endpoints

### GET /api/v1/students/{id}/progress

**Request**:
- Path: `id` (integer, required) - Student ID
- Query: `period` (string, optional: 7d|30d|90d, default: 30d)
- Headers: `Authorization: Bearer <token>` (required)

**Response** (200):
```json
{
  "student_id": 123,
  "completion_rate": 0.75,
  "time_spent": 14400,
  "last_activity": "2025-10-15T14:30:00Z"
}
```

**Error responses**:
- 400: Invalid period value
- 403: Unauthorized (not student's teacher)
- 404: Student not found
```

**Prevention**: Document request/response schemas, validation rules, error cases

---

### 🚫 No Testing Strategy

**Impact**: Unclear test coverage expectations, missed test cases

**Prevention**: Define unit/integration/e2e test strategy upfront
- Specify what to test (business logic, API endpoints, UI flows)
- Define coverage targets (≥80% for business logic)
- List critical test scenarios

---

### 🚫 Technology Stack Inconsistencies

**Impact**: Mixed patterns, maintenance burden, team confusion

**Scenario**:
```
Existing: Uses Redux for state management
Plan: Suggests using Context API for new feature
Result: Two state management approaches in same codebase
```

**Prevention**:
1. Research existing technology choices
2. Maintain consistency unless there's strong rationale for change
3. Document ADR if introducing new technology
4. Get team approval for architecture changes

---

## Best Practices

### ✅ Reuse Strategy Documentation

**Approach**:
1. List existing patterns to leverage (with file paths)
2. List new reusable patterns to create
3. Specify how to extract common logic

**Example**:
```markdown
## Reuse Strategy

**Existing patterns to leverage**:
- BaseModel (api/app/models/base.py) - provides id, timestamps, soft_delete
- StandardCRUD (api/app/controllers/base.py) - provides create(), read(), update(), delete()
- useApiData hook (src/hooks/useApiData.ts) - provides data fetching + caching

**New reusable patterns**:
- ProgressCalculator (api/app/utils/progress.py) - reusable across dashboard + reports + exports
- ProgressChart component (src/components/charts/ProgressChart.tsx) - reusable in multiple dashboards
```

**Result**: 60%+ code reuse, faster implementation, consistent patterns

---

### ✅ Research Depth Matrix

**Use case-based research depth**:

| Feature Complexity | Research Tools | What to Research |
|-------------------|---------------|------------------|
| **Simple** (3-5 tools) | Constitution, Pattern search, Similar specs | Alignment, existing patterns, constraints |
| **Standard** (5-8 tools) | + UI inventory, Performance budgets, Integration points | Component reuse, perf targets, dependencies |
| **Complex** (8-12 tools) | + Design inspirations, Web search, Deep integration analysis | Novel patterns, best practices, architecture |

**Quality check**: Tool count matches feature complexity from spec classification

---

### ✅ Architecture Decision Records (ADRs)

**When to create ADR**:
- Choosing between multiple valid approaches
- Introducing new technology or pattern
- Deviating from existing conventions
- Making performance vs simplicity tradeoffs

**ADR format**:
```markdown
## ADR-001: Use Server-Side Pagination

**Context**: Dashboard may display 1000+ lessons per student

**Options considered**:
1. Client-side pagination (simple, but slow for large datasets)
2. Server-side pagination (complex, but performant)
3. Infinite scroll (good UX, but complex state management)

**Decision**: Server-side pagination with page size of 20

**Rationale**:
- Performance: Client-side would load 1000+ records unnecessarily
- Simplicity: More straightforward than infinite scroll
- Consistency: Matches existing patterns in admin dashboard

**Consequences**:
- Requires pagination UI component
- Requires cursor-based pagination in API
- Adds complexity to API endpoint
```

**Result**: Documented rationale, team alignment, future reference

---

## Phase Checklist

**Pre-phase checks**:
- [ ] Spec phase completed (`spec.md` exists)
- [ ] Clarifications resolved (if any)
- [ ] Git working tree clean
- [ ] Feature branch active

**During phase**:
- [ ] Research depth matches complexity (3-12 tools)
- [ ] Code reuse opportunities identified (≥3 for standard features)
- [ ] Architecture components clearly defined
- [ ] Dependencies mapped
- [ ] API contracts specified (if backend feature)
- [ ] UI flow mapped (if HAS_UI=true)
- [ ] Testing strategy defined
- [ ] ADRs created for major decisions

**Post-phase validation**:
- [ ] `plan.md` created with all sections
- [ ] `research.md` created with findings
- [ ] Reuse strategy documented
- [ ] Complexity estimate provided
- [ ] Plan committed to git
- [ ] workflow-state.yaml updated

---

## Quality Standards

**Planning quality targets**:
- Code reuse rate: ≥60%
- Research depth: 3-12 tools (based on complexity)
- Plan completeness: ≥90%
- Component clarity: All components have file paths + dependencies
- API contract completeness: 100% for backend features

**What makes a good plan**:
- High code reuse (leverages existing patterns)
- Clear component boundaries (file paths, dependencies, responsibilities)
- Complete API contracts (request/response schemas, validation, errors)
- Comprehensive testing strategy (unit + integration + e2e)
- Documented architecture decisions (ADRs for major choices)
- Realistic complexity estimate

**What makes a bad plan**:
- Reinventing wheels (missing reuse opportunities)
- Vague architecture ("frontend calls backend")
- Missing API details (no schemas, no error cases)
- No testing strategy
- Undocumented decisions (no rationale for choices)

---

## Completion Criteria

**Phase is complete when**:
- [ ] All pre-phase checks passed
- [ ] All execution steps completed
- [ ] All post-phase validations passed
- [ ] Plan committed to git
- [ ] workflow-state.ya