This document outlines a framework for designing distributed systems. It discusses two critical challenges: distribution infrastructure and concurrency. For distribution infrastructure, it describes common patterns like broker, messaging, and publisher-subscriber. For concurrency, it covers patterns such as half-sync/half-async, leader-follower, active object, and monitor objector. The document also presents various views for structuring a distributed system, such as logical, development, process, and deployment views. It concludes by thanking the reader.