I must admit that I never liked estimating how long a given task would take to complete, be it a software development task or anything else for that matter. It feels arbitrary, very hard to get right, and way too dependent upon lots of different factors (my own varying laziness not the least). I'm sure that lots of people feel the same way.
Regardless of how we all may feel, most software development methodologies use task estimation in some form or other as a basis for projecting when things will be completed. I'm sure that most people agree that such projections need to be taken with a grain of salt.
As I have mentioned, prio runs my life, and today I have finally implemented my personal take on the estimation of project completion dates. I simply calculate a task completion rate per label (tasks are in buckets sorted by label) based on previous task retirement timestamps and the current time. That is to say, based on historical "performance", prio estimates when it thinks you will be done with all tasks of a given label.
This projection is a living thing as it takes the current time into account. If you complete a bunch of tasks in a short time, and then stop working on them, your completion rate will slowly begin to erode as time passes. This is of course just an average, but looking at what prio is calculating for my own various labels, I feel pretty confident that the numbers are better than anything I could estimate. And all of this is automatic too.
Check out prio to see this approach applied to all tasks (regardless of label) for all current users.