This course consists of a series of five heavy programming assignments. The first four assignments are based on those used in MIT’s distributed systems course (6.824) while the last assignment is developed at Columbia to complement an important missing component. All assignments are in the Go programming language. The series builds in stages a simple but fairly realistic, fault-tolerant, consistent, distributed key-value store, and then model checks a key protocol for it.

Some of the assignments build off of each other, so it is critical that you begin them early, and have working versions of each other by the deadlines. The lectures cover the core concepts and protocols underlying the homeworks, before those homeworks are due, but not always when the homework is first released. However, we do provide the necessary materials ahead of time and we expect you to read them and begin working on the homework before the topic is fully covered in class.

Deadlines are specified in each homework’s descriptions and summarized in the Deadlines page. There will be NO DEADLINE EXTENSIONS for any reason other than health conditions (of the student or of someone close if that impacts the student). However, there is a 72-hour grace period, accumulated over all homeworks, for which you will not be downgraded. Lateness is accounted at hour granularity (i.e., 1 second late == 1 hour late). Once you reach 72 hours of lateness, the next homework to incur even a one-second delay will be graded as ZERO. Thus, the strong recommendation is to submit on time, even if with an only somewhat working homework.

The series: