Just read a great post by Dan Shipper which was posted on Hacker News.

In his article, Dan writes about how as humans we tend to be unable to estimate complexity and hence we make really bad estimation of how long it will take to do something.

Now let’s talk about software. When a non-technical person attempts to estimate software development time they come armed with their two basic heuristics: complexity based on size and complexity based on speed. But what they don't realize is that software is different. Software is by nature not physical. It exists in the ether. A tiny portion of it shows up on our computer screens from time to time. Because of this when it comes to building web apps (or any type of software for that matter) our basic heuristics break down.

I thought it was a very interesting read, especially for non-technical founders or business people looking to get an IT product/system out.

Countless times have I tried to explain to clients that is very difficult to give an estimate on the amount of time needed only to have them come out with a sweeping statement like,
"I'm sure it will only take you a few days to code!"

PS: noonespecial on HN wrote a brillant analogy that sums it up:
"You are in a closet, looking at a closed door. How big is the house?"