Skip to content

Work-item model

Every piece of work on Plane follows one four-level tree. Learn the tree and anyone knows where to log work - and completion is computed by machine, not eyeballed.

The four levels

LevelWhat it isCompanion docCycle?
EPICone module1 URDno
FEATa capability area of the URD (one or more related URD areas)lives inside the URDno
PRDone feature1 PRD file in the wikirequired
Taskexecution: DES / BE / FE / QAcode · design · ADRyes (while open)
EPIC (module)  ── 1 URD
  └ FEAT (capability area, one or more URD areas)   one EPIC has many FEATs
      └ PRD  ── 1 wiki file, has a code  one FEAT has many PRDs
          ├ DES
          ├ BE
          ├ FE
          └ QA                          DES/BE/FE/QA are children of the PRD

Hard rules:

  • 1 EPIC = 1 URD. 1 PRD = 1 work item = 1 PRD file in the wiki (one-to-one).
  • Every task must be a child of a PRD. No orphan tasks. If you don't yet know which PRD it belongs to, attach it to Intake.

Feature codes

A PRD code is always module-qualified: inventory/TKT, finance/LDG, helpdesk/TKT. The same code can exist in two different modules, so a bare PRD-LDG-001 is ambiguous.

States

A PRD item moves through three milestones:

StateMeaning
000_DRAFTwriting the spec
203_READY_TO_DEVELOPspec locked, dev may start - the PRD stays here while its child tasks run
300_DONEall child tasks done = feature delivered

Child tasks (DES/BE/FE/QA): each runs its own pipeline and lands at 300_DONE when its own work is done:

200_IN_PROGRESS → 205_READY_TO_DEPLOY → 210_READY_TO_TEST → 300_DONE

Note: 203_READY_TO_DEVELOP is not "done" - it only opens the gate for dev. The finish line is always 300_DONE.

When a level is "done"

Bottom-up:

LevelDone when
Taskits own definition of done → 300_DONE
PRDevery applicable child task (DES/BE/FE/QA) is 300_DONE
FEATevery PRD under it is done
EPICevery FEAT is done

Completion (%) in the sprint review

The report is not a single number - it's a nested table, one % per EPIC / FEAT / PRD:

  • % is computed by task count, recursively bottom-up (done tasks / total tasks, excluding cancelled from the denominator).
  • Do not use Plane's native progress bar (it only counts direct children, not a deep task rollup).
  • Intake is excluded from % - it is a container, it has no "done".
EPIC Sale        62%
 ├ FEAT Kitchen tickets  40%
 │   ├ PRD POS & kitchen  75%  (3/4 tasks)
 │   └ PRD Kitchen station 0%  (0/3 tasks)
 └ ...

Cycles & sprints

  • A PRD must have a cycle; its open child tasks also go in the current cycle (so the burndown is granular and shows a %).
  • EPIC and FEAT carry no cycle - they span many sprints.
  • EPIC / FEAT / PRD always have a start_date; target_date is left empty or set far out.
  • Closing a sprint: transfer the incomplete PRDs + open tasks to the next cycle. This is a weekly ritual with an owner.

Intake

[PRD/ops] Intake is the shared holding bucket for any task that has no matching PRD yet. When you don't know where to log something, attach it here - never leave a task orphaned.

Intake is staging, not a home:

  • Triage it weekly: whatever belongs to a feature, move it to the right PRD.
  • Keep only genuinely small or recurring work that belongs to no feature (small bug fixes, config tweaks, cross-module chores).
  • A task lingering in Intake is a signal that a PRD is missing - consider creating one.

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.