Cloud Native
Build systems that are suitable for running in the public cloud, using cloud-native technologies suited to our provider of choice.
Rationale
Use of cloud-native services helps us focus on building differentiators and supporting a rapid pace of change, and reduces operational complexity. This is particularly important where we run a larger set of distributed, smaller systems which need to operate independently.
Implications
- Prefer “Platform-as-a-Service” over “Infrastructure-as-a-Service”. Where possible, use the JL Digital Platform, which has been built with this principle in mind, and provides a curated set of tools and services to achieve this.
- Prefer open tooling for configuration and deployment that works well with our choice of cloud.
- Leverage the services where our cloud provider is strong. Do not overcommit to being cloud-agnostic where this creates a large amount of engineering effort or misses the opportunity to make use of high-quality cloud features.
- Build software to take advantage of cloud features, and be tolerant of cloud failure scenarios. For example, consider variable network conditions and minimising of local state to support automatic scaling.
- Teams should continuously review the cloud services they consume for suitability and cost-effectiveness.
- Compute, storage and network resources are abstracted from applications, isolating them from underlying infrastructure dependencies and therefore improving portability.
- Cloud-Native technologies are focused around APIs rather than low-level infrastructure interfaces.