I think that accurately estimating IT work is a combination of experience, natural gift, and luck. With natural gift (think, big picture vision) and experience as being the two biggest factors. And your estimate can really only be as good as the information you're basing it on ... so that's something to always keep in mind and take into consideration as you're providing an estimate on a technical project (or any project for that matter).
Here's my opinion of some of the biggest common mistakes or issues that can cause us to make inaccurate estimates during the courses of our projects as we are providing technical estimates ... in no particular order of importance ...
Incomplete or poorly defined requirements
If the requirements are not detailed enough or the scope of work is poorly laid out, then it's nearly impossible to provide an accurate estimate. You can try, but estimating the unknown is extremely difficult and you're usually setting yourself and the project up for failure. When you go to manage your project with your project schedule and collaborate with your team on their tasks using a tool like Seavus Project Viewer, it will be nearly impossible to keep the project on track when your estimates and tasks in the schedule are based on bad requirements. Go back and put more detail into the requirements before putting together a detailed estimate that you're going to sign your name to.
Leaving out important stuff
This is similar to poorly defined scope. It's not just the lack of detail - it's the lack of elements that need estimated. Like the architect who designed a library and then wondered why every year the completed library was sinking a few inches. He forgot to account for the weight of the books. Omission can end up being catastrophic. Make sure you have all the details and have accounted for them in your estimate.
Estimator and executor have different skill sets
This one merely means the estimator and the task performer are not the same person and do not possess the same skills and experience. The estimate runs the risk of being way off the mark if the skills of the task performer are either over estimated or underestimated. It's really best to involve the actual task performer in the estimating process whenever possible.
Not considering the risks
This one is somewhat like omission and somewhat like being overly optimistic. Uncertainty and risk must be taken into account. I've never had a project or a change order that didn't have at least some degree of risk and uncertainty. Be sure to include the proper amount of risk factor into your estimate - depending, of course, on the type of work to be done. Make it a meaningful factor, not a standard factor you plug into every estimate you create.
Rushing for the estimate
When pushed for an estimate on the spot it's extremely difficult to provide something truly useable. A good estimate needs some thought and analysis. The danger is the request for a ballpark estimate that is later included as a final estimate that you are now held to. Beware.
Over padding (or padding at all)
The act of padding is when the individual providing the estimate (who is often also the person that will be performing the work) includes a fudge factor or safety range without your knowledge. This cushion is meant to ensure that he will meet his estimate or even beat it. It's designed to make him look good, but it leaves you with an inaccurate estimate.
When the estimate you make or receive is based on truly best case scenarios across the board, then your chances of meeting that estimate are slim or at least are definitely at a big risk. You would not make a household budget based on everything going perfectly all the time with no risk of an appliance breakdown or a car repair, would you? Right. So don't do it here. Issues arise. Don't go overboard accommodating the risks, but make the estimate realistic.
Never, never, never back into an estimate based on difficult targets and timeframes that senior management hands down to you. That said, if you are forced into this situation, be sure to let them know (write it in blood if you have to) that there is risk in that estimate and you're not comfortable with it. It won't keep you from getting fired, necessarily, should the worst happen. But maybe you'll gain some comfort from it.