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.