Course Overview


Welcome to the graduate course on distributed systems! This course will introduce you to an exciting range of materials in this broad and hugely important field, including communication, how systems fail, the nature of time, and a wide range of important techniques and case studies about this fascinating area of study.

New this semester: we will be focusing on distributed storage. Why, you ask? Well, the answer is simple: because that is where the hardest and most important problems in distributed systems are! And don't worry, you'll learn all the same things you learn in a typical distributed systems class, minus some more theoretical aspects of the field.

This course assumes familiarity with systems, including how operating systems work (CS 537 and this book of course), how networks work (CS 640), how computer hardware functions (CS 354 and maybe 552). The course also assumes some graduate-level sophistication, especially in the form of CS 736 (a prerequisite). The 736 prerequisite is there for two reasons: (1) to ensure you already have a good idea about how systems work and (2) to ensure you have the skills needed to read complex papers and make sense of them. If you don't have this background, you should be in communication with me (the instructor) to be in the course.

The course also assumes you can program in systems languages (e.g., C, C++, or maybe Go) and deal with complicated systems without much hand-holding. To be able to get something working, you must rely on that most important of resources: yourself. Sadly, this is good training for the real world.


This course is just based on readings, listed in the schedule which is found on the right of the main page (extra readings are found on a readings page too). That's it! But, it's a lot of a reading, so get ready to read some papers this semester.

Mailing Lists and Piazza

Important announcements will be sent via Piazza. See the main page for sign up and links to said resource.

Homework Questions

Every class day will focus on one or two or three papers, which you should read BEFORE class. To help encourage this excellent habit, we provide you with a daily reading question which you must answer by 9am (or so) the day of class. Directions for how to hand in the daily answer are found on said webpage. Make sure to check the question page regularly.


There will be a few programming assignments to get you warmed up and going this semester. They will be linked from the main page and due about 2+ weeks from the day they are assigned. In these assignments, you will learn hands-on what it is to build distributed systems, usually with one partner (or maybe two).


The most important work outside of class will be the final project. This will form a large part of your grade, and is also done with a partner or two. Projects are the beginning of your venture into the world of research, and thus will be open-ended explorations of some kind. More information on final projects will be given about half-way through the semester.

  • Final Presentations: Around 12/19-12/20


There will be some exams to test your knowledge. The exams will be closed book, and will cover material from class (mostly) and assignments.

  • Midterm: Monday, 10/22 (7:15pm-9:15pm in 1221 CS)

  • Final: Due Monday, 12/17 (take home)


Grades should not be your main focus in graduate school, but, because you are students and will ask, here is a rough breakdown of how that will work. Homework questions will be worth 10%-20% of your grade; assignments will be worth 10%-20%; exams will be worth 30%-40%; the final project will be worth 30%-40%. That's about as specific as we will get, sorry!