CSCI 3325
Distributed Systems

Bowdoin College
Spring 2022
Instructor: Sean Barker

Course Overview

This course will study the key design principles and implementation challenges of distributed systems, which are collections of independent, networked machines functioning as single systems. Well-known examples of such systems include email, network file servers, the Internet, and compute clusters. Topics include networking and communication protocols, naming, synchronization, consistency and replication, fault tolerance, and security. We will also discuss case studies of real-world systems through programming-intensive projects and discussions of influential research papers covering a variety of distributed systems.

Primary course goals include:


CSCI 2330 (Foundations of Computer Systems) is required. No prior experience with computer networks is assumed (though such experience is likely to be helpful).


Instructor: Sean Barker
Office: Searles 220
Phone: 207-798-4220
Office Hours: Mon 12:30-1:30, Tues 1:30-2:30, Thurs 2:30-3:30, or by appointment.

Class Information

Tuesdays and Thursdays
11:40 AM - 1:05 PM
Searles 223

Course Requirements

Course requirements include attendance and participation in class, completion of written paper responses, programming-intensive projects, a midterm exam, and a final project (which consists of a proposal, system implementation, presentation, and paper). Evaluation will be as follows:

Projects will be completed in groups of 2 or 3 and will be evaluated on program correctness, sound design, proper coding style, and the quality of your project writeups.

Paper responses will be completed individually and marked on the following 4 point scale:

Deadlines and Flex Days

To provide reasonable flexibility with deadlines, you are allotted five flex days for the semester, each of which may be used to submit an assignment up to 24 hours late without penalty. A maximum of three flex days may be applied to a single assignment. For group projects, applying a flex day uses a flex day from each group member's allotment (but can be applied as long as at least one group member has a flex day remaining).

Beyond the use of your flex days, late work will not be accepted unless I have approved alternate arrangements (and note that such arrangements are unlikely to be approved if the due date has already passed).


We will make limited use of the following (free!) textbook:


Maarten van Steen and Andrew S. Tanenbaum. Distributed Systems, 3rd edition (2017). Available as a free PDF download.

If you would like a printed copy, you can inexpensively acquire one via Amazon.

Electronic Communication

We will use Slack to facilitate communication and discussion outside of class. In general, you should prefer messaging me on Slack (aka sending me a DM) over sending me email, as it is faster, more convenient, and likely to result in quicker responses. For this class, Slack will serve as an email replacement as well as a general-purpose discussion board and a repository of important class information.

Here is the CSCI 3325 Slack.

Instructions on joining the Slack will be provided at a later date.

Guidelines on Group Work

Collaboration is important and valuable in computer science, and some assignments in this course will permit working in a group. This section describes expectations and requirements for completing group work in this course.

For all group work, a single copy of the assignment will be submitted. Group members are expected to fully collaborate on the work, and all group members are responsible for understanding all parts of the assignment. In other words, it is not acceptable to simply split the work between the group members and complete the parts independently.  For programming assignments completed in groups, most or all programming should be done with all group members working in front of a single (physical or virtual) computer.  Group members should take turns ‘driving’ (writing code) and ‘directing’ (looking at the code, discussing, and offering suggestions).

Note that this requirement means that you should choose your group members carefully and deliberately.  In particular, you should consider both your working styles and schedules; you cannot be an effective team if you cannot find suitable chunks of time to collaborate synchronously.

Forming a group: Each assignment that permits group work is given a "group deadline", which is the date by which groups must be determined (typically a few days after the assignment is released). To form a group, DM me on Slack with your group members. If you want to work in a group but don't have a partner in mind, let me know and I can try to match you. If I do not hear from you and you previously worked in a group, I will assume that you are working in the same group as before. You may also opt to dissolve a group and work solo, even if you worked in a group on a prior assignment. Group changes following the group deadline are not permitted without prior approval.

In the event that your group is not working smoothly for any reason and you do not believe it will be resolved, you should let me know as soon as possible. I can't address a problem that I don’t know exists!

Group reports: Each student working in a group is required to send me an individual group report at the conclusion of each group assignment. Your group report must (1) identify your partner(s), (2) summarize your own contributions to the assignment, and (3) summarize your partners' contributions to the assignment. The purpose of these reports is to provide mutual accountability within your group and to ensure that groups are functioning well. These reports do not need to be overly detailed and are often of the form "I worked with my partner on the entirety of the project together at the same time." Note that I reserve the right to adjust individual grades up or down from the group grade in cases of clear inequity, although this is not done routinely. Group reports should be DM'd to me on Slack and are due at the same time of the assignment itself. Your assignment will not be considered submitted until both the assignment and your group report is received!

Collaboration Policy and Honor Code

Please review the Computer Science Collaboration Policy. You are responsible for reading, understanding, and adhering to this policy.

Group work follows the standard guidelines described above, with the exception that collaboration between members within the group is unrestricted and does not need to be cited. Any collaborations outside of the group must follow the standard guidelines.


Feedback is welcome on all aspects of the course as we go, either by DM on Slack or by using the anonymous feedback form. All forms of feedback are welcome (and the sooner that feedback is provided, the more likely it is that adjustments can be made in response).