Main Menu

Final Project Delivery

Carefully review these guidelines. In the past, many teams have lost points they could easily have received by simply neglecting to include or link some of the required materials.

If you have doubts or confusion about any part of these grading criteria, or believe they do not fit the kind of project you are building, or are not sure how they apply to your project, arrange a meeting with me as soon as possible.

A total of 100 points is possible, but don't expect to get anywhere the total possible points. I will generally give about 75% of points possible for a criterion that meets expectations, reserving 25% for projects that exceed expectations.

40 Product from user point of view
  

In general

This category includes features, usability, and documentation. In some cases users will be divided into more than one group (e.g., in a system with administrative and end users). In other cases (e.g., a computer game) there is only one group of end users.

  • Feature set: The features implemented should be well-chosen and effective for the purpose of the application. If the product is meant to replace a manual process, the implemented features should be sufficient to make replacement practical and attractive. If the product competes with other available products, it must be “better enough” in some ways to be a good choice for some identifiable group of users. (In some cases this might be a “good enough” free application to compete with commercial alternatives.) A game should be fun and unique enough to attract players.
  • Usability: The user interface should be designed and implemented so that the application is accessible, efficient, and pleasant for its intended user group. The user group should not be artificially restricted. (For example, while it could make sense to create an application specifically for iPhone or for Android, a web service that should be available to everyone should not be restricted to one mobile platform.) To the extent feasible, the product should be accessible to people with disabilities.
  • Adequately documented: The amount and kind of user documentation required will vary a great deal depending on the application and users. An application designed for occasional, casual use should be usable without any external documentation, but should have extensive internal documentation. An application for managing critical information may need an extensive user manual. If an application has multiple sets of users (e.g., administrators and end users), they may have different documentation needs. You should consider user needs and create what is appropriate.
  • Robustness: Your product should be of high quality. I'd rather have fewer features than more features with bugs. (See also 'tests' under product for future developers.)

Adapted to Project 1, Spring 2017

This project is intended as a minimal viable product (MVP) of a team formation program, and as such I expect that you will have focused on prototyping some aspects of the application and done a bare bones implementation of others. Some teams may have focused on the team selection algorithms, and others may have focused on the user interaction, or on something else. If it is clear what you have focused on and why, I will adjust my expectations for other aspects of the product. The whole thing must work (that's the 'V' of 'MVP'), but some parts may be much more 'M' than others.

50 Product and project for future developers and maintainers
  

In General

This category includes materials needed by someone who might fix or extend your product. It includes the organization of your repository and the process for building and deploying your product, as well as aids such as test cases and documentation used by developers.

  • README.md: The README file of your repository should be brief but should give me everything I need to determine what your project is, who its authors (you) are, and a basic outline of what the build process and the resulting product are. It may contain links to additional material.
  • Requirements and design documentation: A person who considers fixing or extending your system needs to understand what it was intended to do (requirements), including not only what has been implemented in the current release but also plans for future development. They need to understand how the software is organized, sufficient to know what code they might need to read to add or fix a feature, and what code they can ignore, and they need to be able to understand how a new feature or change would fit into your system and be consistent with it (architectural design).
  • Build and deployment process: It should be as easy and understandable as possible to check out your repository, build your product, and deploy it. The build process should be as automated as practical. Manual steps should be clearly documented, starting with a README that may refer to further documentation as needed. Your repository should be organized in a way that supports the build and deployment process. For example, target-specific and platform-specific choices should be factored out, not mixed in with core code of your application. Your system should not have unnecessary dependecies, and to the extent possible the repository should include only sources for the system under development. Intermediate products (e.g., compiled code) and external dependencies (e.g., libraries) should be avoided as far as possible.
  • Tests: A developer should be able to easily test that they have created a working version of the application and that whatever changes they have made have not broken it. Tests should be automated to the extent practical, and should be documented. Manual tests require more extensive documentation than automated tests.
  • Organization: Your repository should be organized to support the needs described above, e.g., it should be easy to find code that needs to be changed, and the organization should support your build and deployment processes.

Adapted to Project 1, Spring 2017

  • I have increased the weight of this category from the usual 40 points to 50, in light of the product being intended primarily as the basis for further development.
  • While I appreciate automated tests, I will be lax about requiring them until we have discussed testing in class.
  • As we discussed in class, the amount of required documentation is not voluminous, but it must meet the needs described above.
10 Process
  

In General

A good process will typically be reflected in the product, and a poorly managed project will almost always lead to problems in the product, but there are a few things that I want to check independently.

  • Developer logs. I prefer these in the repository wiki, but versioned files in the repository are ok if your README tells me where to find them. I insist on versioned files because I want to see that the developer logs were incrementally updated during the project, now fabricated at the end.
  • Version history. I want to see that each team member has been making regular contributions, and that the product was not cobbled together in a frantic final day of hacking. If there is a legitimate reason that the version history looks different (e.g., June and Joe pair-programmed and always committed from June's account), this should be supported with documentation, including commit messages. Commit messages should be meaningful.
  • Project management. Provide any other evidence useful in seeing that your project was well-managed. This could be meeting notes, a narrative account of your progress, a Gantt chart showing planned and actual progress, or something else appropriate for your project. I'll expect to find this in your wiki unless your README file tells me to look somewhere else.

Adapted to Project 1, Spring 2017

  • I have reduced this item from 20 points to 10, since I am requiring less documentation of process.
  • Developer logs are not required.
  • I will still look at the git history. If it's wacky, you should explain it.
  • You are not required to provide progress logs or a wiki, but you may do so if it helps explain the state of the project and the git repository.