CSE 477 Solution Overview Document Guidelines

Introduction: The goal of a solution overview is to sketch out the for an educated technical reader what the overall problem was, what your overall solution to the problem was, and how your implementation is structured.

Your audience: The intended readers of a solution overview are your peers: computer science professionals with considerable coding experience. Imagine using this document to give to new coders joining your project team to read in order to quickly help them see the "grand scheme" of your codebase; or maybe as the README when you mothball a project that might be taken up by others (or yourself) later on.

Outline of Solution Overview

Intro: Introduces the purpose of your software solution and its key features. Start by introducing the problem area generally, then work towards bulleting out key requirements of any viable solution. Then intro your solution vision, i.e., your software product that obviously solves the problem, including a bulleted list of is key features or selling points. Idea is that you need to get a reader up to speed on what this is about and what your vision is. A screenshot can be useful to include.

Technologies Overview: Introduce all of the technologies you used in your solution. This would include libraries you import, IDEs that you use, frameworks used, etc., etc. Basically anything that you are drawing on or incorporate in implementing your solution. First bullet them out, then describe each on in a short paragraph where you talk about what it does in general (goals/purposes), who developed it, where to get it, what version you used, and what role it actually plays in your code, i.e., what parts you used it for.

Architecture Overview: Here you start with the "big picture" of how your software product works. Probably you'll start with a graphic showing the main conceptual pieces (modules) of your program and how they related to each other. Then you walk through each of them, describing the overall module and the functionalities it provides. After reading this, one should have a strong general understanding of your implementation approach.

Implementation Details: Now you'll get down to some nitty gritty details. For each of the modules above, sketch out the internals a bit, e.g., the Classes the are found inside each module and the key (public) interfaces that they provide. After reading this, a skilled programmer should have a strong overview of how the codebase works, and therefore be able to jump in and contribute productively in short order. Don't talk about detailed internals, just key classes, what they do, what other classes they interact with in producing key behavoirs of the app.

Completion Level: A table based on the one in the assignment statement that succintly states the completion level of the project. Here is an example of what I mean for reference:

Functionality Level Completion Comments
Level 1: Basics 100% Complete Fully implemented and tested all required elements
Level 2: Usable Calc 70% complete Got the memory keys working, but couldn't figure out the printable receipt function. However, I did do considerable work on this (see code), and therefore have awarded myself 20% completion of this second half of this level. The "print" key is disabled to avoid crash. Normally, pushing this button would cause the receipt window to pop up.
Level 3: Extras 0% complete Did not have time to work on this.

* Note: on some projects, I already ask you to do some sort of "Functionality Completion Checklist". In this case, the "completion level" section could just make some general comments on the current completion level of the project, and then state "see attached completion checklist" to refer the reader to the details.