Depends on how big the project is and (like all architecture decisions) what the constraints are. A good start is
- a short description, a "one pager"
- a context diagram -- where are the
boundaries, what interacts with the
system?
- use cases/user stories
- a GUI prototype or paper prototype,
if applicable
- a description of the needed
nonfunctional requirements
(performance etc.)
Best of all is to have an acceptance test, ie, a testable statement of things that can be checked, along with an agreement that when those things are done, the project is complete.