Course Project

This document outlines the guidelines for the course project. The actual project hasn’t been announced yet! We’ll discuss that in-class at the start of week 02.

Specification

Every project team will be working on the same project, and the details will be revealed in-class (around the start of the second week).

You will be given a very brief specification, but your team is expected to speak with users, do market research and brainstorm to determine exactly what features to include – every team should end up with their own unique design.

Project Teams

As a member of a project team, you will implement a fully-featured application using technologies introduced in this course. The type of application and exact requirements will vary term-by-term, and will be provided in a separate document. This document outlines the common structure that will be used each term.

Course enrolment for this course is closed at the end of the first week. Anyone wishing to join in the second week of the term can only do so if they join as a team, with instructor consent.

Forming your team

Teams must consist of four people. You will not be assigned to a team; you are expected to self-select into teams in the first week of the course.

Team members must all be enrolled in the same section, since you will be working your projects together during classtime. All team members are expected to attend class.

Ideas on how to do this:

  • Post on Piazza! We have a forum thread where you can introduce yourselves.
  • (In-person) If you’re in-class, introduce yourself to people sitting near you.
  • (In-person) Hold up a card with your skills and look for matches. e.g. KOTLIN, TESTING, DESIGN.
  • (In-person) Lottery: we can draw numbers and pair you up!

A successful team is one where the members work well together. Look for people that you think you will get along with, and that have similar work habits. Technical ability is important, but consider the collective skills of the team – you want everyone to have the ability to contribute. The most important thing for this project is that you work together, support and help one-another!

Team Dynamics

As a team, you play the role of product managers, designers, developers and testers of your application. TAs and course staff will take on the role of Users of your application. You will regularly meet with them to clarify requirements, set goals, and demonstrate your progress.

Note that everyone on a project team is expected to participate and contribute to your project. You are also expected to act professionally with your team members at all times (see the policy statement on ethical behaviour).

Team Meetings

As a team, you agree to hold weekly progress meetings (either in-class, or online as appropriate for the circumstances). You will need to document these meets and keep notes on what you’ve accomplished as the project progresses. TAs or instructors may attend one or more of your meetings through the term (details TBD).

Project Tracking

Planning

You are expected to maintain your project and all related material in a GitLab project space. You will provide access to this project space to the course staff, who will review it periodically to assess your progress (and part of your grade will be based on materials that you produce and publish to this project space). You agree to keep this project space private and only available to your team, and course staff. You agree to not share directly with anyone directly or indirectly who is taking the course.

Requirements

You will be provided with an initial set of requirements. You are expected to expand on these through various team activities – reviewing other similar applications, brainstorming with your team, and interviewing the TAs or instructor (who may act as potential customers in this role). From this, you will develop your own personalized set of requirements.

There is no single “correct” set of requirements; there are always multiple ways to design an application, each with its own set of features and tradeoffs.

Sprints & Iterations

We will be using an iterative development model that supports short iterations and feedback cycles (each iteration is two-weeks long, and called a “sprint”).

As part of this process, you will:

  • Iteratively design and build a multi-platform desktop application that meets defined requirements, plus additional features that you have identified as useful.
  • Develop a web service to provide remote functionality, and refactor your application to take advantage of this service.
  • Write units tests that allow for extensive testing of your features. Provide adequate test coverage during development.
  • Write build scripts that support automated testing, building and packaging your application.

The process, and each requirements, will be discussed in more detail in lectures.

Deliverables

You will have team deliverables due approximately every 2 weeks, which will be graded. These will include:

  1. Artifacts: An outcome from a particular project activity. e.g. Project Plan, SRD. Architecture diagram. These will be typically stored in your project in GitLab.
  2. Demo: A demonstration of what you accomplished during the sprint, including a demo of working features and unit tests. The demo may also require demonstrating how you tracked project activities during the spring (i.e. did you have issues logged for all features? are they up-to-date?) This demo will either be done during class (typically Fridays), or online if required due to COVID.

All project members are expected to contribute to all deliverables, and everyone is expected to be present during in-person demos.

Choice of Technologies

You must utilize the technologies introduced in this course for your project.

Category Technology
Project Tracking GitLab (git.uwaterloo.ca)
Programming Language Kotlin; Groovy
Frameworks JavaFX or Jetpack Compose; Ktor or Spring Boot; others with instructor approval.
Build system Gradle or Maven.
Testing JUnit; others with instructor approval.

You will likely not be able to use the lab computers for this project, so you will need a personal computer that is capable of running these tools. Any modern computer with at least 8 GB of RAM should be sufficient.

You may also need other program assets e.g. icons, on- screen graphics, sound effects. You can create these yourself, or you can use anything that is licensed for non-commercial or educational use. You are expected to respect applicable copyright for these assets.