Today, distributed systems are pervasively deployed, supporting critical sectors such as healthcare, banking, finance, and the online services we rely on daily. These systems often appear to users as logically centralized entities, with their complex inner workings only becoming evident in the face of failures. Understanding how distributed systems function is crucial for developing resilient, scalable solutions in an interconnected world. The Distributed Systems course begins by defining distributed systems and exploring prominent architectures deployed today, such as client-server and peer-to-peer models. It then delves into fundamental concepts, including clock synchronization protocols, logical clocks, coordination and agreement protocols, and consensus algorithms, such as Paxos and Raft. Later topics include replication techniques, peer-to-peer systems, and blockchain technology, all of which are essential to modern distributed applications. Students will also engage in hands-on projects that involve the incremental development, deployment, and performance evaluation of a simplified but significant distributed system, providing practical experience that complements theoretical learning.