We can't predict the future, and yet we try to estimate things all the time. We get pissed off when someone asks for an estimate about our work and yet we keep asking others to provide estimates about their work. Then we miss our target goals, as pretty much everyone else does.
Insanity is doing the same thing over and over again, but expecting different results — (probably not) Albert Einstein
I wouldn't go as far as call it insanity. Maybe something slightly close to it could be a better fit: irrationality.
Irrationality is basically our incredible capacity of ignoring facts and even our own convictions to favor emotions and instincts. And it's definitely our greatest enemy when we estimate.
The main reasons why our estimates fail
I estimated a lot of things over the last 14 years, and I've been wrong more times than I can count. Actually, I wouldn't even dare to estimate how many times I've been wrong (tee hee). And by estimating and watching others estimate I learned a couple things:
Our brains aren't good for that
I know it sounds like a lousy excuse for doing something, but it checks out. Although we're great comparers, we're not fit when it comes to estimate. And that's why strategies like T-shirt estimates and Planning Poker were created: they merely make you compare things instead of estimate them.
Want to take a shot at this affirmative? Take a look at this gorgeous elephant. Let's call her Sapphire. Just because my mother has a cat with this name and I like it. Don't judge me.
Now, can you answer:
- How many pounds does Sapphire weights?
- How many grains of earth is she throwing up?
I guess you can’t. But don’t be sad, I can’t do it also. However, if I had asked you if Sapphire is heavier than a motorcycle you'd probably give me a correct answer. If Sapphire was near another elephant, you'd probably figure out which one was heavier in a flash.
Still don't believe me? Check this University of Berkeley post along with its articles.
We are super optimistic and we fear failure
I'll be there in 5 minutes.
— Everyone who's not there after 5 minutes
You probably said that at least once. And you probably didn't make it more than once. The problem is we don't like to give bad news because people often shoot the messenger. Then we compromise ourselves with overoptimistic deadlines and I guess you know what comes next.
I know this topic sounds obvious, but there's a good reason for that: it's indeed obvious.
Our memory sucks, and it generates undone work
It's done! I just need to test it and deploy it.
— Someone who'll clearly miss a deadline
If you never said anything like that, congratulations. But I doubt you never heard anything like that. We tend to forget about annoying details, specially when they're about annoying tasks we don't like/want to do. It gets a little worse when we're working with teams, as each individual has its own least favorite task that often gets undone.
How to overcome our estimating limitations
We can’t hack our brains to suddenly become great at estimates. This is not going to happen. However, by knowing this very flaw we can create strategies that will help us achieve better results.
Know your enemy. That's a good mantra, specially when the enemy is our own brain (or evolution, for that matter).
Compare, compare and compare
So, the first tip I can give you is to use comparison whenever possible and before any kind of "estimate". Here's how you can do it:
- Compare your features and order them before you even think about any kind of number, be it hours or even story points.
- Use index cards, post-its so your team can visualize the features together and move them around.
- When it comes to numbers, use Fibonacci or anything like that. This forces us to increase our uncertainty when we estimate big things.
Create strong definitions
Remember the developer who said that the task was done, however the feature wasn't neither tested nor deployed? That's undone work. How do we fix that? We need to reach a common understanding between every team member of what done really means.
Many estimates go wrong because people don't see the big picture. We forget the details, and the only way to avoid that is to remind ourselves of that. Remember the guy who'd be there in 5 minutes? He probably forgot that the he needs to park the car. Or take the elevator. Or identify himself at the reception.
Definitions fix that and help us to estimate better for two reasons. The first and most obvious is that we get to know every step that must be concluded and thus estimated. The second (which is merely a consequence) is that we get less undone work in our way, and that means less interruptions.
Measure your work after it's done
Do you remember the PDCA (Plan, Do, Check, Act) cycle? Well, it's C time!
In order to estimate we need to check the results. How can we improve our estimates if we never compare them to the real thing?
If an estimate was way too far from the measured result, something's amiss. And it might be the lack of an item on a definition, for an example. The only way we can act and improve our estimates is by checking them against real results.
If you skip this part, you might still improve your estimates, but only once. It's your choice.
Wait… what about this #noestimates thing?
Well, it's a long subject. A subject for another post. ;)
For now I can say that It might work for you. Or not. Well, you know the drill: Inspect and Adapt.