We have traditionally built robust architectures by trying to avoid mistakes or failures in production, or by testing parts of the system in isolation. However, modern techniques take a very different approach: embracing failure instead of trying to avoid it. Resilient architectures enhance observability, leverage well-known patterns such as graceful degradation, timeouts and circuit breakers but also new patterns like cell-based architecture and shuffle sharding. In this session, will review the most useful patterns for building resilient software systems and especially show the audience how they can benefit from the patterns.