- So that the design/creation/coding will be guided and not arbitrary. The design is complete when it answers all the requirements - no less.
- Some time after the project is completed, the requirements serve as a very good documentation. When you look at a design, you ask "what is it supposed to do ?" before you start figuring out *how* it does it. Requirements answer this question (at least well-written ones).
Requirements also are a "high level debugging tool". Ideally, one person writes the requirements, and another person implements them. Say the project leader of X assigns tasks to A, B, C (each of which can be a whole team) and writes the requirements for them - what X expects to receive from A, B, C. When A, B and C finish, a design review can quickly come up with problems. Where is this requirement implemented ? Where is that one ? Etc. "Where" should precede "How".
This may seem like a dull way to work, but it's very important for long term projects (think 5-10 years), where people tend to come and go. The biggest challenge is not creating the requirement documents in the first place. The biggest challenge is to keep them updated as the project progresses.