estimation-atternsPractical estimation techniques for software tasks β methods comparison, decomposition, complexity multipliers, buffer calculation, bias awareness, and communication strategies. Use when estimating features, sprint planning, or presenting timelines to stakeholders.
Install via ClawdBot CLI:
clawdbot install wpank/estimation-atternsSystematic approaches for producing accurate, defensible software estimates.
npx clawhub@latest install estimation-patterns
Choose the method that matches your context and audience.
| Method | Best For | Granularity | Pros | Cons |
|----------------------|-------------------------------|-----------------|-----------------------------------------------|-----------------------------------------------|
| T-Shirt Sizing | Roadmap planning, backlog grooming | XS, S, M, L, XL | Fast, low-friction, good for relative ranking | Not actionable for scheduling |
| Story Points | Sprint planning, team velocity | Fibonacci (1-21) | Abstracts away individual speed, tracks velocity | Meaningless outside the team, gaming risk |
| Time-Based | Client quotes, contractor work | Hours / days | Universally understood, maps to budgets | Anchoring bias, implies false precision |
| Three-Point | High-uncertainty tasks | Min / likely / max | Captures uncertainty range, enables PERT | Requires discipline to set honest bounds |
| Reference Comparison | Recurring task types | Relative to past | Grounded in real data, hard to argue with | Requires historical records, breaks on novelty |
Three-point formula (PERT):
Expected = (Optimistic + 4 x Likely + Pessimistic) / 6
Standard Deviation = (Pessimistic - Optimistic) / 6
Use the standard deviation to express confidence ranges (e.g., "3-5 days at 68% confidence, 2-6 days at 95%").
Break work down until every sub-task is < 4 hours of effort. Anything larger hides unknowns.
| Level | Example | Target Size |
|----------------|-------------------------------------------|---------------|
| Epic | User authentication system | 2-6 weeks |
| Feature | OAuth2 login with Google | 3-10 days |
| Task | Implement callback handler | 1-3 days |
| Sub-task | Parse and validate OAuth token | 1-4 hours |
| Atomic step | Write token expiry check function | 30-90 minutes |
Decomposition checklist:
If you cannot decompose a task, it signals a spike is needed. Timebox the spike (2-4 hours), then re-estimate.
Apply these multipliers to your base estimate when complexity factors are present. Multipliers stack multiplicatively.
| Factor | Multiplier | Rationale |
|--------------------------|------------|----------------------------------------------------|
| New technology / stack | 1.5x | Learning curve, unexpected gotchas, doc-hunting |
| Unclear requirements | 2.0x | Discovery work, rework cycles, stakeholder alignment |
| Legacy code | 1.5x | Undocumented behavior, fragile tests, hidden coupling |
| Cross-team dependency | 1.5x | Coordination overhead, blocking, API negotiation |
| First-time task | 2.0x | No reference point, unknown unknowns dominate |
| Regulatory / compliance | 1.5x | Audit trails, review gates, documentation overhead |
Example: A 2-day base estimate on legacy code (1.5x) with unclear requirements (2.0x) becomes 2 x 1.5 x 2.0 = 6 days.
Rule: Never apply more than 3 multipliers β if that many factors converge, the task needs a spike or a scope reduction, not a bigger number.
Raw estimates are point predictions. Reality is a distribution.
| Buffer Type | Rule of Thumb | When to Apply |
|------------------------|-------------------------|-------------------------------------------------|
| Known unknowns | +20% of total estimate | Integration points, third-party APIs, minor gaps |
| Unknown unknowns | +50% of total estimate | New domain, first release, greenfield system |
| Team velocity factor | / focus ratio (e.g., 0.7) | Account for meetings, reviews, context switching |
| Sequential dependency | +10% per handoff | Each team/person boundary adds coordination drag |
Effective estimate formula:
Effective = (Base Estimate x Multipliers) / Focus Ratio + Buffer
Focus ratio guidelines:
| Scenario | Typical Focus Ratio |
|-----------------------------------|---------------------|
| Dedicated to one project | 0.75-0.85 |
| Split across 2 projects | 0.50-0.60 |
| On-call rotation active | 0.60-0.70 |
| Heavy meeting load (> 3h/day) | 0.45-0.55 |
Track actual vs estimated to improve over time. This is the single most effective way to get better at estimation.
Tracking table:
| Task | Estimated | Actual | Ratio (A/E) | Notes |
|---------------------|-----------|--------|-------------|--------------------------|
| Auth flow | 3 days | 5 days | 1.67 | OAuth docs were outdated |
| Dashboard charts | 5 days | 4 days | 0.80 | Reused existing component |
| DB migration | 2 days | 6 days | 3.00 | Discovered data quality issues |
Accuracy ratio: Calculate your rolling average of Actual / Estimated over the last 10-20 tasks.
Calibration action: Multiply future estimates by your rolling accuracy ratio until it converges toward 1.0.
Recognize these cognitive traps β awareness alone reduces their effect.
| Bias | Description | Mitigation |
|---------------------|----------------------------------------------------------|---------------------------------------------------|
| Planning Fallacy | Assuming best-case scenario despite past evidence | Use historical data, not intuition |
| Anchoring | First number heard dominates all subsequent estimates | Estimate independently before discussing |
| Optimism Bias | "It'll be simpler than last time" | Apply the three-point method, honor the pessimistic |
| Scope Creep | Estimate stays fixed while scope grows | Re-estimate when scope changes, always |
| Hofstadter's Law | "It always takes longer, even when you account for it" | Add buffer, then add more buffer for novel work |
| Dunning-Kruger | Novices underestimate; experts sometimes overestimate | Cross-check with a second estimator |
| Sunk Cost Pressure | Refusing to re-estimate because the original was "approved" | Treat estimates as living artifacts, update often |
Use these ranges as starting heuristics, then adjust with multipliers and historical data.
| Task Type | Typical Range | Key Variables |
|---------------------|------------------|------------------------------------------------|
| Bug fix (isolated) | 2-8 hours | Reproducibility, code familiarity, test coverage |
| Bug fix (systemic) | 1-3 days | Root cause depth, blast radius, regression risk |
| Small feature | 1-3 days | Spec clarity, UI complexity, number of endpoints |
| Medium feature | 3-10 days | Cross-cutting concerns, data model changes |
| Large feature | 2-4 weeks | Architecture decisions, team coordination |
| Refactor (local) | 1-3 days | Test coverage, coupling, blast radius |
| Refactor (systemic) | 1-4 weeks | Number of callers, migration strategy needed |
| Spike / research | 2-8 hours (timeboxed) | Always timebox β output is knowledge, not code |
| DevOps / infra | 1-5 days | Provider docs quality, IAM complexity, testing |
How you present an estimate matters as much as the number itself.
Always present as a range, never a single number:
Confidence levels:
| Confidence | What It Means | When to Use |
|------------|--------------------------------------------|------------------------------------|
| High (+-15%) | Well-understood scope, done similar before | Familiar task, clear spec |
| Medium (+-30%) | Some unknowns, reasonable decomposition | Most sprint-level estimates |
| Low (+-50%+) | Significant unknowns, rough order of magnitude | Roadmap forecasts, presale quotes |
Stakeholder communication rules:
| Anti-Pattern | Why It's Harmful | Better Approach |
|------------------------|-----------------------------------------------------|----------------------------------------------|
| Padding silently | Erodes trust when discovered; hides real uncertainty | Use explicit buffers with stated rationale |
| Sandbagging | Destroys velocity data; breeds complacency | Track accuracy ratio, aim for calibration |
| Not decomposing | Large estimates hide unknowns and compound errors | Break to < 4-hour sub-tasks, estimate bottom-up |
| Single-point estimates | Implies false certainty, no room for variance | Always give a range with confidence level |
| Estimating under pressure | Anchoring to what the stakeholder wants to hear | Ask for time to decompose; never estimate on the spot |
| Copy-paste estimates | Every task has different context and risk profile | Estimate fresh, use references as starting points only |
| Ignoring rework cycles | First pass is rarely final β reviews, feedback, QA | Factor in at least one review-and-revise loop |
AI Usage Analysis
Analysis is being generated⦠refresh in a few seconds.
iMessage/SMS CLI for listing chats, history, watch, and sending.
Use when you need to control Discord from Clawdbot via the discord tool: send messages, react, post or upload stickers, upload emojis, run polls, manage threads/pins/search, fetch permissions or member/role/channel info, or handle moderation actions in Discord DMs or channels.
Use when you need to control Slack from Clawdbot via the slack tool, including reacting to messages or pinning/unpinning items in Slack channels or DMs.
Send WhatsApp messages to other people or search/sync WhatsApp history via the wacli CLI (not for normal user chats).
Build or update the BlueBubbles external channel plugin for Clawdbot (extension package, REST send/probe, webhook inbound).
OpenClaw skill for designing Telegram Bot API workflows and command-driven conversations using direct HTTPS requests (no SDKs).