Why don't you people get the spec finished before starting to implement anything ?
The best way to test a spec to see if it actually makes any sense is to (try to) implement them. It's only after you've spend a lot of energy implementing something that you realize there's a much better (for some value of 'better') way!
If you write code while not having a finished spec you're probably writing code that will get deleted on further revisions of the spec so you're basically wasting time.
Not really. Image you're in a fork of the road. You don't know which path to take. You turn right. It's a dead-end. You return to the fork in the road. Have you wasted time? After all, you're not any closer to your target. It may look so, but you've gained valuable knowledge - you now know which road not to take. Wasn't it Knuth who wrote that after you've finished a program, it's time to throw it all away, and start over again, using the gained knowledge to write something better?