One of the problems with estimation is it is a “best guess”.  At the initial conception of the project we know the least about the requirements, solution and possibly even the platform or language we are using. So we use past experience and gut feeling to decide how long we think it will take to develop the application. If we are concientious then we will probably use a best, likely, worst case estimate and be honest towards which end of the scale it is going to be. Remember it is an “estimate” not a definite deadline.
Other professions over estimate and complete early based on estimate, we recently had some wardrobes fitted and the company doing it told us to expect it to take 2 days, so we could plan to leave our room in a state they could work in for that period. Upon starting the work i asked the fitter about this and he said

They always book us for 2 days, but it only ever takes 1 and a half at most

Surely this is just good practice, the fitter is able to spend more time if he hits a snag and the customer/client is not misled or disappointed. They have estimated on the worst case and allocated this time accordingly.

Does this happen in the software industry on the whole? Please feel free to comment on your own experiences.