Your requirements document needs to focus on the user’s goals. They should not be marketing’s list of features 'we’ve got to have' because the competition has these features. They should not be a list of things the programmers think ought to be included 'because we can add those things for very little cost.' Feature bloat does not benefit the user.
Test-driven development or TDD is a widely accepted practice used by agile software development teams of many flavors – not only Extreme Programming teams. For each small bit of functionality they code, programmers first write unit tests, then they write the code that makes those unit tests pass. TDD is seen as a design tool, since it forces the programmer to think about many aspects of each feature before coding.