Guidelines
You and your team will be designing and building a non-trivial desktop or mobile application that solves an interesting problem for users. You will spend the first few weeks defining your users, a problem to solve, and the features you want to implement. You will then spend the rest of the term iterating on your project and delivering features.
We will provide you guidance throughout the term! We will discuss team-practices e.g., how you should work together, how to track a project, and development-practices e.g., how you should structure your code; how to synchronize data with a database; how to write unit tests. We’ll introduce technical topics, and even provide samples code and demo how to do things during labs. You will also have time in-class to work together, and ask the instructor for help when you’re stuck.
The following sections present guidelines for how you will work. The topics below are taught in this course, and you are expected to apply them to your project.
Team Composition
You will work in teams of four. The following constraints apply when forming teams:
- Team members must be registered in the same course sections, and will be on-campus for the term. No exceptions.
- Everyone agrees to meet regularly in-person, and attend project activities.
- Team members must agree to a team contract that you will establish when you setup your project.
See forming a team for details on forming and registering a team.
Best Practices
You and your team must use software development and project practices that are discussed in-class. Required practices include:
- Project tracking. All project assets including source code must be stored in a GitLab project.
- Team meetings. You and your team will meet at least twice per week. You will keep minutes of these meetings.
- Tracking your work. You are expected to keep a developer journal, and you must log details of your work as issues in GitLab.
- Code comments. You are expected to add code comments where appropriate and useful.
- Unit testing. You must write comprehensive unit tests to accompany your source code.
See best practices for details on each of these practices.
Technologies
You are expected to use the following technology stack.
- Kotlin as your primary programming language. SQL is also allowed where appropriate.
- Gradle must be used for building the project, executing unit tests, and running your application for demos and testing.
- Compose Multiplatform and/or Jetpack Compose should be used for building user interfaces.
- JUnit and the Kotlin test extensions should be used for unit testing.
- SQLite or Supabase should be used for database requirements.
- Ktor should be used for networking and web api requests.
See toolchain for more details on this tech stack.
Design
You are expected to leverage the concepts that we will discuss in-class:
- Design a layered architecture, using
MVVM
.Clean Architecture
is also allowed with instructor permission. - Demonstrate design principles that we discuss in lectures e.g., loose coupling, high cohesion.
- Use suitable design patterns that will be demonstrated and discussed.
These topics will be addressed in lectures.