This document introduces distributed systems and discusses their key characteristics and design goals. A distributed system is a collection of autonomous computing elements that appear as a single coherent system to users. Distributed systems aim for distribution transparency, openness, scalability, and sharing of resources. However, achieving full transparency is difficult due to issues like unpredictable network behavior and partial failures. The document outlines techniques for scaling distributed systems and common pitfalls in development like making false assumptions about network reliability.