Software Engineering

Iteration 1: Requirements

Due on October 1st at 11:59 PM.

The master branches of your group’s repository and wiki will be pulled at that time and its contents will be graded. Be sure that all materials – documentation, code, build instructions, etc. – are available in that repository. If some materials cannot be placed in that repository, contact your instructor for instructions on how to compensate.

Please be sure to follow appropriate etiquette when interacting with your group.


The purpose of this iteration is to formalize the requirements of your application. You must know precisely what you’re trying to accomplish in order to complete your project (or judge whether you were successful). As a team, you will describe the domain of the problem you are solving, the manner in which you intend to solve it, and how the user is expect to interact with your software when it is complete.

There will be no code in your submission. This part of the software engineering process is about understanding the problem and formulating a solution; it isn’t about programming.

Formalizing Requirements

The formalization of your requirements should tell a story about something you intend to use software to improve. You might describe a problem and how you intend to solve it. You might describe a game and how you intend to make it playable. While the specific approach depends on your problem domain, the formalization of requirements will be the same for each project group. You will use the wiki associated with your project’s GitHub repository to present the following materials:

  1. A vision statement for your project. This doesn’t have to be different from the statement in Iteration 0, but you may update it if you wish.

  2. A feature list enumerating the distinct features of your application. This will expand on your vision statement and essentially give you a to-do list. Features should be separated into a list of core features (which are to be implemented earlier as definite functionality) and extended features (which are wishlist items and will be addressed if time permits).

  3. A set of UI sketches indicating how the user interacts with the application. Every project has some form of user interface; your UI sketches should show how the user would navigate that interface to use the software for its intended purpose. These can be scans of hand-drawn diagrams, but they must be informative. Use concrete examples of data in your UI sketches; don’t just put ellipses everywhere that data might appear.

  4. A domain analysis which describes the features of the application domain relevant to the project. There are a variety of UML diagram forms which could be used for this purpose. Often, a UML class diagram or a UML entity relationship diagram is a key component of a domain model. You may also include other diagrams, informal figures, or prose.

  5. If necessary, you may wish to describe use-cases for your project. You may use UML use case diagrams and formal UML use-case syntax. Alternatively, you may produce storyboards (much like the UI sketches above) to illustrate how an actor would complete a task in your application. You should also describe the actors in the project. Do not include trivial cases (e.g. login) at the expense of more complex and domain-specific cases.

  6. Give an architecture proposal. Describe the devices and components involved in your project and describe how they will interact, preferably with a UML deployment diagram. Identify the major software packages you will use in this project; this includes libraries, frameworks, build tools, and so forth.

  7. If your project is similar to existing applications (e.g. a side-scrolling platform game), name a few such applications and identify what makes your project unique (e.g. “Unlike the Mario Brothers series and similar platform games, this project includes a realistic physics engine. This has a significant impact on the player’s experience, related game features, and level design.”).

The success of a group in this course can often be predicted by how complete the project’s requirements are! If your group is not in agreement about what the software should be, you might find out only after a lot of wasted time in design discussions or debugging sessions. It’s important to be thorough in this phase of your project, since the work you do here guides the rest of your project. Some examples of common mistakes are:

In general, the purpose of this documentation is to describe to the audience what your software will do and how it will do it. Although you will work on this same project throughout the semester, it should be possible for you to hand your requirements documentation over to another group and allow them to complete the rest of your project without having any major questions.


A fairly complete example of this documentation from a previous section of this course at a different institution can be found here.


Iteration Review

You are also required to submit an iteration review which assesses the work you and your peers completed and whether things are going well for you in class. This review is private; its content will not be shared without your consent. Click here to submit your Iteration 1 review.

It is in your interest to provide honest feedback, even if that feedback isn’t the most generous or positive; if there’s a problem, your instructor needs to know!