AI coding agents systematically overestimate task duration because they anchor to human developer timelines absorbed from training data. A task an agent can complete in 30 minutes gets estimated as "2-3 days" because that's what a human developer forum post would say.
Force the agent to estimate from its own operational units — tool-call rounds — and only convert to human wallclock time at the very end.
UnitDefinitionScaleRoundOne tool-call cycle: think → write code → execute → verify → fix~2-4 min wallclockModuleA functional unit built from multiple rounds until usable2-15 roundsProjectAll modules + integration + debuggingSum of modules × integration factor
A Round is the atomic unit. It maps directly to one iteration of:
When asked to estimate a task, follow these steps in order:
Break the task into functional modules. Each module should be independently buildable and testable. Ask yourself: "What are the distinct pieces I would build one at a time?"
For each module, estimate the number of rounds using these anchors:
PatternTypical RoundsExamplesBoilerplate / known pattern1-2CRUD endpoint, config file, standard API clientModerate complexity3-5Custom UI layout, state management, data pipelineExploratory / under-documented5-10Unfamiliar framework, platform-specific APIs, complex integrationsHigh uncertainty8-15Undocumented behavior, novel algorithms, multi-system debugging
Key calibration rules:
Each module gets a risk coefficient that inflates its round count:
Risk LevelCoefficientWhen to ApplyLow1.0Mature ecosystem, clear docs, agent has strong pattern matchMedium1.3Minor unknowns, may need 1-2 extra debug roundsHigh1.5Sparse docs, platform quirks, integration unknownsVery High2.0Possible dead ends, may need to change approach entirely
text
Module effective rounds = base rounds × risk coefficient
Project rounds = Σ(module effective rounds) + integration rounds
Integration rounds = 10-20% of base total (for wiring modules together)
Only at the very end, convert to human time:
text
Wallclock time = project rounds × minutes_per_round
Default minutes_per_round = 3 minutes (includes agent generation time + user review time).
Adjust this parameter based on context:
Always output the estimation in this exact structure:
markdown
### Task: [task name]
#### Module Breakdown
| # | Module | Base Rounds | Risk | Effective Rounds | Notes |
|---|--------|------------|------|-----------------|-------|
| 1 | ... | N | 1.x | M | why |
| 2 | ... | N | 1.x | M | why |
#### Summary
- **Base rounds**: X
- **Integration**: +Y rounds
- **Risk-adjusted total**: Z rounds
- **Estimated wallclock**: A – B minutes (at N min/round)
#### Biggest Risks
1. [specific risk and what could blow up the estimate]
2. [...]
These are the failure modes this skill exists to prevent:
minutes_per_round, don't add phantom rounds.Here are example projects with known round counts to help calibrate:
See references/calibration-examples.md for detailed examples across project types.
See evals/evals.json for test cases to validate estimation accuracy.