CSE 40771 - Distributed Systems

CSE 40771 - Distributed Systems - Spring 2026

View the Project on GitHub

Syllabus - CSE 40771 - Distributed Systems - Spring 2026

Instructors:

Course Web Page

https://dthain.github.io/distsys-sp26

Overview

A distributed system is any computer system consisting of multiple machines that work together on a common problem. Distributed systems appear in many areas of computing, including cloud computing, mobile computing, edge computing, the internet of things, aerospace systems, and more. Distributed systems have been both interesting and difficult to build because their components may be autonomous and highly failure-prone. Students will learn the fundamental principles of distributed systems, study examples of current distributed systems, and build their own distributed systems from scratch. Topics include concurrency, fault tolerance, replication, consistency, agreement.

Students will undertake a final project that involves building and evaluating a custom distributed system. Grading will be based on assignments, exams, and a final project.

This will be a fun and challenging class for students who like to build working software systems. Distributed systems bring together some very practical aspects of software engineering (e.g. like how to handle a network disconnection) and the fundamental principles of computers (e.g. whether a partitioned system can reach agreement.) The skills that you learn here will apply directly to advanced systems used in industry.

Prerequisites

Course Outcomes

Students successfully completing this course will be able to:

Reading Assignments

The principles of distributed systems will be studied via the course textbook:

Marten van Steen and Andrew Tanenbaum, Distributed Systems 4th edition, 2023

You can order a physical copy of this book, or register online to download a PDF, as you prefer, but do one or the other right away!

The textbook provides the foundation of the course, and it will be important for you to absorb it in preparation for class. You should read the assigned chapters and take notes each weekend. Summary notes on the assigned readings will be due in Canvas (usually) Mondays by 11AM.

The most effective way to read and retain information is to take notes the old-fashioned way, by hand with pen and paper. If you are out of the habit of writing by hand, now is a great time to start, so as to build up your muscles and practice for the exams. Once written out, just snap a few photos and upload to Canvas.

Your notes can be organized in whatever way is appropriate to that chapter and is useful for you. Good things to include may be an outline of the chapter, definition of key terms, or a sketch of the systems or data structures being discussed. Finally, answer the reflection question posed in the assignment.

Grading on notes will be very simple: either one, one-half, or zero points. There are ten opportunities to earn 11 points, so you can miss one without penalty. The act of taking notes is entirely for your benefit, so we are just looking for a constructive effort on your part.

Programming Assignments

Six programming assignments are required, due one-two weeks apart for the first half of the semester. The assignments together build towards an implementation of a distributed data storage system that could run in a cloud service, or as a peer-to-peer system:

Final Project

In the final project, students will propose, build, and measure a distributed system of their own design, which must make use of multiple techniques discussed in class to achieve a system that is robust and performant. Examples might include a distributed filesystem, a parallel programming model, or a peer-to-peer data routing system. The final submission will include a project report describing the design of the system.

How to Get the Most Out of Class

To succeed in the class, you should attend all class meetings, take notes, and participate in class discussions. During most class sessions, I’ll give a prepared lecture for about 30 minutes, and then we will shift into Q&A or working on an example.

The textbook is dense in places; sometimes a key algorithm may only occupy two pages in the book, but requires 30 minutes of class discussion to work out all the details. So, it works best if you read the textbook for a broad understanding before class, and then go back and review details and work some examples afterward.

Because much of the class material involves working with system diagrams and examples, I will mostly work on the blackboard instead of presenting slide decks. I recommend that you take notes by sketching along with pen and paper: the simple act of note-taking exercises your mental muscles in a way that passive observation does not. If you prefer to take notes on your laptop or tablet, then that’s fine too.

However, I do ask that you refrain from using your laptops or phones for non-class related tasks during class time. I know it is tempting during a brief lull to respond to messages, check the news, etc, but even one laptop open can be an unavoidable distraction for other people in the class. Please reserve this time for working together.

Note that classes will not be recorded, so plan accordingly. Our class meetings are primarily for discussion and practice using the available written materials, so if you miss class for whatever reason, then catch up by reviewing the written materials and talking with a peer.

Communications

Assignments and the course schedule are available on the course website, and assignment grades will be posted in Canvas. We will be using Slack to handle general Q&A for the class. If you have a technical question that could be of interest to others, please post it there, so that others can benefit from the answers. You are welcome to post (or answer) questions anytime, and we will generally monitor and answer questions on weekday afternoons. (Keep in mind that we do go home at night, and so late-night questions will get answered the next day.) For questions about grades or anything else that just applies specifically to you, just email the instructor or TA directly.

Office hours are a great time to get focused help on a tricky bit of code. We are happy to help you during that time – just knock, come in, and introduce yourself. If you can’t make any of the office hours, then send email to see if we can work out another time.

Assignments and Grading

Programming assignments are generally due at 5:00PM on Fridays. Because the programming assignments are cumulative, working up to a larger goal, it’s important to stay on top of things and make progress every week – don’t leave the assignment until the last minute.

Programming assignments will be submitted by copying files to a “dropbox” directory on the student machines. Writing assignments (project proposal, etc) will be submitted via the Canvas assignments feature.

Late assignments will receive no credit. Everything in this class builds up piece by piece, and it’s important to stay on track. If some assignment isn’t working out perfectly, it’s usally best to submit what you have on time, and keep moving.

You are permitted one free late pass to account for the ordinary circumstances of life, such as a minor illness, schedule conflict, etc. To do so, just send an email to the TA before the deadline, saying briefly “I would like to take a late pass on assignment X”. And the due date for that item will be extended by seven calendar days. (Naturally, you can’t use a late pass on the exams or the final project.)

Beyond that, exceptions will only be made for serious circumstances such as a hospitalization, death in the family, mandatory participation in a university sponsored event, or the other items outlined in section 3.1 of the Undergraduate Academic Code. In those cases, please confer with the instructor at the earliest possibility.

For each assignment, a numeric grade will be awarded. Throughout the semester, grades and class averages will be posted through Sakai. At the end of the semester, I’ll convert number grades to letter grades on a scale of A/B/C/D = 90/80/70/65, and exercise some prudential judgement for pluses and minuses and borderline grades.

Overall grades will be weighted as follows: Reading Notes (10%),Programming Assignments (30%), Course Project (30%), Midterm (15%), Final (15%).

Academic Code of Honor

As a student at Notre Dame, you are bound by the Academic Code of Honor, which states:

As a member of the Notre Dame community, I acknowledge that it is my responsibility to learn and abide by principles of intellectual honesty and academic integrity, and therefore I will not participate in or tolerate academic dishonesty.

The purpose of the homeworks and assignments in this course is for you to gain the discipline and skills in analysis, design, and programming so that you will be able to work independently in a professional setting. To that end, all work in this class must be the result of your own ideas and effort.

You are permitted to consult with other students, search engines, and AI assistants in order to find documentation, troubleshoot technical problems, and generally get “unstuck” after making your own efforts. However, the outcome of such consultation must be that you understand what it means and how to do it yourself. You remain responsible for all work that bears your name.

Some Campus Resources