There are some really great answers already. Here are a couple more remarks based on having made my living doing outsourced development like this for most of the last twenty years.
Without an adequate, written, agreed-upon specification, doing fixed price contracts is a fast way to lose tons of money.
My wife and I had a custom software development firm. Around 1998, we were approached to do a port. "We don't really have a spec or even a feature list, we just need a Mac program with the same features as our Windows version." So we looked over the Windows version, proposed a price, dickered a bit, and agreed on a price. And then it turned out that not only did the liars have a feature list, but there were a ton of hidden features we hadn't noticed during our review that were very hard and time-consuming to implement. Our employees' salaries alone to complete that project cost us three times our revenue for it.
My experience has been that people who don't provide a spec, and aren't willing to pay you to write one, are either amateurs or trying to get something for nothing, and both kinds of clients are big trouble.
Don't write a specification and give it to the client for free.
It's very tempting to do that so you can get agreement from the client and protect yourself - but I used to do that, and decided it's a mistake. One time I did that, I included information in the spec about which I had particular expertise. The prospective client switched to a cheaper development team; the info in the spec filled in the missing gaps in their knowledge - and the substantial work I'd put into the spec was in the toilet.
I now consider specifications and design documents to not only be work products, but highly specialized ones for which I charge a much higher hourly rate than I do for simple programming. That way, if the client wants to put them out for bids by cheap code monkeys on eLance, no hard feelings.
Actually, in the last eight years, I've solved the problem very simply: I no longer do fixed-price projects and have an hourly rate floor I won't go below.. Since making that switch, I'm far happier, make way more money, and the skeevy clients go somewhere else.