Effort estimation for BA Toolkit User Stories. Use on /estimate command, or when the user asks to "estimate stories", "add story points", "size the backlog", "estimate effort", "T-shirt sizing", "planning poker". Can target all stories or a specific epic/story. Run after /stories or /ac for best accuracy.
Utility skill. Analyses User Stories, assigns effort estimates using the chosen scale, and produces an estimation table with rationale. Can update the stories artifact in-place or output a standalone estimation report.
/estimate [optional: scale] [optional: scope]
Examples:
/estimate — estimate all stories using Fibonacci Story Points (default)/estimate t-shirt — use T-shirt sizes (XS / S / M / L / XL)/estimate days — estimate in ideal person-days/estimate E-01 — estimate only Epic E-01/estimate US-007 — re-estimate a single story00_principles_*.md exists in the output directory, load it and apply any estimation conventions defined in section 8 (Additional Conventions).03_stories_{slug}.md — primary input. Required.05_ac_{slug}.md if it exists — AC scenario count per story is a key complexity signal.02_srs_{slug}.md — to understand integration points and technical constraints.07a_research_{slug}.md if it exists — for ADR-driven complexity signals.Read references/environment.md from the ba-toolkit directory to determine the output directory.
Follow the Interview Protocol: ask one question at a time, present a 2-column
| ID | Variant |markdown table of up to 4 options plus a free-text "Other" row last (5 rows max), mark exactly one row (recommended), render variants in the user's language (rule 11), and wait for an answer.Inline context (protocol rule 9): if the user wrote text after
/estimate(e.g.,/estimate t-shirt, post-srs phase, +20% buffer), parse it and skip the matching questions.
Before estimating, ask the following (skip questions where the answer is already clear from context):
00_risks_*.md)? Recommended: +20% on Critical-linked stories, +10% on High-linked.If the user types /estimate without additional input and prior context is sufficient, proceed with defaults and state assumptions clearly.
For each User Story, assess the following complexity factors:
| Factor | Signal | Weight |
|---|---|---|
| Scope | Number of distinct user interactions described | Medium |
| AC count | More scenarios = higher complexity | Medium |
| Integration | External API calls, third-party services, webhooks | High |
| UI complexity | Multi-state screens, real-time updates, complex forms | Medium |
| Data complexity | New entities, complex relationships, migrations | Medium |
| Newness | Team has no prior experience with this area | High |
| Uncertainty | Requirements are unclear or flagged with open questions | High |
Apply the reference stories as anchors. If no references are given, calibrate internally: the simplest story in the set = 1 SP or XS.
Do not pad estimates — model what a reasonably skilled team would take, not a worst-case scenario.
This skill produces a single-estimator analytical pass. A senior BA running estimation in production would augment this with:
/estimate cannot do this — it must be run with the dev team after the analytical pass.Cone of Uncertainty. Boehm's classic principle: estimates made early in the lifecycle (post-Brief, post-Discovery) carry up to 4× variance from the eventual reality, narrowing to 1.25× by the time implementation is detailed. This skill always emits a confidence label based on the user-selected estimation phase (calibration question 5). A 5 SP estimate at the post-Brief phase is "5 SP ± 400%"; the same estimate at the post-Implementation-Plan phase is "5 SP ± 10%".
Single-point estimates without a confidence band are dangerous — they are misread as commitments. Every estimate produced by this skill carries an explicit confidence band tied to the Cone of Uncertainty.
Slug: read the **Slug:** line from the managed block of AGENTS.md (project root, or ../AGENTS.md if cwd is output/) and use it verbatim. See ../references/slug-source.md.
03_stories_{slug}.md in-placeAdd a **Estimate:** field to each US block and append the Estimation Summary table at the end of the file.
03_stories_estimates_{slug}.mdStandalone estimation report with the full table.
## Estimation Summary — [PROJECT_NAME]
Scale: [Story Points / T-shirt / Days]
Estimation phase: [Discovery / Brief / SRS / AC / Wireframes / Implementation Plan]
Confidence band: [±400% / ±100% / ±50% / ±25% / ±10%]
Confidence label: [Order of magnitude / ROM / Budget / Definitive / Control]
| US | Title | Epic | Estimate | Confidence | Key drivers |
|----|-------|------|----------|------------|-------------|
| US-001 | [Title] | E-01 | 3 SP ± 25% | Definitive | 2 AC scenarios, simple UI |
| US-002 | [Title] | E-01 | 8 SP ± 25% | Definitive | external payment API, 4 AC scenarios |
| US-003 | [Title] | E-02 | 13 SP ± 50% | Budget | new domain area, complex state machine, RISK-02 +20% |
...
| Metric | Value |
|--------|-------|
| Total stories estimated | [N] |
| Total Story Points (point estimate) | [N] SP |
| Total with confidence band | [N – N] SP ([low] – [high]) |
| Largest story | US-[NNN] ([N] SP) — [reason] |
| Stories ≥ 13 SP (consider splitting) | [N]: US-[NNN], … |
| Average per story | [N] SP |
| Risk-adjusted total (high-risk +20%) | [N] SP |
| Tech debt reservation ([N]%) | [N] SP |
| **Net feature capacity** | [N] SP |
⚠️ Single-estimator caveat. This is an analytical estimation pass by a single estimator. For a real team commitment, run planning poker with the dev team using these numbers as the starting anchor and re-vote on any item where the team's estimate differs by more than one Fibonacci step.
For any story estimated at 13 SP or higher (or XL), suggest a concrete split:
⚠️ US-[NNN] ([N] SP) is large. Consider splitting:
→ US-[NNN]a: [sub-story suggestion]
→ US-[NNN]b: [sub-story suggestion]
Run /split US-[NNN] to perform the split.
After saving, present the following summary (see references/closing-message.md for format):
Available commands: /estimate [US-NNN] (re-estimate a story) · /split [US-NNN] (split a large story) · /analyze · /done
Be explicit about the rationale for each estimate. Use concise bullet drivers, not paragraphs. Generate output in the language of the artifact — see references/language-rule.md for what to translate and what stays in English.