"The less effort you spend on spec, the less precise it will be. The more complete spec you want upfront, the more effort you will sacrifice on Requirements Definition phase. The sad fact is that The Spec WILL be changed. Developers will find conflicting functional requirements, market will change, customer came to you with new ideas s/he want to see in the system right now instead some other already defined features. World is not an Ice, world is a liquid, it changes quickly and unexpectedly. Business software development is not mathematic, it is imprecise and chaotic by the same reason: world around the system changing every day.

So huge part of the effort spent on The Spec will be wasted. Moreover, even existence of such desirable and hopeful thing as The Spec hurts software development. The Spec impedance changes, but software development embraces changes, so The Spec should not be created by wise development team. OK, but what is the alternative?

Solution is simple, let’s call it “Details On Demand”. In many cases output is less important than the process itself. System Analysis process more important than The Spec. During this activity you learn a lot. You learn who will use the system, what problems that people have, what are they hopes and desires, how to make they life easier and what are you going to build anyway. Are you sure you need to know on May whether button “Hide Old Leads” required on Leads list, if you will work on this functionality on November? I don’t think so. There are so many more important questions and areas to address. Forget about complete details, you don’t need them upfront." (Target Process)

Requirement changes. Spec changes.Change happens. Deal with it. It's part of a daily  development process.

So the important thing lies in the process. Use automated tools as much as possible. Tests. Design as needed. Have an open atmosphere at work. Do code review.