Distributed Systems

Most software is now distributed in some sense. This course is meant to serve as an introduction to distributed systems, emphasizing techniques for creating functional, usable, and high-performance distributed systems.

This course aims to: (1) provide students with an understanding of the principles and techniques behind the design of distributed systems, such as locking, concurrency, scheduling, and communication across the network; and (2) provide students with practical experience designing, implementing, and debugging real distributed systems.

Major themes covered in this course include scarcity, scheduling, concurrency and concurrent programming, naming, abstraction and modularity, imperfect communication and other types of failure, protection from accidental and malicious harm, optimism, and the use of instrumentation and monitoring and debugging tools in problem solving. As the creation and management of software systems is a fundamental goal of any undergraduate systems course, students will design, implement, and debug large programming projects.

Syllabus Edstem Gradescope PollEv

Note regarding waitlist

If you are on the waitlist, we encourage you to attend the first few classes. Typically there is a lot of churn in enrollment in the beginning of the semester. It is possible that the waitlist will clear somewhat in the initial few weeks. Of course, this cannot be guaranteed since it depends on other enrolled students dropping the course.

Course Information

  • This semester (Fall 2026), the course will closely follow previous Fall offerings. In particular, the projects will use the Go programming language.
  • Lectures are Tuesdays and Thursdays from 11:00AM-12:20PM in CUC McConomy Auditorium.
  • Online class communication should use the 15-440 EdStem forum. For in-depth discussions with TAs, we strongly encourage you to come to office hours.
  • The course content and deadlines for all assignments will be listed in our course schedule.

Course Staff

Charlie Garrod
Instructor
charlie@cs.cmu.edu
Yuvraj Agarwal
Instructor
yuvraj@cs.cmu.edu
Ben Titzer
Instructor
btitzer@andrew.cmu.edu
Aditya Chanana
Lead TA
achanana@andrew.cmu.edu

Course Assistants

Alejandro Estrada
alejande@andrew.cmu.edu
Alex Xu
alexxu@andrew.cmu.edu
Arin Bhandari
arinb@andrew.cmu.edu
Bert Shan
bshan@andrew.cmu.edu
Bhargav Kommireddy
bkommire@andrew.cmu.edu
Cindy Wang
cindywan@andrew.cmu.edu
Daryl Lavin
daryllav@andrew.cmu.edu
Dillon Shelton
dillonsh@andrew.cmu.edu
Isaac Au
yau@andrew.cmu.edu
Jeslyn Koay
tkoay@andrew.cmu.edu
Maggie Gong
yiyug@andrew.cmu.edu
Mert Iren
miren@andrew.cmu.edu
Nathan Chen
nuodec@andrew.cmu.edu
Nick Yaeger
nyaeger@andrew.cmu.edu
Rohaib Cheema
rcheema@andrew.cmu.edu
Sean Lim
seanlim@andrew.cmu.edu
Varun Donde
vdonde@andrew.cmu.edu
William Li
wl4@andrew.cmu.edu
Zak Kent
zkent@andrew.cmu.edu

Prerequisites

Because this course has a substantial project component, you must be proficient in C and programming on UNIX systems and have gotten a “C-“ or higher in 15-213/15-523. We will use the Go programming language, but we do not assume you have had any programming experience in Go.

Learning Objectives

After this course, students will have learned to…

  • Implement and structure distributed systems programs.
  • Write programs that can interoperate using well-defined protocols.
  • Debug highly concurrent code that spans multiple programs running on multiple cores and machines.
  • Reason about distributed algorithms for locking, synchronization and concurrency, scheduling, and replication.
  • Use standard network communication primitives such as UDP and TCP.
  • Understand the general properties of networked communication necessary for distributed systems programming in clusters and on the Internet.
  • Employ and create common paradigms for easing the task of distributed systems programming, such as distributed filesystems, RPC, and MapReduce. Be able to clearly elucidate their benefits, drawbacks, and limitations.
  • Identify the security challenges faced by distributed systems programs.
  • Be able to select appropriate security solutions to meet the needs of commonly encountered distributed programming scenarios.

Course Policies

For all of the course policies, including grading policies, please head to the syllabus.