Syllabus#
Introduction to full-stack application design and development. Students will work in project teams to design and build complete, working applications and services using standard tools. Topics include best-practices in design, development, testing, and deployment.
The course outline is also published on outline.uwaterloo.ca.
Prerequisites#
This course is restricted to Computer Science students, and you must have successfully completed CS 246 Object-Oriented Programming before taking this course. You should be able to:
- Design, code and debug small C++ programs using standard tools. e.g. GCC and GDB.
- Write effective unit tests for these programs. e.g. checking for a range of invalid conditions.
- Demonstrate programming proficiency in C++, which includes:
- understanding of fundamental OO concepts. e.g. abstraction, encapsulation
- using classes, objects, method overloading, and single inheritance; polymorphism
- understanding how to use assertions, and
- knowing how to manage exceptions.
You must be enrolled in one of these programs: H-BBA & BCS Double Degree, H-Computer Science (BCS), H-Computer Science (BMath), JH-Computer Science (BCS), JH-Computer Science (BMath), H-Computing & Financial Management, H-Data Science (BCS), or H-Software Engineering.
Learning Objectives#
This course includes a mix of lectures, demos and project activities. The course project is a significant element of the course. On successful completion of the course, students will be able to:
- Work effectively as a member of a software development team.
- Use an iterative process to manage the design, development and testing of software projects.
- Design and develop different styles of application software in Kotlin, with appropriate architectural choices.
- Include online and offline capabilities in your application, leveraging local and remote storage.
- Design services that can provide remote capabilities to your application.
- Produce unit and integration tests as an essential part of the development process.
- Apply debugging and profiling techniques as required during development.
Required Resources#
There is no required textbook for this course. All required course materials, including lecture slides, are freely available on the course website.
Computer Specifications#
To participate in coding and other project activities, each person on your team requires a capable and relatively modern computer. You must have administrative rights on this machine, which disqualifies the use of lab computers. A notebook computer is recommended so that you can work on your project in-class.
Recommended minimum specifications
- Windows, macOS or Linux
- 8 GB of RAM or more
- 75 GB of free drive space
Online Resources#
We use the following online websites.
![]() |
Learn Team registration & tests. Grades are recorded here. |
![]() |
Piazza Forum software. Course announcements, ask questions. |
![]() |
GitLab Store your project materials here. |


