If this sounds familiar to you, then you probably already know that those estimated numbers are nothing more than a pipe dream.
Jeff Atwood said something to the point, in the stackoverflow podcast episode 16:
I think this is a really good point, is that your mind's eye tends to fill, you image the app as you want it to be. It's like "Oh how hard can it be, we're just going to plug in a login-thing here and I've done this a hundred times and it will take no time at all."...
I think it's the job of more than one person on the team to keep you honest.
...excellent point that you always imagine that it's going to be easier than it is, and you can't think through all the details that are going to go wrong, and all the wierd things you're going to have to think about until you actually start to do it...
Most of the time, when you think you can implement something very quickly, it turns out to be the opposite. Don't get me wrong, there are situation where it comes down to some copy-and-paste and that's it. However, I believe in most of those cases you haven't thought about the problem thoroughly and that copied portion of code will eventually turn into Quick Hack Bacteria.
I think you should get things done right from the beginning. I'm not talking about something like a waterfall complete upfront design! I believe in iterative processes, they work very well and sometimes it's just not possible to get things right from the start. However, I claim that it is possible in a lot of cases and those sloppy 5 minute hacks are not "getting things done", but "making things worse", at least in the long run.
I really believe it comes down to honesty and aspiration, like Jeff mentioned. Honesty in terms of how much work you can really get done in a certain amount of time and aspiration in relation to the quality of that work. If you take those two parameters into account, when estimating the time you will need to implement a feature, I think chances are high that you are going to come up with a reasonable number.