As a self-employed programmer I had to deal more with time estimations lately. These are my personal notes about time estimations in programming software projects.
You should include the following aspects to your time estimations:
This is the time when you programm. It must be clear to you what the end goal should look like. You cannot make an accurate estimation while not knowing which aspects you need to programm. See Overhead.
This should be included to fix small bugs.
This includes merging Git branches as well as the inital setup of the deployment. Add more time when you need to merge an older branch.
Meetings / Discussions
This should include all short discussions as well as longer meetings about the overall planning of a project/task.
You should consider to add extra time for research. Maybe you first need to find the best tool for your requirements. This can be included in overhead as well.
Sadly it is not always wanted/needed. But it’s good to have. Consider to document your source code while programming. This helps other programmers as well as your futurte me. It does not cost that much more time to make a short comment. You should consider adding time for other types of documentation. For example for an overview documentation. What’s the job of each component of your application.
Add 20 to 30 % of the total time for a common overhead. This includes the estimation itself as well as other time spendings that cannot be categorized more precise. Analyize the existing code and all steps need to be done to finish the task while you make the estimation. If it’s a new project with no codebase the initialization and setup of the common codebase is the most time-consuming element. The overhead time addition is good for not taken into account aspects while you analyized all steps.
Of course it always depends on the project/task you’re working on.
List as many sub-steps as possible in the estimation to get an overview for all steps needed to be done to finish the project/task. This makes the estimation more transparent. You can better argument on each single step.
Update your estimations when priorities change or requirements are updated. Also when you need more time because of a foreign influence. For example, if you need to fix other peoples faults. You cannot foresee this.
Track every time you spend on working for the project to know how long you have been working until now and how much time is left to finish the task. You should do that anyway while working for/with other people.