Time estimation is one of the most difficult tasks for developers to do accurately. Programming constantly involves solving never before seen problems and dealing with incomplete information. It can often feel as if someone is asking you ‘how long is a piece of string?’ with no further information or tools. And since estimating is often necessary for project planning and billing, it’s something that programmers cannot avoid, and can be disastrous if gotten wrong. Here are five tips to help you improve your ability to estimate.
1. Make sure you have considered all factors.
This is probably the most common ‘gotcha’ when it comes to estimating times for tasks. Developers will often have a myopic view of the task at hand. If you need to write a WordPress plugin that adds a widget to the sidebar, people will only think about the time it takes to implement that. What they often don’t consider is time to test and debug their work, time to communicate with the client about specifics, time to document their work, and time that run into a roadblock that can get you stuck for minutes or even hours. Make sure to take these into account when making estimates. My personal rule of thumb is that tasks tend to take ~30% longer than you initially think they will.
“The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time.” —Tom Cargill, Bell Labs
2. Break Tasks Down.
personally, I try to never estimate on a task for more than 6 hours. If I think I am facing a large task that is going to take more than that, I am probably facing several smaller tasks in disguise. Breaking down tasks also forces you to further define the task at hand. This could lead to you discovering tasks that you hadn’t considered, or even possibly realizing that something that seemed daunting isn’t as time consuming as it first seemed.
3. Get Clarification.
Communication is paramount here. Make sure you have a clear idea of what it is you are estimating on. Ask lots of questions. Try to think of edge cases. This is the one step on this list that requires experience more than anything else. Every developer gets screwed on this more than a few times early in their career. After each project, ask yourself what you wish you knew when you started, and do your best to get that kind of information at the start of your next project. This is a situation where an ounce of prevention is worth pounds of cure.
4.If you’re Unsure, Guess High:
Even when you communicate well with everyone involved in the project and gather as much information as you can, sometimes you still cannot have the clearest picture of what exactly it is that you are estimating. Maybe you are using a new technology, or are working in a new field that you know is going to require hours of studying up on HIPAA rules to make sure your software is compliant. In these cases, it is usually best to be a pessimist, and make larger estimates. You will have to take time to do research, and since you are in uncharted waters, you won’t be as productive as you are in areas where you have experience.
5. Track your Time.
The secret to improving your performance at any skill is to track your progress, take a hard look in the mirror, and see where you do well and where you can improve. Estimating is no different. Make sure you are tracking your time against what you said and how you performed. Once you have data you will start to see trends: maybe you always over estimate, maybe you are always under. Maybe it depends on what kind of work you do. Once you’ve done this, you can start to adjust your estimates until you are more accurate.