Originally Posted By: tanstaafl.
One aspect that no one has mentioned is that even though you have the idea in your head of what you want to do, by the time it is done it will be very different from what you currently imagine.

The recognition of that fact is one of the prime drivers behind the Agile software development model, because "by the time it is done" changes meaning. There's none of this "throw the spec over the fence and wait for two years before you see the results." Instead you (the client) get frequent updates that you should be immediately able to use, so when reality starts to depart from "the spec," you can start to make adjustments much sooner in the development lifecycle.