The importance of estimates in software development projects cannot be overstated. Numerous decisions occur based on someone’s assessment of a body of work, which might include hiring decisions, venture capital, and department priorities. Leadership must review estimates to make informed decisions. Therefore, information found in estimates needs to be as accurate as possible. Despite being approximations, estimates are often expected to be a sure forecast of effort and cost.
Listed below are ten tips for better software estimates, some of which are interrelated:
1. Know how to do the work; otherwise, delegate the estimating task
This first tip is fundamental. Someone who is not able to understand what it takes to perform the work should not create estimates for that work. This statement seems fairly obvious, but many times I have seen this occur. Even someone who has studied the work to be estimated may lack the wisdom to understand issues that can arise during a project. The best estimates come from someone that has done the work before.
2. Have senior team members do the estimates
Because senior staff has been through it before, their wisdom is crucial to understanding what each task takes. Senior personnel can visualize each step in the task and remember how much it took the last time. They can also recall the challenges and unforeseen issues that occurred in prior work and leverage this knowledge when formulating new estimates. One loses a substantial amount of experience and knowledge using junior team members to create estimates.
3. Know who is going to perform the work to forecast an estimate accurately
This item is one of the most important concepts to understand. When dealing with larger teams and projects, there is no way for you to do all the work. If you are the only one performing the work, it is easier to forecast its duration; but if someone else is performing the work, make sure to account for differences in abilities and experience of team members that might affect the length of time to complete tasks. Before providing the estimate, attempt to find out the team’s or teams’ makeup. If this information is not available, assume a mid-level developer will complete the work and provide a buffer of time to account for differences. Also, be sure to document this consideration of who is doing the work in an estimate overview.
4. Be specific and give details
By specific, this means you should target eight hours max time per each task so that every task in your project should not be greater than a day. You get four benefits out of this strategy. First, breaking down a task to eight hours requires you to understand what large tasks take to complete, resulting in a better understanding of the work. Second, this process allows individuals tasked with the project a quicker understanding of the work. Thirdly, QA teams get the work faster to test. Larger estimates slow the process down and make it harder to test. Lastly, if you want to run a more day-based project methodology, like Kanban, you can start without much upfront analysis.
Being specific also means to avoid generalizing tasks into non-descriptive task bundles. These generalizations cause anomalies in your estimates. For example, if there are to be five reports in the application, you might generalize that each report should take 24 hours. The problem arises in the case when you have not taken the time to understand what each report entails and could have some reports that take 24 hours while others take 48 or 12 hours. Further analyzing tasks to determine a more accurate estimate can prevent these anomalies.
A final note on specificity: when is it too much? You have to balance the amount of time you spend on a well-defined estimate with the amount of time you have to complete an estimate. Unfortunately, some compromises must be made when you are on a short timeline to create an estimate. Also keep in mind that a software estimate will likely never match the finished project, so overanalyzing a project might be a waste of time. The goal is to create the best estimate within the time given.
5. Take care to credibly estimate, never too low, never too high, just right
There is a fine line between overestimating and underestimating. You can win or lose a project by your estimate. On the low end of the scale, there are times when you are pressured to provide a low estimate to win work. While it may be tempting to yield to this pressure, it will be short lived gratification followed by stress and disappointment trying to implement the estimate. When estimates are too high, you risk projects not being accepted, working on a project that completes far earlier than planned, or trying to drag tasks out longer than they should take. When overestimated projects are approved, this might appear to be beneficial at first, but consider the statement it sends to a project owner. They may perceive that you did not understand enough about what the work would take and padded your estimates to make up for it, or that you were trying to get more revenue from a client by prolonging work. In either situation, the perception of your estimating skills is negatively affected. Of course, you could get away with your high estimate if no one is aware of your overestimation, but eventually, this problem will catch up with you. The key is to complete your estimate and be able to stand by it, knowing there was no intention of deliberately making a low or high estimate.
6. Have others review your estimates
This tip helps solidify your estimates. We all make mistakes, and our perceptions may be off, so having someone else review your work helps identify any issues before the estimate is submitted. Do not avoid this process for fear that discussions could get contentious. It will make everyone involved in the process a better estimator.
When using the Scrum project methodology, Story Point Poker is most effective for having a team come up with an estimate. It yields the best results as the whole team estimates each task. This process can be slow with a new team, but as the team progresses, it improves with time.
7. Something will go wrong, horribly wrong
Never assume each task will go well. It is important to account for issues that come up. They will come up, so add time to your estimates to account for them. Seek advice from an experienced person on tasks where there is high uncertainty. They can reflect on past experiences where problems arose with similar work.
8. Be organized
Make sure your estimates are shareable and easy to follow. Others need to be able to understand your estimates, perhaps months later. Group tasks in a logical order. Keep notes about your reasoning and expect to be questioned about how you came up with your estimates. The details behind your estimates should always be available.
9. Develop a low and high estimate, then keep track of the variance between the two
When creating an estimate, try and determine how long it would take in an ideal scenario: this is your low estimate. Then, from your experience, seek to think of similar situations where you encountered issues while trying to complete comparable work. Try to account for these types of issues in your high estimate. Also, use the high estimate to adjust for your inexperience in a task. The difference between the low and high estimate, or variance, will provide an indicator of your confidence in your estimate. It is a good idea to review your estimates to identify tasks that have high variances. Once you find these tasks, attempt to analyze them further to close the difference between the low and high estimates.
10. Track your actuals versus estimates to improve your estimating skills
This final tip is how you truly improve your estimating skills. Without it, you are doomed to make the same estimating mistakes over and over again. This measurement helps indicate estimating areas where you have done accurate approximations and areas where you could improve. For those areas where your estimates were off, try to determine why they were off and account for them in the future.
Estimating projects can be a difficult challenge for even the most experienced professional. Clients and decision makers highly value the ability to take high-level work streams or epics and break them down to clearly defined tasks. Utilizing these task breakdowns to create quality estimates for determining the cost, resources, and duration of a project will ensure the right projects are selected. Hopefully, these tips will help in your next estimating project.