This article was originally published in the DEV Community.
I used to freelance a lot and coming up with estimates always got me anxious.
Early in my career, all my estimates felt more like guesswork than science. And I'm sure that that feeling is very common with beginners.
Practice helps a lot though. And after some good years of experience, I have made enough mistakes to understand how to do it better.
Here's all I know about it. These learnings are useful for junior freelancers and everyone who needs to answer the "hey, when will this be done?" question now and then.
Let's begin from the beginning:
Why is so hard to come up with good estimates? #
Some estimates are easy. If I were to ask you how much time you'd need to make some coffee I bet you could come up with a good estimate, right?
Making coffee is a simple project. You've done it a lot of times, and no reasonable person would be angry if you missed your estimate, it's just a cup of coffee.
Now, imagine that you need to create an ecommerce website for a new Starbucks product. This is your first freelance project for a big company and screwing it up could impact your career. How much time would you need?
I don't know about you but I am anxious already.
See how different these two estimates are? One is for a simple thing where delays wouldn't be a problem. The other one is complex, uncertain, and missing its deadline would be pretty bad.
These two examples help us understand that the higher the uncertainty and risk, the harder is to come up with a good estimate.
And with that in mind, the easiest way to better estimate your work is by reducing the uncertainty and risk about the work you need to do.
Let's talk about how to do it.
Reducing uncertainty before estimating #
Allow me to start with a short piece of advice, ahem.
Never rush an estimate. Take all the time you need. One time I had to work dozens of hours for free because I rushed and underestimated a project, don't be a fool like I once was.
Ok, now, to reduce an estimate's uncertainty all you need to do is two simple (but not easy) things:
- Gather all the details you need about the project
- Break the project into smaller units of work until you're happy with the level of detail
As I said, take your time doing that. Even if you have to do some early prototyping, it is better to spend an afternoon working on an estimate than a week running against the clock.
After you're done, try to answer the following question:
"Do I understand this project and know how my client/manager expects it to be?"
Let's go back to our Starbucks e-commerce example for a minute and apply these two techniques:
Alright, "create an ecommerce website for a new Starbucks product" is too broad and generic. To fix that, you emailed your contact at Starbucks and asked for more info. They returned with a proper briefing that says something like:
"Create a new Shopify-based store for a new Starbucks product that will only be available during the holiday season. All it needs is a single product page and an optimized checkout. Our design team will provide the screens."
Ok, that's much better, and can break it down into a list like this:
- Read Shopify Storefront API docs - 8 hours
- Research Shopify customizing best practices - 8 hours
- Look into single product page references - 4 hours
- UI meetings with the designer - 20 hours
- Work on the implementation
- Front-end - 40 hours
- API integrations - 30 hours
- Send weekly reports - 6 hours
- Wrap up the implementation and complete the project - 12 hours
We are making progress! It is easier to come up with individual estimates for those sub-tasks and sum them for the complete project estimation.
⚠️ Even after splitting the project into tasks, it can be hard to come up with hourly estimates. Especially if you've recently begun freelancing. If that happens, it is better to err on the side of caution and be generous on your estimate.
And remember, this list can be as big as you want and the more you break a project down the clearer it becomes.
Keep this scenario in mind as we move into...
Reducing and understanding risks before estimating #
Estimates have two types of risk.
- The risk of not meeting your estimate due to external problems
- The risk of the consequences of failing to meet the deadline being super bad
Being aware of them makes estimating your work a much calmer experience. So, two more questions you should always ask yourself before putting down an estimate are:
"What could go wrong here?" and "How screwed will I be if I don't meet the estimated deadline?".
If you are planning a sprint and need to come up with story estimates, each story will have its risk. The worst that could happen with an unfinished story is you moving it to the next sprint, and your manager asking you what happened.
But, returning to our Starbucks example. If you miss that estimated deadline you might face unpaid hours or even legal action. Which, I have to say, are my two least favorite things.
Now, the (not-so-secret) secret for dealing with these two kinds of risks is...
🌟 Communication 🌟
See, estimates are all about expectation management. So it is completely reasonable to share the possible risks with your client/manager and propose two estimates.
One optimistic (if it all goes well) and another pessimistic (considering everything bad that may happen).
Also, if you are not comfortable with the consequences of not meeting the deadline, you have to account for that risk in the estimate. And either ask for more time or extra help.
Play it safe here, if the deadline is utterly non-negotiable you MUST have all the help you need.
And please, please, if you know that you are not going to be able to meet a deadline DO NOT wait until the very last minute to tell your client/manager. That person wants the deadline met as much as you and can help you.
I had projects where the client settled with a partial delivery at the original date, and a complete delivery weeks later.
Putting it all together #
Let's go back to our Starbucks ecommerce scenario one last time.
It's Friday night and you must send your contact at Starbucks an estimate on when their new product's Shopify store will be done.
You've already asked for a full briefing, broke it into small pieces of work, and got to a reasonable amount of hours.
You reflected on what could go wrong and added 40 more hours to the estimate to cover possible external problems. Your client is aware that you'll be sending a pessimistic estimate and is comfortable with that.
You also asked your client about "how hard" the deadline is. They told you that the product is seasonal and the deadline is non-negotiable. They are willing to pay you extra so you can work during the weekends or hire some extra help.
All things considered, you are comfortable with the estimate you've come up with and send it.
Eager to start working on the project, you crack open a cold beverage and congratulate yourself on the job well done. Well done!
I'd love to answer any questions that you have about the article and work estimates in general.
Be sure to leave them in the comments 😄
Cover gif made with the fantastic makewordart.com and recorded with Kap
Hey, let's connect 👋 #
Follow me on Twitter and let me know you liked this article!
And if you really liked it, make sure to share it with your friends, that'll help me a lot 😄