CMU 17-636 · Fall 2026
DevOps
Turning working code into software you can ship — continuously, and with confidence.
Mon/Wed · 12:30–1:50 pm · SCR 265
What to Expect¶
Software has never been faster to build. AI tools can produce working code in minutes, and prototypes reach production in days. But writing code that works is not the same as delivering software reliably — there is a widening gap between the two, filled with broken pipelines, silent failures, and incidents nobody saw coming. This course is about closing that gap: building the delivery pipelines, guardrails, and operational practices that turn working code into software you can ship continuously and with confidence.
You will work on an existing brownfield codebase throughout the semester, adding delivery infrastructure, instrumentation, and operational tooling incrementally — the same way you would in practice. Assignments are cumulative: each builds on the last, so the codebase you start wiring up in week two is the one you're operating under failure conditions in week twelve.
It covers topics such as:
-
How do you build a delivery pipeline that supports continuous, safe change? How do you automate build, test, and code quality checks so every change is reviewed by the system before a human sees it? How do you manage releases, versioning, and rollbacks so that shipping is a routine operation rather than a high-stakes event?
-
How do you handle secrets and credentials so that one leaked key doesn't become a full incident? How do you track vulnerabilities in your dependencies and respond without halting development? How do you verify the integrity of what you build and deploy, and how do you limit the damage when something gets through?
-
How do you know your service is failing before your users do? How do you instrument a system with structured logs, metrics, and distributed traces so operators can understand what it is actually doing? How do you ship high-risk changes safely using feature flags, canary releases, and shadow traffic? How do you design production experiments and know when results are meaningful?
-
How do you build a service that degrades gracefully under failure rather than collapsing entirely? How do you discover breaking points before users find them? How do you recover quickly from incidents and translate them into lasting improvements? How do you keep code, APIs, and data schemas evolvable while a system stays continuously live?
-
How do you use AI code generation and agentic tools to move faster without creating systems you can't verify or maintain? How do you build automation that reasons about your system rather than just executing scripts?
You should expect to spend meaningful time at the command line, reading documentation, and debugging infrastructure that doesn't behave as advertised. The course rewards students who treat unexpected behavior as something to understand rather than work around.
Learning Outcomes¶
After taking this course, students should be able to
- design and operate a CI/CD pipeline that supports rapid, safe, and reviewable software delivery,
- instrument a production service for observability — structured logs, metrics, and distributed traces — and use that signal to diagnose and respond to incidents,
- apply progressive delivery techniques such as feature flags, canary releases, and shadow traffic to reduce deployment risk and support hypothesis-driven development,
- manage secrets, credentials, and software supply chain security in ways that limit blast radius and support recovery after a compromise,
- design for operability — graceful degradation, failure injection, runbooks, and post-incident learning — in systems that must stay live while changing, and
- reason about evolutionary design for code, APIs, and data in a system under continuous delivery.
In addition, students will gain hands-on experience with production tooling, including CI/CD automation with GitHub Actions, containerisation and orchestration with Docker, observability with OpenTelemetry, Prometheus, and Grafana, GitOps with Komodo, progressive delivery with OpenFeature and Unleash, and failure injection with Toxiproxy.