This document provides an overview of debugging distributed systems. It begins with definitions of distributed systems and why they are difficult to debug due to factors like concurrency, lack of a global clock, and independent failures. It then outlines a structured 8 step approach to debugging distributed systems: 1) observe and document issues, 2) create a minimal reproducer, 3) debug client side, 4) check DNS and routing, 5) check connections, 6) inspect traffic and messages, 7) debug server side, and 8) wrap up with a post mortem. The document concludes with examples of distributed systems war stories and questions.