Let’s admit it right away.
Estimating the time that it takes to develop and code things up is hard, and most of us are pretty crappy at it. It’s something that I have struggled with in the past, and still struggle with to this day. But all is not lost! There are ways to build this skill up.
The best way to build the skill of software development time estimation is to write lots of code, design lots of apps and build lots of software – all while timing yourself.
By doing this you will start to understand how long it actually takes you to do various development tasks of differing complexity and size, and build a time estimation intuition.
The Tools of the Trade
You could just grab a stop watch, or a clock and time yourself manually, but why do that when there are convenient and free tools to make our lives easier?
There are two main ways you could go with this, and neither way is better or worse than the other. It is mostly a preference thing.
You could go about timing yourself in minutes and hours, or go about timing yourself in pomodoros.
Focus To-Do (Pomodoro)
If you are someone who is already using the pomodoro method and it is an integral part of your development process already, I’d go with the timing yourself in pomodoros method and the tool that I would recommend to you is Focus To-Do.
The idea would be to be able to say “This task will take me 3 pomodoros to finish” for example. You can then convert that into minutes, hours and days later on for communicating to other people.
Toggl (Minutes and Hours)
If you are someone who is not into the pomodoro method, not interested in it, or just hasn’t gotten around to starting it yet, but who wants to start working on their software development time estimation skills right away, then the tool that I would recommend to you is Toggl.
It has an easy to use, intuitive UI, is minimal (it just tracks your time – no other gimmicky features) and I have found it to be the easiest and smoothest to use time tracking tool available.
A Pen and Paper
The last thing you will needed is simply a pen and paper.
I like to use a notebook, specifically the Muji Dot Grid A5 notebook which you can read about on the resources page, but any one will do.
The benefit of using a notebook over paper, is that all your records, estimates, and tasks are collected together and you can look back over your them easily later on.
You could also go a more digital route, but there is something about the process of writing things down that builds intuition and knowledge at a faster rate. I really recommend going the analogue route, but if that’s not for you – Notion, my favourite digital alternative to a notebook, has got you.
The Process of Building Software Development Time Estimation Skills
So, now that you know the general idea of what to do and the tools that will make it easier, you’re pretty much good to go! You’re welcome.
But, wouldn’t you like a process, a system that will make this intuition building exercise go as smoothly and as quickly as possible?
I’ve got you.
The next section goes over the process that I’ve been using every day, both in my day job as a FinTech startup developer and my side projects.
This process has helped me improve my software development time estimation skills, from a below average level to a pretty damn good one.
Break it Down!
The first step is to break any project or problem down. Think about it, which of these two problem sets would be easier to make an estimate for?
- Create a customer service ticketing system
- Design a customer ticket data model
- Design a customer feedback interface
- Create a feedback component
- Create an api for the customer ticket data model
Coming up with an acceptably accurate estimate for the second set would be much easier. In fact, in practice I would break them down even further.
Stepwise refinement my friends, stepwise refinement.
Now that you have your list of small, hopefully atomic tasks the next step is to estimate how long you think it is going to take you.
This doesn’t have to be super specific or accurate, when I am doing this I use a mobile phone (cell phone) signal system.
Mobile phones often have three or four bars in the top right corner of your screen telling you how much signal you currently have. Next to each task item that I have written down in my notebook, in the margin, I put one to three bars in the same style as a mobile phone signal indicator.
If a task has one bar, it means that it can be done within an hour, two bars means that it can be done within the day and three bars means that it will take multiple days to finish.
In my mind I am thinking about more specific times, but from a general planning mindset, I have found that this three bar system is sufficient and works well.
Most of your tasks should be one or two bars. Any three bar tasks should be looked at. When looking at them think “is this task actually made up of a few smaller tasks that would be easier to make estimates for?”. If yes, break it up.
This step is pretty simple – work through your tasks in an order that is appropriate (this is a whole other thing and I won’t be explaining it in this post) and time yourself as you go.
If you are using the pomodoro app, Focus To-Do, that I recommended above, create a task and start a pomodoro for it. The app will take care of recording how many pomodoros a task has taken, so you don’t need to worry about that. Just focus on your tasks at hand.
If you are using something else, make sure you record how many pomodoros each task takes!
If you are using Toggl create a project for what you are working on, type in a description of the specific task that you will be undertaking (optional) and hit the play button.
It will start the clock and now all you have to worry about is the task that you will be tackling, but remember to click the finish button when you finish or stop doing your task otherwise you results won’t be accurate.
Sometimes you will forget though (I do!), but if you remember the rough time that you stopped working on your task, just edit the entry and write in that time. It will be good enough.
Stopping doing you task and then going back to it at a later point is fine.
Just doing the above will help with your software development time estimation skills and allow you to speed up the process of building intuition. But, if you really want to take it to the next level, then I also recommend evaluating your estimates.
A good thing to do here is to go back over your pomodoros and Toggl entries and compare them to your estimates that you have written down in your notebook.
Total up the amount of pomodoros that a task took, or the total time over your logged Toggl entries and scrutinise them!
Did this task that you estimated as one bar really take under an hour to complete? How about this two bar one? Did you finish it within a day, but in over an hour?
If anything doesn’t add up, take a mental note of this and consider it in the future.
Usually you will underestimate how long it takes to complete a task, so bare that in mind too!
Being able to give accurate estimates of how long a task or project will take you to do is a vital part of working in a team. Whether you are the only developer in a small startup, one of a few in a small team or part of a large organisation, having this skill will make your interactions with other people and the projects that you take on go more smoothly.
It’s also important for people like me – indie hackers who have small side projects with real users.
When you only have a few hours a day to work on your side project, and users are requesting features, knowing how long it will take you to complete something so you can give deadlines to your users will improve your relationship with them.
Also, a top tip when giving estimates to other people – multiple it by 1.3 to 1.5 and then give that to them. Giving yourself a buffer is important – you don’t know what unexpected things will pop up.
If you really want to improve your time estimation abilities following the steps
- Breaking up your projects into small tasks
- Making estimates of the time that they will take to complete
- Doing the tasks and timing yourself either with the Focus Todo pomodoro app, or Toggl
- Evaluating your estimates
could be what you are looking for.
If you follow this process, I guarantee that your software development time estimation skills will sky rocket, or your money back!
‘Ello, I’m Jamal – a Tokyo-based, indie-hacking, FinTech software developer with a dependence on data.
I’m friendly, so feel free to say hello!