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.
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.
Add 20 to 30 % of the total time for a common overhead. This includes the estimation itself as well as other time spendings that can not 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 can not 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.