I have a lot to say about estimates... but lest start here:

"Work expands so as to fill the time available for its completion" - Cyril Northcote Parkinson

In it's simplest form, it makes it very hard to do an estimate. This is however proportional to the size. The smaller the work, the closer you can get to a reasonable estimate.

Pretty obvious really, break thing up into smaller parts. But also reduce the number of parts. This later one is why milestones work well in agile development. Only do the estimates for the first milestone.

"The way to deal with an impossible task was to chop it down into a number of merely very difficult tasks, and break each one of them into a group of horribly hard tasks, and each one of them into tricky jobs, and each one of them..." - Terry Pratchett, Truckers.

Why they are wrong

What it really comes down to is: "Developers are also the only group where they are asked to do something which has never been done before, and tell someone else how long it will take before they even know what actually needs to be done" - by Devdas Bhagat, Just another geek.

See Also