Yes it is great to get a specification. My first sold project ever was in the early 80's, a software to teach music to kids, that evolved from what we (the programmers) had understood as half a dozen independent exercices that we could easily code in 2 month to a 4 month nightmare resulting in a complete music school management program, tracking kids results, offering appropriate exercices for their level... all that on a Apple II with no hard disk drive!
No you will _never_ work with a perfect specification. And in any case you will never be allowed to stick to it until the end of the project. There is always a good reason to change a spec. I once worked for a Space Agency, from which you'd expect Top Quality, Strict Processes and the likes, and as I was leaving, I was discussing with one of their long time programmers and complaining that I never had a good spec, and he aksed me "A spec? I never had a spec in 20 years here!"...
The solution? There is no perfect solution, we live in an in an imperfect world after all. I found that writing a spec is necessary, but then prototyping, showing results early and getting feedback from the users (_all_ the users, not just the guy who will pay for the project) is the best way to catch problems with the spec early.
<code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>