This document discusses various patterns and approaches for building resilient systems. It covers two main approaches to coding - "defensive coding" versus "let it crash". It then lists several resilience patterns including exceptions handling, timeouts, circuit breakers, health checks, and more. It analyzes these patterns from an infrastructure, operations, and application viewpoint. It also discusses Netflix's use of patterns like circuit breakers, retries, and failovers. Finally, it covers chaos engineering principles like injecting failures to test systems and verify they can withstand unpredictable conditions.