A design document describes a distributed protocol at a high-level but with enough detail that a competent programmer could implement it without having to think about any distributed systems-y aspects of the problem (a big ask!).
The act of taking high level ideas and turning them into concrete distributed
protocols that can be implemented, evaluated, and deployed is a core skill
that we hope you develop in this course!
We will follow a highly structured template in this class, given here.
Instructions
You will write a design document for lab 1 part c (exactly once semantics).
You submit your design doc as a typeset PDF on gradescope.
The text can be a google doc, word doc, latex, typest, pandoc, or other.
Both typst and overleaf (latex) offer free online editing.
Diagrams can be in any readable form, including hand sketched (if hand-sketched, scan into an image on your phone,
and then include that image in the pdf). However, we recommend the free website draw.io
Be sure these sections appear explicitly with exactly these titles in large font in your doc. The rubric grades
each section separately. You will need to mark each section explicitly in Gradescope.
Preface
Protocol
Correctness/Liveness Analysis
Conclusion
Besides those section titles, you do not have to follow the rest of
the template exactly, but you must include the spirit of all the
information requested in the template in some format.
Feel free to include diagrams or informal discussion wherever you see fit.
You should be specific about state, messages, timers.
Try to avoid low-level Java-specific details where possible. Your document
should make sense in any programming language.
Advice
Do not repeat yourself. Do not copy paste. Instead, you can say "it
is similar to blah", where "blah" directs the reader to the relevant
part of the document.
Structure your design doc so that it is readable. When answering
several questions from the template about a single variable, group
all the answers about one variable together, do not group answers by
question.
Try to keep your design doc concise. In particular, lab 1 is just a warmup.
The most important section is the protocol section. That is the
section you will translate into Java. Be extremely specific about
exactly what data each node stores, what data is on each
message/timer, and how a node's state changes when a message/timer
is delivered/fired. "Extremely specific" does not mean "long
winded". Be precise but concise.