Course overview

“Can you tell us about your distrusted system course?” – an undergrad in my CSE30 course last quarter

Welcome! This is an overview of the spring 2020 edition of CSE138 (“Distributed Systems”), an upper-division undergraduate course in the Computer Science and Engineering Department at the UC Santa Cruz Baskin School of Engineering.

Course staff


Lindsey Kuper

Hi, I’m Lindsey Kuper! (Call me “Lindsey”.)

  • Email: for anything CSE138-related, send a DM on the course Slack instead. Otherwise:
  • Zoom “office” hours: Wednesdays 10:30am-noon
  • Research areas: Programming languages, distributed systems, parallelism, concurrency, verification

Teaching assistants

Saheed Adepoju

Saheed Adepoju

David Lang

David Lang

  • Email:
  • Discussion section: Wednesdays, 2:40-3:45pm
  • Office hour: Mondays, 4:00-5:00pm


These folks will hold tutoring sessions to help you with course concepts and homework!

Zach Gottesman

Zach Gottesman

  • Tutoring sessions: Tuesday 4-6pm, Thursday 7-9pm, Friday 10:30(ish)-12:00 (and by slack DMs)

Romeo Jung

Romeo Jung

  • Tutoring sessions: Monday and Wednesday 6-7pm
  • He/They pronouns please!

Naum Markenzon

Naum Markenzon

  • Tutoring sessions: Every weekday (M-F) 12-1pm, 6-7pm


  • All ten colleges represented!
  • Several majors represented!

A few essential details about the course

  • Upper-division undergraduate course
  • Significant “programming-in-the-large” project component
  • Class meets Mondays, Wednesdays, and Fridays, 9:20-10:25am
  • Sections (optional, but strongly encouraged) meet at two times (choose one you like):
    • Mondays, 1:20-2:25pm
    • Wednesdays, 2:40-3:45pm
  • Final exam: 4-7pm on Tuesday, June 9
  • Slack (for announcements, live chat during lecture, Q&A, communicating with course staff, and socializing): (all enrolled and waitlisted students should have received an invitation by email)
  • Canvas (for grades):
  • Course web page (the page you’re looking at right now): (URLs are case-sensitive after the domain name, so be sure to capitalize “CSE”)

What’s this course about?

The theory and practice of distributed systems. Some of the topics we’ll cover are:

  • Time and asynchrony. No two computers can reason about each others’ perception of time. What does it mean to talk about time when we don’t share a clock?
  • Fault tolerance and replication. Given that computers crash and messages lost, how can we write protocols and algorithms that have adequate redundancy to tolerate failure? Maybe if I think a computer will crash, it’s a good idea to run the same computation on more than one! Maybe if I think messages will be lost, I should send the same message more than once!
  • Consistency and consensus. Is our system storing the right data and providing the right responses? I might have two “replicas” that aren’t actually replicas! If replicas disagree, how do we know which one is right?
  • Parallelism. Why deal with all the pain of distributed systems? Sometimes, if you throw a bunch of computers at a problem, you can do things faster – much faster.

The schedule has more details!

Official course description

From the course catalog:

Covers topics in distributed computing including communication, naming, synchronization, consistency and replication, fault tolerance, and security. Examples drawn from peer-to-peer systems, online gaming, the World Wide Web; other systems also used to illustrate approaches to these topics. Students implement simple distributed systems over the course of the quarter. (Formerly CMPS 128, Distributed Systems: File Sharing, Online Gaming, and More.)

In this course, you will:

  • Learn fundamental concepts and practical skills for reasoning about, designing, and implementing distributed systems.
  • Together with your project team, implement a distributed, sharded key-value store, using your programming language and tools of choice.
  • Gain experience with practical tools like the Docker containerization platform.
  • Enjoy talks from guest speakers.

Background you’ll need

You should be comfortable working in at least one programming language at a reasonably large scale (i.e., programs that span multiple files).

You should be willing and able to write code with a team. This will most likely involve using tools intended for programming-in-the-large, such as version control systems and continuous integration tools. It’s up to you to know (or learn) how to use these tools effectively, in a way that works for your team.

Starting in fall, CSE138 will have CSE130 (Principles of Computer Systems Design) as a prerequisite. That prerequisite is not yet being enforced. However, CSE131 (Operating Systems) is recommended. History suggests that students who have already taken OS tend to do better in CSE138 than those who have not. Take this into account when deciding whether CSE138 is for you. (However, I suspect that this is most likely not so much because CSE138 relies on any particular knowledge of operating systems and instead is due to other factors.)

Regardless of your background, the course staff wants you to succeed and is here to help.

Course project

For the course project, you will work together with a team to implement a distributed, sharded key-value store. The project will be done in a series of cumulative assignments, with each assignment building on the previous one. (The exception is the first assignment, which must be completed individually.)

You will work together with a team on the project. Teams must have a minimum of two and a maximum of four students; we recommend having four. This arrangement is meant to be “fault-tolerant”: if one person on your team drops the class, the remaining three people should still be able to handle the workload. If two people on your initial team drop, you can talk to the course staff about potentially merging your team with another two-person team.

Assignment descriptions will become available over the course of the quarter. If you want to get a head start on planning when to work on what, tentative deadlines for all the assignments are already on the schedule of topics. Here’s a rough sketch of what the assignments will involve (subject to change):

  • Assignment 1: You (individually) will learn to use Docker. (This is the only assignment that will be done individually.)
  • Assignment 2: You (with your team) will build a RESTful key-value store that will go in a Docker container.
  • Assignment 3: You (with your team) will turn that single key-value store into many key-value stores, partitioned across many containers, and consistent (according to some definition of consistency).
  • Assignment 4: You (with your team) will make your key-value store fault-tolerant, by making each partition replicated.

It’s going to be hard! Remember: We’re here to help.


Section attendance is optional, but the sections are the place to go if you want to review lecture material or discuss the homework assignments. Sections are taught by the TAs.

You should feel free to attend either section, not just the one you happen to be enrolled in.

Reading assignments

This course doesn’t have a textbook. We will, however, have a couple of assigned readings that will supplement the lecture material from class.

The best material to study from will be the notes you take in class, and the conversations you have with fellow students and course staff (e.g., on Slack).


  • In-class quizzes: 10%
  • Midterm: 20%
  • Final: 24%
  • Course project: 46%

We will grade in-class quizzes based only on your participation, not on whether you get the right answer or not. Think of them as a test of us, not as a test of you: if lots of people get an answer wrong, it’s a sign that we may need to spend more time on a concept or explain it more thoroughly.

If your final exam percentage score is higher than your midterm percentage score, the final exam percentage score will replace the midterm percentage score. This means that if you oversleep and miss the midterm entirely, you can theoretically still get 100% on the exams. (The final exam will be cumulative, meaning it covers topics from the entire quarter.)

Academic integrity and collaboration

You’re expected and encouraged to discuss your work with others. That said, all the homework you turn in for this course must be your own, independent work (for assignment 1) or the independent work of your team (for subsequent assignments). You can ask the TAs and tutors for advice, but you cannot copy from others: once you understand the concepts, you must write your own code. While you work on your own solution, you can:

  • Discuss with others the general techniques involved (without sharing your code with them).
  • Use publicly available resources such as online documentation. If you use a nontrivial amount of code from a publicly available resource, you must attribute the resource you use (for instance, by including a comment with the full URL and an explanation of what you used from it).

It is part of your job as a scholar to understand what counts as plagiarism, and make sure you avoid it.

What should I do if I’m struggling in this course?

Talk to the course staff immediately. Tell us what you’re having trouble with; it’s our job to help. Ask questions in lecture, in discussion sections, in office hours, in tutoring sessions, and on Slack. Keep coming to class, keep turning in the homework even if it’s only partially done, and continue to make a good-faith effort to succeed in the course.

Do not wait until the last minute to come talk to us. Do not assume that you can catch up later if you fall behind. Later course material builds on earlier course material, so if you become lost, it will be hard to catch up unless you come talk to us.


This course is based on Peter Alvaro’s course design, and it borrows material from his previous editions of the course. That said, I take full responsibility for my own course, so if you don’t like the design of this course, you should complain to me, not Peter.

Disability accommodations

If you have a disability and you require accommodations to achieve equal access in this course, please submit your Accommodation Authorization Letter from the Disability Resource Center (DRC) to me (you can contact me privately via DM on the course Slack). I am eager to discuss ways we can ensure your full participation in the course.

I encourage all students who may benefit from learning more about DRC services to contact the DRC.