Hello,
I don't have tons of experience in this area, but here is my two cents that I hope may help.
Having a client lay everything out at the beginning is a rather unrealistic expectation to be honest. Most times, at least from my limited experience, many clients cannot articulate what it is they exactly need because they just don't know in the beginning. Expectations and needs will change as the application is being built. Most clients have a good idea as to what they 'think' they need, but as a software designer / programmer, I have found that it is our job to guide them based on what we can deliver with our particular skill set and the clients willingness to take a proactive stance in the entire development process and guide us from a business perspective.
Agile software development may be exactly what your looking for. I have recently discovered this methodology and it has helped me tremendously with clients that change directions frequently. The key for me with the XP (Extreme Programming) methodology was frequent software iterations and client interactions.
Agile software development - Wikipedia, the free encyclopedia
Best of luck.