The world does not stand still while long projects go on. Market opportunities change, business directions and priorities shift and technology improves. When the entire project is expected to be captured in a single document, which is written and signed off at the beginning, the project has very little chance of keeping in touch with reality. At the end, the project may be delivered completely to the specification, but parts may be irrelevant or unusable in the changed environment. Lots of time and money are wasted on designing and implementing features that are not needed. In addition, implementation team members learn about the domain as the project advances, but that knowledge cannot be used to specify better solutions as the requirements were laid down at the beginning.
Instead of building huge documents that get out-of-date or wasting time delivering features that are no longer required, plan the project with user stories and don’t go into all the details at the beginning. This allows you to prioritise and reschedule important features when the circumstances change without wasting too much previous effort. Build detailed specifications only when you know what the next thing to be developed is, incrementally specifying the whole solution. This approach also allows you to use the knowledge acquired during previous phases of the project to write better specifications for the next phase.