task-decomposer
Task Decomposer
Transforms ambiguous feature requests into concrete, implementable task sequences: identifies acceptance criteria, decomposes into phased work items with effort sizing, maps dependencies and parallelization, enumerates edge cases, plans testing, and flags risks — producing a ready-to-execute task board.
When to use this skill vs native decomposition: The base model decomposes features well in an ad-hoc format. Use this skill specifically when you need the structured output: phased task tables with dependency mapping, parallelization flags, risk flags, and integrated test strategy. If you just need a quick list of steps, ask directly without invoking this skill.
Reference Files
| File | Contents | Load When |
|---|---|---|
references/decomposition-patterns.md |
Feature → task decomposition strategies, granularity guidelines | Always |
references/edge-case-checklist.md |
Common edge case categories by domain (web, API, data, CLI) | Edge case identification needed |
references/dependency-mapping.md |
Dependency graph construction, critical path identification | Multi-task breakdown |
references/sizing-guide.md |
Effort estimation guidance (S/M/L), complexity indicators | Effort sizing needed |
Prerequisites
- Feature description or requirements (can be vague — the skill handles ambiguity)
- Project context (tech stack, existing architecture, team size)
Workflow
Phase 1: Understand the Feature
- Extract the user-facing goal — What does this feature enable the user to do? If unclear, state assumptions explicitly.
- Define acceptance criteria — What must be true for this feature to be "done"? Express as testable statements: "User can X", "System does Y when Z."
- Identify non-functional requirements — Performance, security, accessibility, backwards compatibility constraints.
- Clarify scope boundaries — What is explicitly out of scope? State this to prevent scope creep during implementation.
Phase 2: Decompose into Tasks
Break the feature into tasks at the right granularity:
| Granularity | Size | Example |
|---|---|---|
| Too coarse | "Build the search feature" | Not actionable |
| Right level | "Add full-text search index to products table" | Single PR, testable |
| Too fine | "Import the search library" | Not independently meaningful |
Right granularity test: Each task should be completable in a single PR, testable in isolation, and deliverable independently (even if not user-visible alone).
Group tasks into phases:
| Phase | Purpose | Contains |
|---|---|---|
| Foundation | Data models, schemas, interfaces | Types, database tables, API contracts |
| Core logic | Business logic, algorithms | The actual feature implementation |
| Integration | Connecting components, API endpoints | Routes, controllers, wire-up |
| Polish | Edge cases, error handling, UX | Validation, error messages, loading states |
Phase 3: Identify Edge Cases
For each task, enumerate edge cases:
- Input boundaries — Empty, null, maximum size, special characters
- State transitions — Concurrent modification, interrupted operations
- Error conditions — Network failures, invalid data, permission denied
- Backwards compatibility — Existing data, existing API consumers
Phase 4: Plan Testing
For each task, identify what to test:
| Test Level | What to Test | Who Writes |
|---|---|---|
| Unit | Individual functions, pure logic | During implementation |
| Integration | Component interactions, API endpoints | After integration phase |
| Manual | User flows, visual correctness | After polish phase |
Phase 5: Map Dependencies
Identify which tasks depend on others:
- Hard dependencies — Task B requires Task A's output (database table must exist before writing queries)
- Soft dependencies — Task B benefits from Task A but could use a stub
- No dependency — Tasks can be done in parallel
Phase 6: Flag Risks
For each risk, identify mitigation:
| Risk Type | Example | Mitigation |
|---|---|---|
| Technical unknown | "Never used WebSockets before" | Spike/prototype first |
| External dependency | "Requires API access we don't have" | Request early, use mocks |
| Scope uncertainty | "Requirements may change" | Implement core first, defer edge cases |
| Performance risk | "May be slow with 1M rows" | Add benchmark task, define acceptable threshold |
Output Format
## Task Decomposition: {Feature Name}
### Feature Summary
{One paragraph describing what this feature does and why}
### Acceptance Criteria
- [ ] {Testable statement 1}
- [ ] {Testable statement 2}
- [ ] {Testable statement 3}
### Scope
- **In scope:** {what's included}
- **Out of scope:** {what's excluded}
### Task Breakdown
#### Phase 1: Foundation
| # | Task | Effort | Dependencies | Parallel |
|---|------|--------|--------------|----------|
| 1.1 | {task description} | {S/M/L} | None | Yes |
| 1.2 | {task description} | {S/M/L} | 1.1 | No |
#### Phase 2: Core Logic
| # | Task | Effort | Dependencies | Parallel |
|---|------|--------|--------------|----------|
| 2.1 | {task description} | {S/M/L} | 1.x | Yes |
| 2.2 | {task description} | {S/M/L} | 1.x | Yes |
#### Phase 3: Integration
| # | Task | Effort | Dependencies | Parallel |
|---|------|--------|--------------|----------|
| 3.1 | {task description} | {S/M/L} | 2.x | No |
#### Phase 4: Polish
| # | Task | Effort | Dependencies | Parallel |
|---|------|--------|--------------|----------|
| 4.1 | {task description} | {S/M/L} | 3.x | Yes |
### Edge Cases
| # | Edge Case | Handling | Phase |
|---|-----------|----------|-------|
| 1 | {edge case} | {how to handle} | {which phase} |
### Test Strategy
#### Unit Tests
- {Component}: {what to test}
#### Integration Tests
- {Flow}: {what to test}
#### Manual Verification
- {Scenario}: {what to check}
### Risk Flags
- {Risk}: {mitigation strategy}
Calibration Rules
- Right granularity. Each task should be 1-3 days of work. Larger → decompose further. Smaller → merge into a parent task.
- Testable acceptance criteria. "Make search work" is not testable. "Search returns relevant results within 200ms for queries up to 100 characters" is testable.
- Dependencies are sacred. If Task B truly depends on Task A, mark it. False dependencies slow teams down; missing dependencies cause integration failures.
- Edge cases are not optional. Every feature has edge cases. If the edge case list is empty, the analysis is incomplete.
- Parallel = velocity. Maximize parallel tasks. If 4 tasks can be done simultaneously, the phase takes the duration of the longest, not the sum.
Error Handling
| Problem | Resolution |
|---|---|
| Feature description is vague | State assumptions, decompose what's known, mark uncertain tasks with "pending clarification." |
| Feature is too large (20+ tasks) | Split into multiple features. A feature that takes months is a project, not a feature. |
| No clear acceptance criteria | Help the user define them: "What does done look like? What would you demo?" |
| Technical stack unknown | Decompose at the logical level (data model, business logic, API, UI) without implementation specifics. |
When NOT to Decompose
Push back if:
- The task is already atomic (single function, single file change) — just do it
- The user wants time estimates, not task breakdown — use estimate-calibrator instead
- The feature is exploratory (research, prototype) — decomposition assumes known scope