This article https://www.infoq.com/articles/software-development-effort-e... written by a researcher at Simula Research Laboratory is one of the best summaries on the estate of software estimation.
Simula has excellent research on estimation. I found particularly interesting the different biases that might affect us: the scale used, how the question is asked (introduces an anchor to your estimate), the size of the task estimated previously, etc.
However, we can improve on gut feeling estimates and training on a personal level can reduce the uncertainty. A few highlights:
- On a team level, planning poker is known to improve estimates.
- Checklists (common forgotten activities) and historical data (% of time spent on unplanned or project management) tailored to your current project improve estimates.
- Avoid early estimation based on incomplete data. Avoid exposure to irrelevant, misleading estimation information.
- Break specs in tasks and estimate those tasks. Keep historical data on your estimates and final times and review them periodically. Automated time tracking tools for developers like https://www.codermirror.com/ can help in removing the burden of tracking coding times.