I am looking for some insight from you smart people on SO.  I'm a relatively new developer (3+ years of experience) primarily on the .NET framework, and I'm absolutely terrible at knowing how to properly estimate even the smallest of projects.  I know that it's going to be a pretty big hindrance to my upward mobility as well as my joy of programming if I don't figure out good tools, methodologies, approaches, etc.  Therefore, I am seeking your knowledge and wisdom on this subject.I have heard of SWAG and have most of the time employed that to give my estimates in the past, but I don't feel comfortable just feeling it out.  Certainly, from my experience of doing similar projects I can recall how long it took me and give a relatively accurate estimate, but even that isn't always very accurate.  Plus, it seems that inherent in every project are gotchas and unforeseeables to make estimating even more difficult.  Thoughts?
How do you accurately create estimates for programming projects given to you?
project management
I really liked the idea of Evidence Based Scheduling, and had some success with it.  By using statistical measures of your past estimation accuracy, it gives you a confidence interval of how accurate your future estimates are likely to be, rather than a fixed date.  The drawbacks I found were that it requires remembering to update a tool with your time spent at the end of a task, something I have never been very good at being diligent with, as it is very difficult to do accurately if you frequently switch between tasks.  Also, even though it is supposed to take the probability of interruptions and side tracks into account, I still felt like my estimates were a shot in the dark.Recently, I've started using the pomodoro technique, and it has really improved my feel both for how much uninterrupted, focused time it tasks to finish certain kinds of tasks, and how much uninterrupted, focused time I have available in a typical day.  The previous mental blocks with remembering to record my time spent aren't an issue because it is basically only one button push at the end of every 25-minute interval to record it.  I'm currently working on a tool for myself that hybridizes EBS and pomodoro to take the best of both worlds.