Software Estimation Without Guessing
Estimation and Its Challenges
- Understand estimation purposes: Recognize the different reasons for estimation (forecasting, commitment, coordination)
- Distinguish estimates from targets: Keep estimation separate from negotiation of deadlines
- Acknowledge uncertainty: Accept that all estimates contain inherent uncertainty
- Improve estimate accuracy: Focus on making estimates more accurate rather than precise
- Address estimation biases: Be aware of optimism bias, anchoring, and other cognitive biases that affect estimates
- Set appropriate expectations: Communicate clearly about the limitations of estimates
- Focus on value over precision: Prioritize the business value of estimates over false precision
- Avoid false certainty: Don’t present estimates as more definitive than they actually are
- Consider multiple dimensions: Estimate time, cost, and scope as a connected system, not independently
- Learn from estimation history: Use past estimation data to improve future estimates
The Purpose of Estimation
- Clarify estimation goals: Determine exactly what question the estimate should answer
- Match estimation technique to purpose: Choose estimation methods based on the specific goal
- Align estimation with business needs: Ensure estimates provide information that supports business decisions
- Estimate for coordination: Use estimates to help teams coordinate their activities
- Estimate for forecasting: Create estimates that help predict future events for planning
- Estimate for commitments: Develop estimates that can inform reliable commitments
- Separate concerns: Keep estimation for different purposes clearly distinguished
- Provide appropriate precision: Match the precision of the estimate to its purpose
- Communicate estimate meaning: Ensure everyone understands what the estimate represents
- Evolve estimation purposes: Recognize that the purpose of estimation may change over time
Estimating Size
- Focus on relative sizing: Use relative sizing rather than absolute time estimates when possible
- Implement story points: Use story points to estimate relative size of work items
- Apply t-shirt sizing: Use broad categories (XS, S, M, L, XL) for high-level estimates
- Break down larger items: Split large items into smaller, more estimable pieces
- Use comparative estimation: Base new estimates on comparisons to previously completed work
- Practice sizing consistency: Work to maintain consistent size interpretations across the team
- Separate complexity from uncertainty: Distinguish between work that is complex and work that is uncertain
- Size complete deliverables: Estimate the size of complete, valuable deliverables, not tasks
- Document sizing assumptions: Record the assumptions made during sizing for future reference
- Revisit sizing regularly: Periodically review and calibrate your sizing approach
Forecasting with Data
- Collect historical metrics: Gather data on past performance to inform forecasts
- Track cycle time: Measure how long work items take to complete from start to finish
- Use velocity for forecasting: Apply team velocity to predict future delivery dates
- Implement probabilistic forecasting: Make forecasts that show the probability of different outcomes
- Create range-based forecasts: Express forecasts as ranges rather than single points
- Run Monte Carlo simulations: Use simulations to produce statistically sound forecasts
- Track forecast accuracy: Measure how well forecasts predict actual outcomes
- Recognize variability: Accept that performance will vary and incorporate this into forecasts
- Update forecasts regularly: Revise forecasts as new information becomes available
- Balance mathematical and human judgment: Combine data-driven and expert-based forecasting
Estimating Time
- Recognize the limits of time estimation: Understand when time estimates are appropriate and when they aren’t
- Break down to manageable units: Decompose work into pieces that can be estimated in days or less
- Apply the three-point technique: Use optimistic, realistic, and pessimistic estimates to create ranges
- Focus on elapsed time: Estimate calendar time, not just effort time
- Account for all activities: Include testing, review, documentation, and other non-coding activities
- Incorporate buffering appropriately: Add buffers based on risk and uncertainty, not arbitrarily
- Consider team capacity: Factor in availability, multi-tasking, and other capacity constraints
- Manage time estimate anchoring: Avoid anchoring bias by using multiple estimation approaches
- Create collaborative time estimates: Generate time estimates as a team, not individually
- Validate with historical data: Check time estimates against actual historical performance
Estimation in Agile Contexts
- Define “done” clearly: Ensure everyone has the same understanding of what completion means
- Focus on delivering value: Prioritize features that deliver the most value earliest
- Implement iterative delivery: Break work into small iterations to provide regular feedback
- Establish cadence: Create a regular rhythm for planning, delivery, and review
- Apply timeboxing: Use fixed time periods to constrain scope rather than extending deadlines
- Prioritize backlog continuously: Keep the work queue prioritized based on current information
- Adapt plans based on feedback: Change plans as you learn more through delivery
- Measure and improve systematically: Use retrospectives to continuously improve estimation
- Maintain sustainable pace: Work at a pace that can be maintained indefinitely
- Balance predictability and adaptability: Find the right balance between reliable forecasting and agility
Planning with Estimates
- Create flexible plans: Build plans that can adapt to new information
- Establish planning horizons: Plan in detail for the near term, outline for the medium term, and set direction for the long term
- Focus on outcomes: Plan around desired outcomes rather than specific activities
- Identify dependencies early: Map dependencies to minimize bottlenecks and blocking
- Develop contingency plans: Create plans for how to respond if estimates prove inaccurate
- Update plans regularly: Revise plans as new information becomes available
- Balance detail and overview: Provide appropriate levels of detail for different audiences
- Include learning time: Account for learning and discovery in plans
- Consider technical debt implications: Factor in the impact of technical debt on future work
- Plan for validation: Include time for testing and validating work in all plans
Communicating Estimates
- Present estimates appropriately: Match the presentation to the audience and purpose
- Use visual representations: Employ charts and graphs to communicate estimates effectively
- Provide context: Include the reasoning and assumptions behind estimates
- Communicate uncertainty clearly: Make the uncertainty in estimates explicit and understandable
- Avoid false precision: Don’t present estimates with more precision than they warrant
- Update stakeholders regularly: Keep everyone informed as estimates change
- Address estimate changes: Communicate changes to estimates promptly with explanations
- Establish feedback channels: Create mechanisms for questions and clarifications about estimates
- Manage expectations consistently: Set and maintain appropriate expectations about estimates
- Educate about estimation: Help stakeholders understand the estimation process
Improving Estimate Quality
- Collect estimation data: Track actual outcomes versus estimates to improve future estimates
- Hold estimation retrospectives: Review the estimation process regularly to identify improvements
- Reduce uncertainty proactively: Take steps to reduce the key sources of uncertainty
- Break down work further: Decompose work into smaller units for more accurate estimation
- Review past similar work: Use completed similar work as a reference point for new estimates
- Broaden estimator perspective: Include diverse viewpoints in the estimation process
- Address systemic issues: Identify and fix organizational issues that impact estimation
- Implement technical practices: Adopt practices that reduce technical risk and variability
- Create feedback loops: Establish rapid feedback to identify estimation issues early
- Measure improvement: Track estimation accuracy over time to verify improvements
Estimation in Complex Organizations
- Coordinate cross-team dependencies: Plan for dependencies between teams
- Align estimation approaches: Create consistent estimation practices across teams
- Implement portfolio planning: Coordinate multiple projects and initiatives effectively
- Manage organizational constraints: Address constraints that affect multiple teams
- Create cross-team visibility: Ensure teams have visibility into related work
- Establish escalation paths: Define how to address estimation issues that span teams
- Balance local and global optimization: Find the right balance between team and organizational needs
- Navigate organizational politics: Address the political aspects of estimation
- Create shared understanding: Develop common language and concepts around estimation
- Build trust across boundaries: Foster trust between teams and departments for better estimation
Addressing Common Estimation Problems
- Handle scope creep: Establish processes for managing changing scope
- Address unrealistic deadlines: Develop approaches for dealing with imposed deadlines
- Manage estimate padding: Reduce the need for padding through better estimation practices
- Respond to estimate pressure: Create strategies for responding to pressure to reduce estimates
- Deal with historical baggage: Address the impact of past estimation failures
- Overcome estimation resistance: Work with teams resistant to providing estimates
- Balance commitments and forecasts: Clarify when estimates are commitments versus forecasts
- Handle estimation in uncertain domains: Develop approaches for estimating in new or uncertain areas
- Address multi-team coordination: Create mechanisms for estimation across team boundaries
- Manage stakeholder expectations: Develop practices for setting appropriate stakeholder expectations
Key Takeaways
- Match estimation technique to purpose: Choose estimation methods based on whether you’re forecasting, making commitments, or coordinating
- Focus on accuracy over precision: Prioritize estimates that are roughly right rather than precisely wrong
- Use relative sizing: Implement story points or t-shirt sizing to estimate relative size instead of absolute time
- Make uncertainty explicit: Express estimates as ranges or with confidence levels rather than single points
- Base estimates on data: Use historical performance data to create and validate estimates
- Break work into small pieces: Decompose work into small, estimable units to improve accuracy
- Create collaborative estimates: Generate estimates as a team rather than individually
- Communicate appropriately: Present estimates with the right level of detail and precision for the audience
- Improve continuously: Regularly review estimation process and results to get better over time
- Balance predictability and adaptability: Find the right mix of reliable forecasting and ability to respond to change