Create Estimation
Overview
Create a structured three-point estimation using PERT-weighted averages. Breaks work into concrete tasks, estimates each with optimistic/likely/pessimistic bounds, identifies risk factors, and produces a total range with a recommended commitment point.
Workflow
Read project context -- Read .chalk/docs/ for PRDs, user stories, acceptance criteria, and architecture docs. Understanding scope and integration points is essential before estimating.
Determine the next estimation number -- List files in .chalk/docs/engineering/ matching the pattern *_estimation_*.md. Find the highest number and increment by 1. If none exist, start at 1.
Understand the scope -- From $ARGUMENTS, conversation context, and project docs, identify:
- What exactly is being estimated (feature, epic, spike, migration)
- Acceptance criteria or definition of done
- Known integration points with existing systems
- Whether this is greenfield or modification of existing code
- If scope is unclear, ask the user before estimating -- estimation without scope understanding is guessing
Break into tasks -- Decompose the work into concrete, estimatable tasks. Each task should be:
- Small enough to estimate with reasonable confidence (ideally 0.5-3 days of effort)
- Independent enough to estimate separately
- Inclusive of all work types: implementation, testing, code review, documentation, deployment
Three-point estimate each task -- For every task, provide:
- Optimistic (O): Best case if everything goes smoothly, no surprises, familiar territory
- Likely (L): Most probable duration given normal conditions, some minor friction
- Pessimistic (P): Worst reasonable case -- unfamiliar code, complex bugs, unclear requirements (not catastrophic, just hard)
Calculate PERT estimate -- For each task: Expected = (O + 4L + P) / 6. Sum all task estimates for the total.
Identify risk factors -- List specific risks that could push the estimate toward the pessimistic end. Assign each a probability (low/medium/high) and impact in time.
Calculate risk buffer -- Add a percentage buffer based on cumulative risk:
- Well-understood work, few unknowns: 10-20% buffer
- Some unknowns, moderate integration complexity: 20-40% buffer
- Significant unknowns, new technology, complex integrations: 40-70% buffer
Determine recommended commitment -- The number the team should commit to externally. This is the PERT total + risk buffer, rounded to a sensible unit (half-days for small work, days for medium, weeks for large).
Write the file -- Save to .chalk/docs/engineering/<n>_estimation_<feature_slug>.md.
Confirm -- Tell the user the estimation was created with its path, the recommended commitment, and the confidence range.
Filename Convention
<number>_estimation_<snake_case_feature>.md
Examples:
2_estimation_user_authentication.md
5_estimation_payment_integration.md
9_estimation_migrate_to_v2_api.md
Estimation Format
# Estimation: <Feature or Work Item Title>
Last updated: <YYYY-MM-DD>
## Scope
<Brief description of what is being estimated. Link to PRD or user story if available.
State any scope boundaries explicitly: "This estimate covers X but not Y.">
## Assumptions
- <Assumption 1, e.g., "API contracts are finalized and won't change">
- <Assumption 2, e.g., "Design mockups are complete before development starts">
- <Assumption 3, e.g., "One engineer working full-time on this">
## Task Breakdown
| # | Task | Optimistic | Likely | Pessimistic | PERT Estimate |
|---|------|-----------|--------|-------------|---------------|
| 1 | <Task description> | <O> | <L> | <P> | <(O+4L+P)/6> |
| 2 | <Task description> | <O> | <L> | <P> | <(O+4L+P)/6> |
| 3 | <Task description> | <O> | <L> | <P> | <(O+4L+P)/6> |
| ... | ... | ... | ... | ... | ... |
| | **Subtotal** | **<sum O>** | **<sum L>** | **<sum P>** | **<sum PERT>** |
All values in **engineer-days** unless otherwise noted (1 engineer-day = 1 person working 1 full day).
## Commonly Forgotten Tasks
The following are included in the breakdown above. If any were intentionally excluded, note why.
- [ ] Unit and integration tests
- [ ] Error handling and edge cases
- [ ] Code review iterations (typically 1-2 rounds)
- [ ] Documentation updates (API docs, README, runbook)
- [ ] Migration scripts or data backfill
- [ ] Deployment and rollout (feature flags, staged rollout)
- [ ] Monitoring and alerting setup
- [ ] Performance testing under realistic load
## Risk Factors
| Risk | Probability | Impact | Mitigation |
|------|------------|--------|------------|
| <Specific risk> | Low / Medium / High | +<N> days | <How to reduce likelihood or impact> |
| <Specific risk> | Low / Medium / High | +<N> days | <How to reduce likelihood or impact> |
## Summary
| Metric | Value |
|--------|-------|
| **Optimistic total** | <sum of all O values> |
| **PERT total** | <sum of all PERT values> |
| **Pessimistic total** | <sum of all P values> |
| **Risk buffer** | <X%> (<rationale>) |
| **Recommended commitment** | **<PERT + buffer, rounded>** |
| **Confidence range** | <Optimistic> to <Pessimistic + buffer> |
## Recommended Commitment
**<N> engineer-days** (<approximately N/5 weeks> for a single engineer)
This is the number to communicate externally. It includes the PERT-weighted estimate plus
a <X%> risk buffer for <brief rationale>.
## Revisit Triggers
- Scope changes that add or remove acceptance criteria
- Discovery of unknown integration complexity during implementation
- Actual velocity tracking shows >20% deviation from estimates after first 30% of work
Content Guidelines
Estimation Units
Use engineer-days as the base unit. This measures effort, not calendar time.
- 1 engineer-day = 1 person working 1 full day
- To convert to calendar time, divide by the number of engineers and add coordination overhead (typically 10-20% per additional engineer)
- For very small tasks (< 0.5 days), use hours but convert to days in the summary
Calibrating Optimistic vs. Pessimistic
The spread between O and P reveals confidence level:
| O:P Ratio |
What It Means |
| 1:1.5 |
Very well understood, done it before |
| 1:2 |
Mostly understood, some unknowns |
| 1:3 |
Significant unknowns, unfamiliar territory |
| 1:5+ |
Too uncertain to estimate -- recommend a spike first |
If any single task has a ratio worse than 1:5, flag it as needing a timeboxed investigation spike before estimation is meaningful.
Breaking Down Tasks Well
Good task breakdown follows these rules:
- Each task has a clear deliverable (not "work on X" but "implement X endpoint with validation")
- Tasks include the full cost: code + tests + review, not just the coding part
- Integration tasks are explicit, not hidden inside implementation tasks
- "Glue work" is accounted for: config changes, environment setup, CI pipeline updates
Setting Risk Buffer
The buffer is not padding -- it is a quantified acknowledgment of uncertainty:
| Scenario |
Suggested Buffer |
| Mature codebase, well-defined requirements, experienced team |
10-20% |
| Some new technology, requirements mostly stable |
20-40% |
| New codebase or major refactor, evolving requirements |
40-70% |
| Greenfield with unproven technology and unclear requirements |
70-100% (or recommend a spike) |
Effort vs. Duration
Always clarify the distinction:
- Effort: Total engineer-days of work (what you estimate)
- Duration: Calendar time to complete (depends on team size, parallel work, interruptions)
- Two engineers don't halve the duration -- coordination overhead adds 10-20% per person
- Context switching between projects adds 20-30% to effective duration
Anti-patterns
- Single-point estimates: "This will take 5 days" is a guess, not an estimate. Always provide the three-point range. The spread itself is valuable information about uncertainty.
- Anchoring bias: The first number mentioned becomes the anchor. Break into tasks first, estimate each independently, then sum. Never start with a total and work backward.
- Not accounting for integration/testing time: Implementation is typically 40-60% of total effort. The rest is testing, integration, review, deployment, and documentation. If your estimate only covers coding, it is 40-60% of the real number.
- Estimating without understanding scope: If you don't have acceptance criteria or a clear definition of done, you cannot estimate. Push back and get clarity first, or estimate the spike to get clarity.
- Confusing effort with duration: 10 engineer-days is not "2 weeks." It is 2 weeks for 1 engineer, but could be 1 week for 2 engineers (plus coordination overhead), or 3 weeks for 1 engineer with context switching.
- Planning fallacy: People consistently underestimate by 30-50%. If the team has historical data, calibrate against it. If not, lean toward the pessimistic end for commitments.
- Precision theater: Reporting "7.3 engineer-days" implies false precision. Round to the nearest 0.5 for small estimates, nearest whole day for medium, nearest week for large.
- Estimating in isolation: If the work integrates with systems owned by other teams, account for coordination time, API negotiations, and blocked-waiting time. Cross-team dependencies are the most common source of estimation misses.
1---2name: create-estimation3description: Create a three-point estimation when the user asks to estimate effort, scope a feature, size work, forecast timeline, or plan capacity for a project or feature4---5
6# Create Estimation
7
8## Overview
9
10Create a structured three-point estimation using PERT-weighted averages. Breaks work into concrete tasks, estimates each with optimistic/likely/pessimistic bounds, identifies risk factors, and produces a total range with a recommended commitment point.
11
12## Workflow
13
141. **Read project context** -- Read `.chalk/docs/` for PRDs, user stories, acceptance criteria, and architecture docs. Understanding scope and integration points is essential before estimating.
15
162. **Determine the next estimation number** -- List files in `.chalk/docs/engineering/` matching the pattern `*_estimation_*.md`. Find the highest number and increment by 1. If none exist, start at `1`.
17
183. **Understand the scope** -- From `$ARGUMENTS`, conversation context, and project docs, identify:
19 - What exactly is being estimated (feature, epic, spike, migration)
20 - Acceptance criteria or definition of done
21 - Known integration points with existing systems
22 - Whether this is greenfield or modification of existing code
23 - If scope is unclear, ask the user before estimating -- estimation without scope understanding is guessing
24
254. **Break into tasks** -- Decompose the work into concrete, estimatable tasks. Each task should be:
26 - Small enough to estimate with reasonable confidence (ideally 0.5-3 days of effort)
27 - Independent enough to estimate separately
28 - Inclusive of all work types: implementation, testing, code review, documentation, deployment
29
305. **Three-point estimate each task** -- For every task, provide:
31 - **Optimistic (O)**: Best case if everything goes smoothly, no surprises, familiar territory
32 - **Likely (L)**: Most probable duration given normal conditions, some minor friction
33 - **Pessimistic (P)**: Worst reasonable case -- unfamiliar code, complex bugs, unclear requirements (not catastrophic, just hard)
34
356. **Calculate PERT estimate** -- For each task: `Expected = (O + 4L + P) / 6`. Sum all task estimates for the total.
36
377. **Identify risk factors** -- List specific risks that could push the estimate toward the pessimistic end. Assign each a probability (low/medium/high) and impact in time.
38
398. **Calculate risk buffer** -- Add a percentage buffer based on cumulative risk:
40 - Well-understood work, few unknowns: 10-20% buffer
41 - Some unknowns, moderate integration complexity: 20-40% buffer
42 - Significant unknowns, new technology, complex integrations: 40-70% buffer
43
449. **Determine recommended commitment** -- The number the team should commit to externally. This is the PERT total + risk buffer, rounded to a sensible unit (half-days for small work, days for medium, weeks for large).
45
4610. **Write the file** -- Save to `.chalk/docs/engineering/<n>_estimation_<feature_slug>.md`.
47
4811. **Confirm** -- Tell the user the estimation was created with its path, the recommended commitment, and the confidence range.
49
50## Filename Convention
51
52```
53<number>_estimation_<snake_case_feature>.md
54```
55
56Examples:
57- `2_estimation_user_authentication.md`
58- `5_estimation_payment_integration.md`
59- `9_estimation_migrate_to_v2_api.md`
60
61## Estimation Format
62
63```markdown
64# Estimation: <Feature or Work Item Title>
65
66Last updated: <YYYY-MM-DD>
67
68## Scope
69
70<Brief description of what is being estimated. Link to PRD or user story if available.
71State any scope boundaries explicitly: "This estimate covers X but not Y.">
72
73## Assumptions
74
75- <Assumption 1, e.g., "API contracts are finalized and won't change">
76- <Assumption 2, e.g., "Design mockups are complete before development starts">
77- <Assumption 3, e.g., "One engineer working full-time on this">
78
79## Task Breakdown
80
81| # | Task | Optimistic | Likely | Pessimistic | PERT Estimate |
82|---|------|-----------|--------|-------------|---------------|
83| 1 | <Task description> | <O> | <L> | <P> | <(O+4L+P)/6> |
84| 2 | <Task description> | <O> | <L> | <P> | <(O+4L+P)/6> |
85| 3 | <Task description> | <O> | <L> | <P> | <(O+4L+P)/6> |
86| ... | ... | ... | ... | ... | ... |
87| | **Subtotal** | **<sum O>** | **<sum L>** | **<sum P>** | **<sum PERT>** |
88
89All values in **engineer-days** unless otherwise noted (1 engineer-day = 1 person working 1 full day).
90
91## Commonly Forgotten Tasks
92
93The following are included in the breakdown above. If any were intentionally excluded, note why.
94
95- [ ] Unit and integration tests
96- [ ] Error handling and edge cases
97- [ ] Code review iterations (typically 1-2 rounds)
98- [ ] Documentation updates (API docs, README, runbook)
99- [ ] Migration scripts or data backfill
100- [ ] Deployment and rollout (feature flags, staged rollout)
101- [ ] Monitoring and alerting setup
102- [ ] Performance testing under realistic load
103
104## Risk Factors
105
106| Risk | Probability | Impact | Mitigation |
107|------|------------|--------|------------|
108| <Specific risk> | Low / Medium / High | +<N> days | <How to reduce likelihood or impact> |
109| <Specific risk> | Low / Medium / High | +<N> days | <How to reduce likelihood or impact> |
110
111## Summary
112
113| Metric | Value |
114|--------|-------|
115| **Optimistic total** | <sum of all O values> |
116| **PERT total** | <sum of all PERT values> |
117| **Pessimistic total** | <sum of all P values> |
118| **Risk buffer** | <X%> (<rationale>) |
119| **Recommended commitment** | **<PERT + buffer, rounded>** |
120| **Confidence range** | <Optimistic> to <Pessimistic + buffer> |
121
122## Recommended Commitment
123
124**<N> engineer-days** (<approximately N/5 weeks> for a single engineer)
125
126This is the number to communicate externally. It includes the PERT-weighted estimate plus
127a <X%> risk buffer for <brief rationale>.
128
129## Revisit Triggers
130
131- Scope changes that add or remove acceptance criteria
132- Discovery of unknown integration complexity during implementation
133- Actual velocity tracking shows >20% deviation from estimates after first 30% of work
134```
135
136## Content Guidelines
137
138### Estimation Units
139
140Use **engineer-days** as the base unit. This measures effort, not calendar time.
141
142- 1 engineer-day = 1 person working 1 full day
143- To convert to calendar time, divide by the number of engineers and add coordination overhead (typically 10-20% per additional engineer)
144- For very small tasks (< 0.5 days), use hours but convert to days in the summary
145
146### Calibrating Optimistic vs. Pessimistic
147
148The spread between O and P reveals confidence level:
149
150| O:P Ratio | What It Means |
151|-----------|---------------|
152| 1:1.5 | Very well understood, done it before |
153| 1:2 | Mostly understood, some unknowns |
154| 1:3 | Significant unknowns, unfamiliar territory |
155| 1:5+ | Too uncertain to estimate -- recommend a spike first |
156
157If any single task has a ratio worse than 1:5, flag it as needing a timeboxed investigation spike before estimation is meaningful.
158
159### Breaking Down Tasks Well
160
161Good task breakdown follows these rules:
162- Each task has a clear deliverable (not "work on X" but "implement X endpoint with validation")
163- Tasks include the full cost: code + tests + review, not just the coding part
164- Integration tasks are explicit, not hidden inside implementation tasks
165- "Glue work" is accounted for: config changes, environment setup, CI pipeline updates
166
167### Setting Risk Buffer
168
169The buffer is not padding -- it is a quantified acknowledgment of uncertainty:
170
171| Scenario | Suggested Buffer |
172|----------|-----------------|
173| Mature codebase, well-defined requirements, experienced team | 10-20% |
174| Some new technology, requirements mostly stable | 20-40% |
175| New codebase or major refactor, evolving requirements | 40-70% |
176| Greenfield with unproven technology and unclear requirements | 70-100% (or recommend a spike) |
177
178### Effort vs. Duration
179
180Always clarify the distinction:
181- **Effort**: Total engineer-days of work (what you estimate)
182- **Duration**: Calendar time to complete (depends on team size, parallel work, interruptions)
183- Two engineers don't halve the duration -- coordination overhead adds 10-20% per person
184- Context switching between projects adds 20-30% to effective duration
185
186## Anti-patterns
187
188- **Single-point estimates**: "This will take 5 days" is a guess, not an estimate. Always provide the three-point range. The spread itself is valuable information about uncertainty.
189- **Anchoring bias**: The first number mentioned becomes the anchor. Break into tasks first, estimate each independently, then sum. Never start with a total and work backward.
190- **Not accounting for integration/testing time**: Implementation is typically 40-60% of total effort. The rest is testing, integration, review, deployment, and documentation. If your estimate only covers coding, it is 40-60% of the real number.
191- **Estimating without understanding scope**: If you don't have acceptance criteria or a clear definition of done, you cannot estimate. Push back and get clarity first, or estimate the spike to get clarity.
192- **Confusing effort with duration**: 10 engineer-days is not "2 weeks." It is 2 weeks for 1 engineer, but could be 1 week for 2 engineers (plus coordination overhead), or 3 weeks for 1 engineer with context switching.
193- **Planning fallacy**: People consistently underestimate by 30-50%. If the team has historical data, calibrate against it. If not, lean toward the pessimistic end for commitments.
194- **Precision theater**: Reporting "7.3 engineer-days" implies false precision. Round to the nearest 0.5 for small estimates, nearest whole day for medium, nearest week for large.
195- **Estimating in isolation**: If the work integrates with systems owned by other teams, account for coordination time, API negotiations, and blocked-waiting time. Cross-team dependencies are the most common source of estimation misses.