In the old world, infrastructure was immutable, and our applications were designed accordingly. Today, in the cloud, infrastructure is software-defined and constantly changing. We’ve shifted from thinking infrastructure should never fail to we shouldn’t care if our infrastructure fails, as our applications should dynamically shift to other available resources. However, this reality doesn’t just happen; it takes a new way of designing applications — both new and old. This report explores the essential design patterns cloud-native developers must use to achieve resilience on a cloud platform.