A few days ago a sales manager asked me that question. But at this moment I didn't know a answer which he can understand. He isn't a programmer!

At the moment I work on a product which is over 8 years old. Nobody thought about architecture or evolvability. I have a swamp of code in front of me every day which is not tested. Because of that, time estimates are very difficult for me. 

How I can describe that problem to an salesman? Not only my swamp-code-problem, but general!

Ask him how long it would take to find his way through a maze. Not any particular maze, or any particular size of maze - just "a maze".

Programming is in some ways similar. You can't be sure how long it will take until you have fully explored the problems you'll need to solve. The only time you can be sure you've done that is when you already have the finished product.
