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/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:
Or from the hoen-library repo root:
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
- Percent โ
percent_completeas the## ๐heading (effort-based) - Effort โ
completed/totalpoints (includes partialin_progresswork) - Steps โ
by_status.doneofcount(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):
## ๐ {percent}% completeโ from--markdown-top- Effort ยท steps ยท remaining lines
- Anchor link:
[Effort breakdown โ](#effort-breakdown)ยท*.effort.jsonยท scale watermark
Then: Overview, Why now, plan body, risks, open questions.
Bottom (near end of doc):
## Effort breakdownโ from--markdown-breakdown- One-line watermark to skill +
references/scale.md(no scale table) - Per-phase step tables โ Step | Effort | Done | Left | Progress | Notes
- Phase rollup table โ effort from
groups[](not summed from steps)
Examples:
- ๐ top: assets/auth-migration.top.md
- Breakdown bottom: assets/auth-migration.summary.md
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_progresssteps with meaningful partial completion, seteffort_remaining. - [ ] Add or update
groupsrollups sized independently. - [ ] Write/update
*.effort.jsonbeside 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¶
- WIP plan layout (๐ top summary)
- Effort scales taxonomy (router)
- Plan status crosswalk
- AI-assisted Fibonacci scale
- JSON input format
- Example: auth migration effort JSON
- Example: auth migration ๐ top
- Example: auth migration breakdown (bottom)
- Related: plan-work, remediation-plan
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 |