I often tell my wife my software job is like being a home builder, people think they know what they want, but it's not until they're standing in the thing trying to use it that they figure out what parts work and don't work well for what they actually need... and I spend quite a bit of iterating before we end up with the final working thing -- which is usually far removed from the initial design.