Provide an overview of the problem that the group set out to solve, the original goals of the group, and the accomplishments made against those goals.
Walk a potential user through the final system, describing how the system behaves from a user's point of view. Provide screenshots.
List the specific functional and non-functional requirements implemented, target environment, etc. Also include any potential requirements that would be natural extensions but are beyond the scope of a semester-long project.
Provide a bird's-eye view of the software architecture.
Using UML class diagrams (or similar graphical depiction), present the subsystems of the architecture and their connections, omitting details about their specific interfaces. Each subsystem should correspond to a C++ class. Also list the subsystems, with a brief description of the functionality of each. Describe how the subsystems and components relate to one another (i.e., who instantiates whom, etc.).
Describe how to build your system, including all relevant information, such as the names of files and directories in CVS, the locations of the makefiles, and/or the IDE used. Give enough detail so a future developer could look at your files, make sense of them, build your executable, and improve the source code.
Document any improvements to the code that you would suggest, such as ways to clean it up, make it more robust, reorganize it, etc. Again, write in order to hand off the code to a future developer.
Describe the team organization (hierarchical, egoless, etc.), how often meetings were conducted, whether meetings were scheduled on a regular basis or as the need arose, how information was communicated between team members, how the sharing of source code was done, how decisions were made regarding dividing the work, etc.
List the roles and contributions of each team member.
Provide a weekly breakdown of tasks accomplished over the semester.
List the original risks that were anticipated, along with their corresponding contingency plans. Did any of them become a problem? Did any new risks manifest themselves during the course of the project? How were such problems handled?
Take some time to think through what you have learned through this experience, and document those lessons learned. Answer questions such as