Skip to content

Plan Effort Estimate

When to use: Active WIP plan execution under AI-assisted delivery โ€” assign Fibonacci points per step, record progress, and let the bundled script compute totals and remaining effort. For wall-clock planning (gap analysis, remediation drafts, sprint capacity), use the wall-clock T-shirt scale instead โ€” see effort-scales.yaml.

Instructions

1) Use the AI-assisted Fibonacci scale

Size each step using references/scale.md. Standard range 1 โ†’ 8; reserve 13 for epics (~two 8s or more).

The agent assigns one Fibonacci value per step and one per phase/plan rollup. Rollups are sized by judgement โ€” they are not sums of child steps.

When converting from a remediation plan (Trivial / Small / Medium / Large), use the indicative mapping in effort-scales.yaml as a starting point, then re-size for AI-assisted delivery context.

2) Never mental-arithmetic totals

Do not sum points, compute percentages, or derive remaining effort in prose. Always run the deterministic script after updating the effort JSON.

node library/skills/plan-effort-estimate/scripts/validate-effort.mjs \
  --input path/to/plan.effort.json

Scan every effort file under a docs tree (for CI in consuming repos):

node library/skills/plan-effort-estimate/scripts/validate-effort.mjs \
  --scan path/to/docs
node library/skills/plan-effort-estimate/scripts/summarize-effort.mjs \
  --input path/to/plan.effort.json --pretty

For a paste-ready markdown block with Done and Left columns per step (including partial in_progress work), use the ๐Ÿ‘€ layout outputs:

# ๐Ÿ‘€ Top of plan (after title / metadata)
node library/skills/plan-effort-estimate/scripts/summarize-effort.mjs \
  --input path/to/plan.effort.json --markdown-top

# Bottom of plan (after risks / next actions)
node library/skills/plan-effort-estimate/scripts/summarize-effort.mjs \
  --input path/to/plan.effort.json --markdown-breakdown

Legacy combined block (--markdown) remains for one-shot paste but prefer the split layout. --markdown-bluf is a deprecated alias for --markdown-top.

After changing calculation logic, run the self-test:

node library/skills/plan-effort-estimate/scripts/self-test.mjs

Or from the hoen-library repo root:

npm run test:plan-effort-estimate

Copy rollup fields from the script output into the plan markdown. The ๐Ÿ‘€ headline reads:

๐Ÿ‘€ 26.6% complete

21 / 79 effort points ยท 4 / 14 steps ยท 58 remaining

  1. Percent โ€” percent_complete as the ## ๐Ÿ‘€ heading (effort-based)
  2. Effort โ€” completed / total points (includes partial in_progress work)
  3. Steps โ€” by_status.done of count (fully complete steps only)

Link to the breakdown: [Effort breakdown โ†“](#effort-breakdown).

Semi-completed steps: for in_progress items, Done = effort - effort_remaining and Left = effort_remaining. If effort_remaining is omitted, the step counts as 0 done and full effort left until marked done. Example: A.5 at effort 5 with effort_remaining: 1 โ†’ 4 done ยท 1 left.

3) Write effort data as JSON

Follow references/input-format.md. Store the file next to the plan doc, e.g. docs/wip/auth-migration.effort.json.

Agent responsibility Script responsibility
Fibonacci effort per step/rollup Sum total
status per item (done, in_progress, not_started, blocked) Sum completed and remaining
Optional effort_remaining on in_progress steps percent_complete, by_status.done / count
label, notes, narrative context Validation (Fibonacci values, status enums)

Status values follow plan-status.yaml (JSON column).

4) ๐Ÿ‘€ plan layout โ€” split top and bottom

Follow references/plan-layout.md. Do not repeat the Fibonacci scale table in the plan โ€” watermark to this skill instead.

๐Ÿ‘€ Top (after title / metadata):

  1. ## ๐Ÿ‘€ {percent}% complete โ€” from --markdown-top
  2. Effort ยท steps ยท remaining lines
  3. Anchor link: [Effort breakdown โ†“](#effort-breakdown) ยท *.effort.json ยท scale watermark

Then: Overview, Why now, plan body, risks, open questions.

Bottom (near end of doc):

  1. ## Effort breakdown โ€” from --markdown-breakdown
  2. One-line watermark to skill + references/scale.md (no scale table)
  3. Per-phase step tables โ€” Step | Effort | Done | Left | Progress | Notes
  4. Phase rollup table โ€” effort from groups[] (not summed from steps)

Examples:

Progress column values: use markdown labels from plan-status.yaml.

5) Workflow checklist

  • [ ] Read the plan and list leaf steps with stable ids (A.1, B.2, โ€ฆ).
  • [ ] Assign Fibonacci effort per step using the scale.
  • [ ] Set status from repo evidence (do not guess done).
  • [ ] For in_progress steps with meaningful partial completion, set effort_remaining.
  • [ ] Add or update groups rollups sized independently.
  • [ ] Write/update *.effort.json beside the plan.
  • [ ] Run summarize-effort.mjs --markdown-top โ†’ paste at top
  • [ ] Run summarize-effort.mjs --markdown-breakdown โ†’ paste at bottom
  • [ ] Apply task description rules from remediation-plan task sizing when writing labels.

6) Example

See assets/auth-migration.effort.json โ€” sourced from hoen-assessment auth migration sizing.

node library/skills/plan-effort-estimate/scripts/summarize-effort.mjs \
  --input library/skills/plan-effort-estimate/assets/auth-migration.effort.json \
  --markdown-top

node library/skills/plan-effort-estimate/scripts/summarize-effort.mjs \
  --input library/skills/plan-effort-estimate/assets/auth-migration.effort.json \
  --markdown-breakdown

Rendered examples: assets/auth-migration.top.md (๐Ÿ‘€ top), assets/auth-migration.summary.md (bottom).


References


Troubleshooting

Symptom Likely cause Fix
Script rejects effort value Non-Fibonacci number used Use only 1, 2, 3, 5, 8, or 13
effort_remaining error Value exceeds effort or not Fibonacci Set remaining โ‰ค effort; both must be Fibonacci
Step totals disagree with phase rollup Rollups are independent by design Keep both; rollups reflect epic judgement, steps reflect granular work
percent_complete seems low in_progress without effort_remaining Add effort_remaining when partial work is done, or mark substeps done
Agent summed points in markdown Skipped the script Re-run summarize-effort.mjs and replace hand-calculated numbers
CI needs to gate effort JSON No validate step wired Run validate-effort.mjs --scan docs in consuming repos