Skip to content
We are always hiring

Infrastructure and Configuration Management

Infrastructure for running services is considered part of the service, and falls under the shared responsibility of the entire engineering team. The following principles apply to infrastructure.

Infrastructure provisioning

Infrastructure used by any running service must be provisioned in a reproducible way. The best way to achieve this is by having the infrastructure described under source-control. There are many ways this can be achieved, and we make use of Terraform, AWS CDK, and Serverless.

Provisioning infrastructure in this way helps to document that infrastructure, making it more amenable to multi-region operation, and being a useful tool for disaster recovery.

Hand-provisioning infrastructure is considered an anti-pattern, and should be avoided. Where this is a necessary temporary measure, we should work to return to a source-controlled state as soon as possible.

Configuration management

Configuration management is paramount for building and defining reproducible services. It is used to define and create compute, network, and storage resources for provisioning of services. Where applicable it is also used to define monitoring and alerting mechanisms.

Where applicable, local configuration for any application or service should be abstracted from the deployed code and managed by an appropriate configuration management tool. However, it is still considered part of the service, and is the shared responsibility of the entire engineering team.