The very fact that project specs are so rarely kept up-to-date is a strong reason to reconsider their form, at least when they're presented as a printed document. My all-too-painful experience with such things is that they're usually out of date before they're even printed and distributed. Everyone thereafter is likely to have a different version after they've been hand-annotated.
What is the purpose of a "project spec" anyway? I guess it might include some or all of
- Architecture
- Business Requirements
- Performance Constraints
- External Interfaces
- Legal Constraints
Potentially some more besides. Without going into the (dubious) wisdom of trying to fix all the above before coding starts, I'd be surprised if any of those categories did not change during the project lifetime, for any project large enough to have a specification written at all.
Is there any way that the requirements given could be delivered in the form of an executable test? If the requirement can't be expressed in the form of a set of tests that define its being met, then it's probably not a well-expressed requirement at all, and the spec is therefore incomplete.
I'm wondering if something like Ward Cunningham's FIT framework might not be a better way to do things? So the criteria are held in a Wiki, with the tests that define acceptance on the same page.
What kind of system or project would not be susceptible to that approach?