Software is an Alien Artifact
I have thought of an analogy that helps to explain why estimating software tasks can be so difficult. Imagine you work for the FBI or some such agency, and you recover an alien artifact from a UFO crash site. It's a seamless chrome box with no identifying marks or salient features of any kind. It doesn't rattle, it doesn't appear to do anything. Your task is to open this box, and your boss's boss wants it yesterday. How would you estimate this task? It might be efforless: grasp one end of the box and pull a little bit and it just swings right open. But what if that doesn't work? You might try hitting it with a hammer. You might run over it with your car. Let's say you spend a week and you've tried everything from bullets to high explosive and nothing even makes a mark. Then your buddy from down the hall walks in and goes, "You wanna go for sushi?" And the box just swings open on its own like that thing from "Hellraiser." Who knew that was the passphrase? And on a bad week, writing software is just like that.