Cloud-native is one of those terms that is used so broadly it has nearly lost meaning. Underneath the marketing, there is a coherent set of engineering principles worth understanding precisely.
What cloud-native actually means
Cloud-native applications are designed specifically for cloud infrastructure: they take advantage of elastic scaling, managed services, and global distribution rather than working around them. A 'cloud-native' application is not just an application that runs in the cloud, it is an application whose design reflects the opportunities and constraints of cloud infrastructure. The opposite is a 'lift-and-shift' application: a server-era application running on cloud VMs with none of the design adjustments that would make it leverage what the cloud provides.
The immutable infrastructure principle
Cloud-native infrastructure is immutable: when a configuration changes, you do not modify the running instance, you replace it with a new one built from the updated configuration. The immutable approach eliminates configuration drift (running instances diverging from their declared configuration over time), makes rollback deterministic (replace with the previous known-good image), and ensures every environment is reproducible from source. Containers and infrastructure-as-code are the tooling that makes immutability practical.
The managed services trade-off
Cloud-native applications use managed services (databases, message queues, caches, search) rather than self-managing the operational complexity of running those systems. The trade-off: you pay a premium over self-managed equivalents, and you accept constraints on customisation. What you get in return: no patching, no failover management, no backup configuration, no capacity planning at the instance level. For most engineering teams, the operational complexity saved by managed services is worth significantly more than the cost premium.
Design for failure
Cloud infrastructure is not more reliable than on-premises for individual operations, network calls fail, API calls return errors, services have brief unavailability. Cloud infrastructure is more reliable at the system level because it provides the primitives for resilience: multiple availability zones, automatic failover, elastic scaling. Cloud-native design uses these primitives to build systems that are more reliable than any individual component, rather than trusting individual components to not fail.