CS 489-001: Software Delivery

Software development used to be a highly fragmented process. After developers have completed a set of enhancements and defect fixes, a candidate version of a release would be handed off to Software Quality Assurance (SQA) teams, who would check the candidate for defects. Next, the SQA team would hand the RC off to release engineering teams, who would prepare the software for release. After completing the official release process, software operators would install and configure the RC in production environments, where users can finally interact with it.

This fragmented approach to software engineering has largely been abandoned in industry for two reasons. First, since large quantities of enhancements and defect fixes would be grouped together into one release candidate, releases would encompass a large amount of change in the software system. These large releases were deemed risky both from a development organization perspective (i.e., field-reported defects can invalidate weeks or months of development effort) and a user adoption perspective (i.e., with so much change in the software system, it may be difficult to migrate existing installations to the new release). Second, the stakeholders on different teams would solely focus on tasks that fall within their purview, often leading to a lack of oversight of the whole development, release, and operations processes.

Instead, modern development teams have embraced the devops mindset, i.e., a holistic view of the development, release, and operations processes. Enabling this mindset is a vast array of development, release, and operations tools, techniques, and practices. XebiaLabs has provided an overview of the popular tools in the rapidly growing area of devops (see figure).


Learning Outcomes

The main objective of this course is to provide students with the skills that are needed to design, develop, and operate the integration, release, and deployment pipelines that are at the centre of modern devops-based software releasing practices. Modern software delivery teams are tasked with selecting appropriate software delivery tools and assembling them to produce integration, release, and deployment pipelines that connect development, release, and operations processes. Through the course material, students will gain experience in developing integration, release, and deployment pipelines. More specifically, students will:


Course Content

The course is comprised of four modules. In addition to laying out course expectations, the Logistics & Foundations module introduces students to (a) the key terms in software delivery and (b) the tools that laid the groundwork for the recent devops migration. These include version control systems that are used to manage software contributions and build systems that are used to manage internal and external dependencies. In the Integration Pipelines module, students will be introduced to concepts and tools that are used to automate the release pipeline. This includes concepts like quality gating and continuous integration. The Infrastructure & Deployment module covers approaches to preparing and orchestrating encapsulated deployment environments (virtual machines, containers), as well as approaches to orchestrate their deployment automatically (e.g., Infrastructure-As-Code). Finally, in the Deployment Strategies module, students will be introduced to risk mitigation strategies for deploying releases to a large (potentially global) user base. We will cover popular strategies for mitigating failures (e.g., blue-green deployment), continuous experimentation (e.g., A/B testing, canary releases), and resiliency (e.g., resiliency (a.k.a., chaos) engineering).


Evaluation

Students will be evaluated using the following breakdown (subject to change):

Technical Quizzes (10%)

Each student will individually complete a series of technical assignments during scheduled classes. These assignments will test their understanding of technical content that is covered during the prior and/or current week of class.

Term Tests (24%)

Over the course of the semester, we will have two scheduled tests that occur during class and/or a pre-scheduled time. Each test will be worth 12% of the final grade.

Final Exam (40%)

Formal, written, in-person final exam. Will be scheduled for 2 hours and 30 minutes. Students will be permitted to bring a two-page crib sheet, where they may write on all four surfaces. All other electronics and devices are not permitted.

Project (26%)

Students will work on a project in small teams (number of members TBD). The task of each group is to understand and improve upon the integration and release pipeline of an open-source software system. Groups will be graded on the following set of deliverables:


Class Schedule

Classes will be held weekly on Mondays and Wednesdays at 14:30–15:50 in MC 4042.


Contact

Shane McIntosh
Email: [first_name].[family_name]@uwaterloo.ca

To receive a speedy response, include [CS 489] in the subject of your emails.