Student projects serve several purposes.

First, they give real-world application of multiple concepts and pieces of knowledge learned up to that point. Projects should involve the integration, or even sum, of everything that has been taught so far in the course. This reinforcement of skills is a great way to solidify a student's ability to apply what they've been learning.

Second, each project should accurately demonstrate the student's competence in one or more branches and levels of the course's Skills Tree. Receiving a passing mark on a project is akin to earning one or more merit badges; a representation of their competence in the specified areas and their "hireability" as a developer in the tech community

Third, projects contribute towards the creation of a portfolio to show prospective employers.

Any time a project is created, they should meet all three purposes. As such, all projects created by instructors should meet the following criteria:

  1. They should integrate at least one branch and level of that course's Skills Tree. The chronological progression of projects through the course should involve moving up the competency levels of each branch in the Skills Tree.

  2. Each project should accumulate skill usage so that projects become increasingly more complex and integrate more parts of the skills tree. This ties together previously learned skills with new ones and creates more impressive projects, as well as reinforces previous skills that have already been passed off. Naturally, time given for project completion should increase throughout course.

  3. Each project should have an established method for evaluating completion and scoring. Scoring should be as objective as possible, using one or more of the following methods:

    1. Visual Inspection. The student's project passes a visual evaluation, generally follows good UI/Design practices, and is reasonably bug-free when manually tested.

    2. Unit Tests. The student's code is able to pass pre-written unit tests that test a variety of use cases for a coding challenge or problem. The student should either be given the tests ahead of time or should be allowed multiple chances to refactor their code in order to pass all the unit tests.

    3. Demonstration. The student is able to demonstrate to an instructor, TA, or the class a working app/program that fully meets a set of pre-defined requirements or user stories.

    4. Code review and interview. The student is able to pass an inspection of their code and answer all questions relating to the skill levels under test to satisfaction.