Estimate Calibrator
Replaces single-point guesses with structured three-point estimates: decomposes work
into atomic units, estimates best/likely/worst case for each, identifies unknowns and
assumptions, calculates aggregate ranges using PERT, and assigns confidence levels with
explicit rationale.
Reference Files
| File |
Contents |
Load When |
references/estimation-methods.md |
PERT formula, three-point estimation, Monte Carlo basics |
Always |
references/unknown-categories.md |
Technical, scope, external, and organizational uncertainty types |
Unknown identification |
references/calibration-tips.md |
Cognitive biases in estimation, historical calibration, buffer strategies |
Always |
references/sizing-heuristics.md |
Common task size patterns, complexity indicators, reference class data |
Quick sizing needed |
Prerequisites
- Work item description (feature, task, project)
- Decomposed tasks (or use task-decomposer skill first)
- Context: team familiarity, tech stack, existing codebase
Workflow
Phase 1: Decompose Work
If the work item is not already decomposed into atomic units:
- Break into tasks — Each task should be estimable independently.
- Right granularity — Tasks should be 1 hour to 3 days. Larger tasks have higher
uncertainty; break them down further.
- Identify dependencies — Tasks on the critical path determine the minimum duration.
Phase 2: Three-Point Estimate
For each task, estimate three scenarios:
| Scenario |
Definition |
Mindset |
| Best case |
Everything goes right. No surprises. |
"If I've done this exact thing before" |
| Likely case |
Normal friction. Some minor obstacles. |
"Realistic expectation with typical setbacks" |
| Worst case |
Significant problems. Not catastrophic. |
"Murphy's law but not a disaster" |
Key rule: Worst case is NOT "everything goes wrong." It's the realistic bad scenario
(90th percentile), not the apocalyptic one (99th percentile).
Phase 3: Identify Unknowns
Categorize unknowns that affect estimates:
| Category |
Example |
Impact |
| Technical |
"Never used this library before" |
Likely case inflated, worst case much higher |
| Scope |
"Requirements may change" |
All estimates may shift |
| External |
"Depends on API access from partner" |
Blocking risk — could delay entirely |
| Integration |
"Haven't tested with production data" |
Hidden complexity at integration |
| Organizational |
"Need design approval" |
Calendar time, not effort time |
Phase 4: Calculate Ranges
For individual tasks, use the PERT formula:
Expected = (Best + 4 × Likely + Worst) / 6
Std Dev = (Worst - Best) / 6
For aggregate (project) estimates:
- Sum of expected values for total expected duration
- Root sum of squares of std devs for aggregate uncertainty
Phase 5: Assign Confidence
| Confidence |
Meaning |
When |
| High |
Likely case within ±20% |
Well-understood task, team has done it before |
| Medium |
Likely case within ±50% |
Some unknowns, moderate familiarity |
| Low |
Likely case within ±100% or more |
Significant unknowns, new technology |
Output Format
## Estimate: {Work Item}
### Summary
| Scenario | Duration |
|----------|----------|
| Best case | {time} |
| Likely case | {time} |
| Worst case | {time} |
| **PERT expected** | **{time}** |
| **Confidence** | **{High/Medium/Low}** |
### Task-Level Estimates
| # | Task | Best | Likely | Worst | PERT | Unknowns |
|---|------|------|--------|-------|------|----------|
| 1 | {task} | {time} | {time} | {time} | {time} | {key unknown or "None"} |
| 2 | {task} | {time} | {time} | {time} | {time} | {key unknown} |
| | **Total** | **{sum}** | **{sum}** | **{sum}** | **{pert}** | |
### Key Unknowns
| # | Unknown | Category | Impact on Estimate | Mitigation |
|---|---------|----------|-------------------|------------|
| 1 | {unknown} | {Technical/Scope/External} | +{time} if realized | {spike, prototype, early test} |
### Assumptions
- {Assumption 1 — what must be true for this estimate to hold}
- {Assumption 2}
### Risk Factors
- {Risk}: If realized, adds {time}. Likelihood: {High/Medium/Low}.
### Confidence Rationale
**{High/Medium/Low}** because:
- {Specific reason — e.g., "Team has built 3 similar features"}
- {Specific reason — e.g., "External API is a new integration"}
### Recommendation
{Commit to PERT expected with {X}% buffer, or spike the top unknown first.}
Calibration Rules
- Three points, not one. Single-point estimates are always wrong. Three points
communicate uncertainty — the most important part of any estimate.
- Worst case is the 90th percentile, not the 99th. "Asteroid hits the office" is
not a useful worst case. "The API documentation is wrong and we need to reverse-engineer
the protocol" is realistic worst case.
- Unknowns inflate estimates more than known difficulty. A hard but well-understood
task is more predictable than an easy but novel one.
- Estimates are not commitments. Communicate ranges, not deadlines. If stakeholders
need a single number, give the PERT expected plus a buffer for confidence level.
- Spike unknowns early. If a single unknown dominates the estimate range, invest
1-2 days spiking it before estimating the rest.
Error Handling
| Problem |
Resolution |
| Work item not decomposed |
Decompose into 3-8 tasks first (or suggest task-decomposer skill). |
| No historical reference |
Estimate relative to a known task: "This is about 2x the auth feature." |
| Stakeholder wants a single number |
Provide PERT expected with buffer matching confidence level (High: +20%, Medium: +50%, Low: +100%). |
| Estimate seems too large |
Check for scope creep in task list. Remove non-essential tasks. Identify what can be deferred. |
| Team has never done this type of work |
Mark confidence as Low. Recommend a spike before committing to an estimate. |
When NOT to Estimate
Push back if:
- The work is exploratory (research, spikes) — timebox instead of estimating
- Requirements are completely undefined — define scope first
- The user wants precision (hours) for a large project — provide ranges, not false precision
- The estimate will be used as a commitment without acknowledging uncertainty
1---2name: estimate-calibrator3description: Produces calibrated three-point PERT estimates (best/likely/worst) with confidence intervals, unknowns, and assumptions. Triggers on: "estimate this", "how long will this take", "effort estimate", "confidence interval", "story points", "t-shirt sizing". NOT for task decomposition, use task-decomposer.4---56# Estimate Calibrator78Replaces single-point guesses with structured three-point estimates: decomposes work9into atomic units, estimates best/likely/worst case for each, identifies unknowns and10assumptions, calculates aggregate ranges using PERT, and assigns confidence levels with11explicit rationale.1213## Reference Files1415| File | Contents | Load When |16| ---------------------------------- | ------------------------------------------------------------------------- | ---------------------- |17| `references/estimation-methods.md` | PERT formula, three-point estimation, Monte Carlo basics | Always |18| `references/unknown-categories.md` | Technical, scope, external, and organizational uncertainty types | Unknown identification |19| `references/calibration-tips.md` | Cognitive biases in estimation, historical calibration, buffer strategies | Always |20| `references/sizing-heuristics.md` | Common task size patterns, complexity indicators, reference class data | Quick sizing needed |2122## Prerequisites2324- Work item description (feature, task, project)25- Decomposed tasks (or use task-decomposer skill first)26- Context: team familiarity, tech stack, existing codebase2728## Workflow2930### Phase 1: Decompose Work3132If the work item is not already decomposed into atomic units:33341. **Break into tasks** — Each task should be estimable independently.352. **Right granularity** — Tasks should be 1 hour to 3 days. Larger tasks have higher36 uncertainty; break them down further.373. **Identify dependencies** — Tasks on the critical path determine the minimum duration.3839### Phase 2: Three-Point Estimate4041For each task, estimate three scenarios:4243| Scenario | Definition | Mindset |44| ----------- | --------------------------------------- | --------------------------------------------- |45| Best case | Everything goes right. No surprises. | "If I've done this exact thing before" |46| Likely case | Normal friction. Some minor obstacles. | "Realistic expectation with typical setbacks" |47| Worst case | Significant problems. Not catastrophic. | "Murphy's law but not a disaster" |4849**Key rule:** Worst case is NOT "everything goes wrong." It's the realistic bad scenario50(90th percentile), not the apocalyptic one (99th percentile).5152### Phase 3: Identify Unknowns5354Categorize unknowns that affect estimates:5556| Category | Example | Impact |57| -------------- | ------------------------------------- | -------------------------------------------- |58| Technical | "Never used this library before" | Likely case inflated, worst case much higher |59| Scope | "Requirements may change" | All estimates may shift |60| External | "Depends on API access from partner" | Blocking risk — could delay entirely |61| Integration | "Haven't tested with production data" | Hidden complexity at integration |62| Organizational | "Need design approval" | Calendar time, not effort time |6364### Phase 4: Calculate Ranges6566For individual tasks, use the PERT formula:6768```text69Expected = (Best + 4 × Likely + Worst) / 670Std Dev = (Worst - Best) / 671```7273For aggregate (project) estimates:7475- **Sum of expected values** for total expected duration76- **Root sum of squares of std devs** for aggregate uncertainty7778### Phase 5: Assign Confidence7980| Confidence | Meaning | When |81| ---------- | -------------------------------- | --------------------------------------------- |82| High | Likely case within ±20% | Well-understood task, team has done it before |83| Medium | Likely case within ±50% | Some unknowns, moderate familiarity |84| Low | Likely case within ±100% or more | Significant unknowns, new technology |8586## Output Format8788```text89## Estimate: {Work Item}9091### Summary92| Scenario | Duration |93|----------|----------|94| Best case | {time} |95| Likely case | {time} |96| Worst case | {time} |97| **PERT expected** | **{time}** |98| **Confidence** | **{High/Medium/Low}** |99100### Task-Level Estimates101102| # | Task | Best | Likely | Worst | PERT | Unknowns |103|---|------|------|--------|-------|------|----------|104| 1 | {task} | {time} | {time} | {time} | {time} | {key unknown or "None"} |105| 2 | {task} | {time} | {time} | {time} | {time} | {key unknown} |106| | **Total** | **{sum}** | **{sum}** | **{sum}** | **{pert}** | |107108### Key Unknowns109110| # | Unknown | Category | Impact on Estimate | Mitigation |111|---|---------|----------|-------------------|------------|112| 1 | {unknown} | {Technical/Scope/External} | +{time} if realized | {spike, prototype, early test} |113114### Assumptions115- {Assumption 1 — what must be true for this estimate to hold}116- {Assumption 2}117118### Risk Factors119- {Risk}: If realized, adds {time}. Likelihood: {High/Medium/Low}.120121### Confidence Rationale122**{High/Medium/Low}** because:123- {Specific reason — e.g., "Team has built 3 similar features"}124- {Specific reason — e.g., "External API is a new integration"}125126### Recommendation127{Commit to PERT expected with {X}% buffer, or spike the top unknown first.}128```129130## Calibration Rules1311321. **Three points, not one.** Single-point estimates are always wrong. Three points133 communicate uncertainty — the most important part of any estimate.1342. **Worst case is the 90th percentile, not the 99th.** "Asteroid hits the office" is135 not a useful worst case. "The API documentation is wrong and we need to reverse-engineer136 the protocol" is realistic worst case.1373. **Unknowns inflate estimates more than known difficulty.** A hard but well-understood138 task is more predictable than an easy but novel one.1394. **Estimates are not commitments.** Communicate ranges, not deadlines. If stakeholders140 need a single number, give the PERT expected plus a buffer for confidence level.1415. **Spike unknowns early.** If a single unknown dominates the estimate range, invest142 1-2 days spiking it before estimating the rest.143144## Error Handling145146| Problem | Resolution |147| ------------------------------------- | --------------------------------------------------------------------------------------------------- |148| Work item not decomposed | Decompose into 3-8 tasks first (or suggest task-decomposer skill). |149| No historical reference | Estimate relative to a known task: "This is about 2x the auth feature." |150| Stakeholder wants a single number | Provide PERT expected with buffer matching confidence level (High: +20%, Medium: +50%, Low: +100%). |151| Estimate seems too large | Check for scope creep in task list. Remove non-essential tasks. Identify what can be deferred. |152| Team has never done this type of work | Mark confidence as Low. Recommend a spike before committing to an estimate. |153154## When NOT to Estimate155156Push back if:157158- The work is exploratory (research, spikes) — timebox instead of estimating159- Requirements are completely undefined — define scope first160- The user wants precision (hours) for a large project — provide ranges, not false precision161- The estimate will be used as a commitment without acknowledging uncertainty