In this class, we will, as a group, build a working distributed system from scratch, such as a web search engine, distributed file system, blockchain/distributed ledger, or peer-to-peer network. By building such a system, students will learn about key theoretical and practical fundamentals related to distributed systems and software engineering, such as concurrency, replication, commit models, fault-expectancy, self-organization and management, load-balancing, capacity planning, network programming, containerization and microservices, and physical and environmental considerations. These key principles are what lie at the core of the designs of well-known systems such as those built by Google, Bing, Facebook, Yahoo, Twitter and others. The class will evolve from reading and discussing research and working on foundational programming projects, to working through the design of the system, developing it, planning its deployment, and releasing it into the wild. Includes lab.