Overview
Distributed systems are collections of networked computers that coordinate their actions through message exchanges. Most computing systems you interact with every day are distributed (email, the Web, cloud services, collaboration apps, social networks, …) for reasons like fault tolerance, performance, scale, and geography.
In this course we cover core principles behind distributed systems and the main techniques used to build them, using case studies of widely used or seminal systems.
Topics include
- Networking and communication
- Physical and logical clocks
- Coordination in distributed systems
- Distributed storage and file systems
- Name services
- Global state and transactions
- Replication and consistency
- Consensus
- Fault tolerance
- Security and privacy
Communication channels
- The course website and Canvas carry announcements, schedule updates, clarifications, and corrections. Check regularly.
- Piazza (via Canvas) is used for class discussion; the staff checks it frequently.
- Email is for issues not appropriate for public discussion.
When emailing course staff, start your subject line with:CS345: <helpful-comment>
(and yes: please replace<helpful-comment>with an actual helpful comment 🙂)
Course organization
The course is organized as a series of lectures and paper discussions, projects, homework assignments, and a final exam.
- Lectures and discussions: core material and in-class synthesis
- Readings: paper reading to prepare for lecture (not as a substitute)
- Homework: mostly “reading enforcers” that force you to actually engage
- Projects: programming projects (in Go) to get hands-on with the ideas
- Final exam
Grading
Grading is criterion-referenced, not curved: your grade depends on how well you do relative to predefined performance levels, not how others perform.
Total scores (0–100) are determined roughly as:
- Pre-class reading / participation: 15%
- Homework assignments: 20%
- Projects: 45%
- Final exam: 20%
Policies
Late policy
You are allotted 7 late days to use at your discretion throughout the quarter — no questions asked.
- There is a 30-minute grace period after each deadline. Submissions within this window are not considered late.
- After the grace period, any submission up to 24 hours late uses 1 late day.
- Every additional 24-hour period past the deadline consumes another late day.
- Example: 15 minutes late → no penalty; 10 hours late → 1 late day.
Late days are shared across all assignments. If you run out, late work receives zero credit unless prior arrangements have been made or exceptional circumstances apply.
Late days cannot be used for group assignments unless all members have enough remaining late days.
If you’re dealing with something serious (illness, emergencies, etc.), reach out before the deadline — we can work something out.
Cheating vs. collaboration
Collaboration is encouraged. Cheating is a serious offense.
It’s OK to meet with colleagues, study for exams together, and discuss assignments. However, what you turn in must be your own (or for group projects, your group’s own) work. Copying code, solution sets, etc. from other people or other sources is strictly prohibited.
For projects, we do code walkthroughs with randomly selected groups. If your group is selected, you’ll meet with the TA and/or instructor and walk through your code, answering questions.
To get full credit you must be able to explain your code and demonstrate understanding.
Sampling is with replacement, so you may be selected multiple times.