Consider, you are a rockstar engineer and you are given a task by your favorite person, your project manager, to show some new fields in the dashboard.
As usual, you are asked to estimate it as soon as possible. You think that well, seems like a quickie and you are tempted to estimate it a day. But you, being burnt before, decided to look at the fields that are to be added carefully. These fields are for analytics. You think, ok, let’s make it 2 days then. But being more cautious, you dig deeper and find that those analytics are not even being tracked on the app.
Now to complete the story, you’ll have to track the analytics, send them to the server, make the backend accept those and store them, show these on the dashboard, write tests etc….
What seemed a simple task is now a 1-2 week thing. Very hard to estimate. And your manager was expecting a response like, “would be done by end of day”.
What is the problem with estimates?
The main problem with an estimate is that the “estimate” gets translated into commitment. And when you miss a commitment, you breed distrust.
Most estimations are poor because we don’t know what they are for. They are uncertain. A problem that seemed simple to you on the whiteboard, turned out not to be so simple. There were non-functional requirements, codebase friction, some unfortunate bugs etc. We deal with uncertainty.
There is a rule in software engineering that everything takes 3X more time than you think it should, and this holds true even when you know this and take it into account!
Estimates can go the other way too, that is when you overestimate. This is as dangerous as underestimating.
What should an estimate look like?
An estimate should have 3 characteristics :
- Honest (Hardest)
1. Honest :
You have to be able to communicate bad news when the news is bad. And when the continuous outrage of your managers and stakeholders is on your face, you need to be able to continue and assert that the news is bad.
Honesty is important as you breed trust. You are not eliminating disappointment, rage and people getting mad, but you will eliminate distrust.
2. Accurate :
You are given a task and you estimate it to take somewhere between now to the end of the universe. That’s definitely accurate, it’ll be done within that time.
We won’t breed distrust, but we definitely will breed something else.
Which brings us to the 3rd characteristic.
3. Precise :
An estimate should have just the right amount of precision.
What is the most honest estimation that you can make? I don’t know!
This is as honest as it can get. You really don’t know. But this estimation is neither accurate not precise.
But when we try to make precise estimates, we must note that we are assuming that everything goes right. We get the right breakfast, traffic doesn’t suck, your co-worker is having a good day, no meetings, no hidden requirements, no non-functional complexities etc.
Estimating by work break down
The most common way to estimate a complex task is to break it down into smaller tasks, into sub-tasks. And then those sub-tasks into sub-sub-tasks and so on until each task in hand is manageable and ideally not more than 4 hours of work.
Imagine this forming a tree, with executable tasks at the bottom as leaves. You just estimate the leaves and it all adds up.
This approach works, but there are 2 problems :
- We missed the integration cost
- We missed some tasks
There is a fundamental truth to work break down structure estimates:
The only way to estimate using work break down chart accurately, to know what are the exact sub-tasks, is to implement the feature!
What to expect from an estimate?
Estimates are uncertain. There is no guarantee that your estimate will work itself out. And that’s OK. It’s your manager’s job to manage that risk. We are not asking them to do something outside of their job.
The problem arises when you make a commitment. If you make a commitment, you must make it. Be ready to move heaven and earth to make it. But if you are not in a position to make a commitment, then don’t make one.
Because he’s going to set up a whole bunch of dominos based on that commitment, and if you fail to deliver, everything fails.
Some interesting links :
Uncle Bob on Estimates: https://www.youtube.com/watch?v=eisuQefYw_o