Time : M 12:10pm - 2pm
Class Location: 467 SCH

Distributed systems help programmers aggregate the resources of many networked computers to construct highly available and scalable services. Most of the applications and services we interact with today are distributed, some at enormous scales.

This class provides an overview of influential research that provided the basis of most large-scale, cloud infrastructures today. Students read, present, and discuss papers on important distributed systems topics, including distributed consensus, consistency models and algorithms, service-oriented architectures, large-scale data storage, and distributed transactions, big-data processing frameworks, and distributed systems security.

In addition, students form teams to work on a semester-long research project that will give them hands-on experience with building or extending a distributed system. At the class’s end, students should have a good understanding of key research topics in distributed systems, as well as roughly how to go about developing such topics on their own.


The grading formula is:

You’ll notice that class participation doesn’t appear to impact the grade. Actually, it does, in two ways. First, the instructor and TAs can nominate other students for extra credit counting toward your grade if those students have been observed over the course of the semester to have made substantial contributions either in class (through quest, answers, perspectives on papers, and feedback to their peers’ projects) or on Piazza (through constructive feedback to others’ questions and project challenges). The nominated students can get 15% of extra credit – which is a lot! – and will be publicly acknowledged in class for their contributions. The nomination process will occur three times during the semester.

Second, you’ll notice that paper presentations count for a large portion of your grade. This does not only take into account the quality of your presentation, but also the quality of discussion you generate with your peers as part of, or after the presentation. So, if you participate in the discussion for a particular paper, you help the presenter of that paper to get a better grade. That presenter can then return the favor for when you take the podium.


The project will require a lot of coding, as you will have to build or extend a distributed system. Hence, in this class, we require that you have solid coding experience, particularly building systems-level components (e.g., not just apps). This can translate either to personal experience or industry experience or to the following Columbia courses or equivalent experience:

  1. COMS W3137 Data Structures and Algorithms
  2. COMS W4119 Computer Networks
  3. COMS W3827 Fundamentals of Computer Systems
  4. W4118 Operating Systems is not required, but it is a big plus for your projects
  5. Starting in Spring 2019, COMS4113 Distributed Systems Fundamentals will be required. In Spring 2018, it is only a plus


This class, along with the materials distributed for it, was inspired by Distributed Systems courses at various institutions: