How Software Estimates Fails Part 1: What Is an Estimate Anyways?

Nothing dooms a project faster than its first estimate. From the fateful moment that someone even hints at one; the launch date, budget and staffing all seem to be broadcast to every possible stakeholder and locked down in an iron clad contract. This kind of behavior is why so many gun-shy developers just stopped giving estimates all together and refuse to do anything other than scrum. “We’ll get there when we get there,” they all cheer.

There are plenty of ways to go wrong making estimations. The first and worst mistake that I see over and over again is simply not knowing what an estimate is, which is why simply communicating them usually turns so disastrous.

Let’s start with what estimates are NOT:

  • The enemy
  • A schedule
  • A commitment
  • A goal
  • A decision

Most people who work in software understand the Project Management Triangle:

The project schedule cannot be defined as something that stands on its own. Scope, budget, and schedule must all be balanced with each other. If you bring in the schedule, you must bring in the scope and or expand the budget. In a “perfect” project, the team would be able to adjust all three as needed. In most cases, schedule and budget are “pinned” so all you can do is keep cutting scope to keep on track.

There is the underlying assumption that quality is not up for grabs. Dishonest or wishful thinking often result in scope, schedule, and budget all staying “on target” while the loss of quality is left to the customers to find out for themselves. Those sort of teams don’t usually stay in business for long.

Estimations are part of a similar triangle:

Estimations are defined by their relationship to a target and a commitment. Unlike the Project Management Triangle, estimates are ALWAYS pinned, meaning that they are not up for negotiation.

A Target is the goal that you want to hit. It is the combination of scope, budget and schedule.The business can adjust the target, but the facts of business might limit what you can do. For example, setting a target of entering the Tablet market 3 years after Apple’s iPad might not be as valuable as beating them to it.

An Estimate is just data. It is the collective analysis and guesswork of your team of experts to best understand the variables involved in hitting the Target. It is important to always think of an estimate simply data, or a measurement. You don’t negotiate with thermometers when it is too hot, and you shouldn’t negotiate with estimates.

A Commitment is where an estimate and a Target come together. Depending upon the risk in the estimate, or in missing the target, you adjust your commitment. You negotiate a commitment. If you work for the most laid back company in the world and they don’t mind due dates whizzing past with nothing to show, then there is little reason to worry. Just set your commitment to the same date as your estimate and relax. Of course, those kinds of companies don’t tend to stay in business long either.

If you are working on a fixed spend bid, and each dollar over the proposed budget, you swallow; then the amount of “safety” you put in your commitment is a lot more important.

Simply getting teams to understand the difference between estimates, targets, and commitments will alleviate a lot of stress and let people talk about estimates without fear that they are being translated into iron clad promises. The more people you can get involved in critically looking at estimates, usually the better your data is. If the team is afraid to communicate honest estimates up front, then your chances of success are just that much slimmer.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s