I have been working software developer and a Technical project manager at Focalworks for more than 10 years now. Over the years, I have realised the importance of accurate estimates. Accurate estimates are important for projects to be productive and profitable. It doesn't matter whether it's a fixed price project or a retainer model. Accurate estimates ensure that work is getting delivered on time.
Over the years I have worked on a lot of projects. In some my role was that of a developer and in some projects, I played the role of a project manager. With experience I have realised the importance of estimates. and some things which we should keep in mind while doing that.
In this post, I am sharing some points which you should consider while doing estimates.
Why do estimates?
While estimates can feel like a need more from the non-dev stakeholders of a project. But, it's important for the developers as well. Estimates helps in better timelines and release management.
And, it also helps in gaging failure very early in the project. If the sum of all the estimates is going beyond the actual timeline, you know there is a problem. This helps you decide whether you need more resources or we need to shift the timelines.
Developers will feel more responsible about the timeline when they estimate their work. It's almost like a buy in from them about how much time it should take for them to complete the task.
Tips while estimating work
Although there is no magic rule that you can follow for accurate estimates. There are certain things a developer should keep in mind for better accuracy. And remember, estimation is a skill, the more you do the better you get at it. So, here are a few things which you should keep in mind while doing estimates.
Understand the scope of work
While estimating work, you should have a very clear picture of the work. If the scope is not clear then, as a developer you should do the analysis. Ask questions, and get those answers before you commit to anything. Your estimate should be against something which is clear and well documented. If things are not clear, it's quite possible what you deliver will not be adding much value.
Writedown the acceptance criterias
To have a clear scope of work it's a good idea to write acceptance criteria. Sometimes, certain tickets can have a lot of edge cases. A clear list of acceptance criteria brings clarity to the developer. And, it also helps the person who is allocating you the work plan better. You can refer to this article on how to write good acceptance criteria.
Break down big items into smaller logical chunks
Break down the stories or tickets into smaller chunks for estimation. Any ticket which is more than 3 to 4 days of work should be further divided into smaller ones. This not only allows more accuracy in estimate but also it shows continuous progress. Imagine you working on just one ticket for a week vs 4 smaller tickets completed in a week. Which one sounds better as progress? But yes, that doesn't mean you start breaking down the task without any logic or reason.
Discuss with your peer while estimating
It's always a good idea to discuss and take a second opinion during the analysis of the task before committing to an estimate. Sometimes, one might miss certain details / critical aspects of a task. Discuss with your team members about the task. It will help you doing better estimation. And, it will also mean others are aware of the functionality that you are working on.
Keep some buffer
As a developer, there are times when things don't work as you expect. To be honest, I feel surprised if my code works in the first attempt. And hence, it's a good idea to keep some buffer. If you feel you can develop a feature within 8 hours time, keep about 2 hours as buffer. This time should help you do some testing, code review etc. This will help you deliver better code quality.
As a developer, once you get better at estimates you will realise that you have acquired certain traits which help you mature as a developer. You will be able to work towards very specific targets and hence you will be able to plan your work better. You will get better at analysis of the task. A good developer is not the one who can just do bug free development but rather one who is able to develop the proper solution for a requirement.