CS 398: Application Development (W22)

Course Description

This course explores knowledge, skills and strategies required to build complex full-stack applications. Using an iterative development methodology, students will work in project teams to design, develop, and test applications and services. Standard development tools and approaches will be used to ensure code quality and performance at every step of the development cycle.

Prereq: CS 246; Computer Science students only

This is a new course! It will be offered in Winter 2022 as CS 398: Application Development. Starting in Fall 2022, it will be regularly offered under the course code CS 346: Application Development. These two courses are otherwise identical.

This website will be under near-constant revision leading up to the start of class.


You must have completed CS 246 prior to taking this course, and you should be able to:

  • Design, code and debug small C++ programs using standard tools. e.g. GCC on Unix.
  • Write effective unit tests for these programs. e.g. informal I/O tests, unit tests.
  • Demonstrate programming proficiency in C++, which includes: understanding of fundamental OO concepts. e.g. abstraction, encapsulation; knowing how to use classes, objects, method overloading, and single inheritance; polymorphism; understanding how to use assertions, and how to manage exceptions.

Learning Objectives

On successful completion of the course, students will be able to:

  • Work effectively as a member of a software development team.
  • Use an interactive process to manage the design, development and testing of software projects.
  • Design and develop different styles of application software in Kotlin, using the appropriate architectural and design patterns.
  • Design services that can provide remote capabilities to your application.
  • Apply debugging and profiling techniques to address design and performance issues.
  • Produce unit and integration tests as part of the development process.


There are no required textbooks in this course. All material will be presented in-class or published here. The bibliography contains a full list of relevant but optional readings.

Course Progression

This course is intended to be an optional intermediate course between CS 246 and CS 446. It is not a prerequisite for any other course, but our hope is that you find the skills and knowledge that you develop here to be useful in a number of other programming and software engineering courses. From our point-of-view, it’s a great launch point to some other courses e.g. CS 349, 445, 446 and 447.

Related courses