task-breakdown
Skill · v1.0.0 · MIT

task-breakdown

Break a feature or spec into small, atomic, independently verifiable tasks with explicit ordering and dependencies. Use when the user asks to plan implementation, create a task list, estimate work, or when a spec is ready and needs to become an executable plan.

elyra › /skills install task-breakdown

Turn a spec into a sequence of tasks where every task leaves the codebase working and every task can be verified on its own.

When to use

  • "Plan how to build…" / "Break this down"
  • A spec exists and implementation is about to start
  • A task feels too big to start ("where do I even begin?")
  • Estimating or splitting work across people/sessions

Principles

  • Atomic. One task = one concern = one commit. If the description contains "and", split it.
  • Vertical over horizontal. Prefer "one working slice through all layers" over "all models, then all services, then all UI".
  • Always shippable. After every task, tests pass and the app runs. No task ends mid-air.
  • Verification is part of the task. A task without a "done when" is a wish.

Process

1. Read before planning

  • Read the spec (or write one first — see spec-writing)
  • Read the code the plan will touch; note existing patterns to follow
  • Identify the riskiest unknown — it goes first, not last

2. Slice vertically

Find the thinnest end-to-end slice that proves the approach works (walking skeleton), then widen:

Task 1: skeleton  — one happy-path case wired through all layers
Task 2..n: widen  — more cases, validation, edge cases, polish

3. Size each task

A task should be 15–60 minutes of focused work. Bigger → split. Smaller → merge with its neighbor.

4. Order by dependency and risk

  • Mark hard dependencies explicitly (depends on: T2)
  • Risky/unknown tasks early; mechanical tasks late
  • Tasks with no dependency between them are marked parallelizable

5. Define "done when" per task

Each task gets a concrete verification: a test that passes, a command that succeeds, a behavior observable in the running app.

Output format

# Plan: <feature>

**Spec:** <link/path>
**Riskiest unknown:** <what, and which task resolves it>

| # | Task | Done when | Depends on |
|---|------|-----------|------------|
| 1 | …    | …         | —          |
| 2 | …    | …         | 1          |

**Parallelizable:** T3 + T4
**Out of plan:** <things deliberately not tasks, with reason>

Anti-patterns

  • ❌ Layer-by-layer plans ("first all migrations, then all models…") — nothing is verifiable until the end
  • ❌ Tasks named after files ("update UserController") instead of outcomes ("reject duplicate emails on signup")
  • ❌ A final task called "testing" — tests belong inside every task
  • ❌ Hiding the risky part in task 9 of 10
  • ❌ Plans with no "done when" — they decay into vibes
  • ❌ Re-planning the whole thing mid-build instead of amending the plan explicitly