How did I miss this entry by Jason Fried and the folks at 37signals?
Oliver, the solution to not knowing what something is going to cost is deciding what it WILL cost. Discuss the general vision for the project with your client. Decide on the major objectives you want to address. Then say: "We’re going to built the best system we can under the vision with X amount of dollars".
The system is done when you run out of dollars. Or possibly before that if the customer is happy half way through. Or possibly later than that if he likes the stuff he’s getting so much that he wants more.
Comments by David Heinemeier Hansson
I guess this makes it very easy to change the focus from "on-time and on-budget" to "on-functionality". It is just so simple, so clear. I am starting to wonder why I didn’t think of that.