Tufts CS 117:
Internet-scale Distributed Systems
Fall 2022

As of mid-July 2022, CS 117 for Fall term 2022 is more or less full. Admission to this class is by permission of the instructor only and, if all students we have approved eventually register, the course will have perhaps one or two available seats (as of mid-July 2022). If you would still like to be considered, please see the information page for prospective CS 117 students. If after reading that you are still interested, please follow the instructions in the Applying for Admission to CS 117 page. There is an online form that you must fill out to be considered. If you have questions (or if you want to apply but are an incoming student who does not yet have a CS dept email address), please also email noah@cs.tufts.edu.

Please keep in mind:

students will not be able to sign up in SIS without prior authorization. A page is available with instructions for applying. Be sure to follow the instructions exactly and fill out the online application ASAP if you want to be considered for admission.

Course description

The World Wide Web, one of the most important developments of our time, is a unique and in many ways innovative distributed system. This course will explore the design decisions that enabled the Web's success, and from those will derive important and sometimes surprising principles for the design of other modern distributed systems.

We will introduce and draw comparisons with more traditional distributed system designs, including distributed objects, client/server, pub/sub, reliable queuing, etc. We will also study a few (easily understood) research papers and some of the core specifications of the Web. Specific topics to be covered include: global uniform naming; location-independence; layering and leaky abstractions; end-to-end arguments and decentralized innovation; Metcalfe's law and network effects; extensibility and evolution of distributed systems; declarative vs. procedural languages; Postel's law; caching; and HTML/XML/JSON document-based computing vs. RPC.

The purpose of this course is not to teach Web site development, but rather to explore lessons in system design that can be applied to any complex software system.


Classes will meet Tuesdays and Thursdays from 4:30 PM - 5:45 PM US Eastern time, in room Aidekman Arts Center, Room 012. We do not expect that classroom sessions will be streamed or recorded; students are expected to attend all classes in person.

Instructor, TAs and Getting Help

This course will be taught by Professor Noah Mendelsohn. Noah's office hours will be listed on his home page. Our teaching assistant for the course is TBD. (Yes, both the Professor and the TA are named Noah. Since much of this course Web site is shared from year to year, when you see a reference just to "Noah", assume that means Noah Mendelsohn.) Email sent to ta117@cs.tufts.edu will reach both of us. When you do need to contact Noah Mendelsohn only, you can e-mail him at noah@cs.tufts.edu.

For course news and Q/A we will be using Piazza (click here to enroll). If you have questions, please post them there.


There are no books that you are required to buy, but several you might want to consider. Your alternative is to use Safari Books Online, an online eBook service to which Tufts students have access. Information about books and using Safari is available on the CS 117 Information Page.

Collaboration, use of Others' Work, and Academic Misconduct

Students should read the policy on Academic Integrity available at http://students.tufts.edu/student-affairs/student-life-policies/academic-integrity-policy. Absolute adherence to the Code of Conduct is demanded of the instructors, teaching assistants, and students. This means that no matter the circumstance any misconduct will be reported to Tufts University. You are especially warned that code is not to be shared, except with your partner(s), and all quotations in your written work must be properly set off with quotation marks and appropriate bibliography citations.

You are strongly encouraged to discuss problems and to brainstorm with friends and colleagues. This course is about broad architectural themes in computing systems. You will learn them much better if you discuss and debate them with other students, and with the course staff. However, except in cases where an assignment specifically allows you to collaborate with others or to adapt existing code, the code and other written work you submit must be entirely your own.

In all cases where you use or adapt the materials of others, you must respect applicable copyrights. In general, such copyrights do not prevent you from using small fragments of a line or two of code or text, but for anything larger, you must make sure that the license accompanying the code or written work allows you to copy it.

Every source of assistance must be acknowledged in writing. There is never a penalty for seeking help with a problem, but help must be acknowledged, and you must only submit work that you completely understand. You will be graded on what you have learned and on the quality of your own contributions. If you have any doubt as to whether what you're doing is appropriate it is your responsibility to check in advance!

Programs and written material you prepare for this course must not be posted online, except when the assignment specifically requires that you do. For example, it is not acceptable to post your assignment solutions for public access on GitHub. You are encouraged to submit general programming questions to online forums such as Stack Overflow. Questions about particular homework problems must never be posted to public fora — send an e-mail to the course staff.

(This policy is adapted from the one used by Ming Chow for the summer 2012 edition of COMP-15.)