(More thoughts on the Joel Spolsky essay I quoted earlier today.)
I read somewhere that if you ask a hacker how long something is going to take, the reply is invariably, "I could knock that off in a weekend". I was taken aback when I read that, because of the number of times I can remember using the exact same phrase when I was starting my programming career. I invariably thought I could knock something off in a weekend, and I was invariably wrong.
The thing is, that when programmers think of "a weekend", we tend to really be thinking of that weekend that happened once or twice when we were at University. The weekend where the assignment was due on Monday so we stocked up on caffienated beverages, sat down Friday night, and emerged on Monday morning with some code and a serious chemical addiction.
Even drifting back from that memory to more realistic numbers, we're still thinking of twenty hours or more spent coding solidly.
Now let's apply Joel's "two or three hours a day of productive work" to that equation. Our estimated weekend hack just turned into anything up to two working weeks. Is it any wonder that software projects end up being so late?