Improve this page

These guidelines supports teams with optimizing their work while building, validating and releasing systems. By following and adopting these guidelines teams can deliver faster and more reliable.

Work

Teams should work together in a collaborative way. An individual team member should be able to release the whole system without any other support and dependency from other teams.

Versioning

A team should always be in a deployable state and in control of what can be delivered. For this goal, a branching strategy needs to be selected which fits the characteristics of the business needs and strategy. A service, a deployable component which can evolve independently, will have its own GIT repository. The GIT repository of a service will contain all the resources needed to release the service. This will be the resource template (AWS CloudFormation, Azure Resource Manager or Terraform), the external packages, the configuration and the sources.

Build

The responsibility of the build process is to integrate (CI) the code and other changes with each other in a controlled and validated way.

Common actions during a build are: merge changes, compile code, validate via unit and other tests, check quality and package, prepare the system for deployment, provide feedback and traceability with work.

Validation

Test validate a system not only on functionality and performance, but also on security, compliancy and many other business quality attributes. Per - need to be validated - quality attribute test should be specified and implemented. Test run execution is as much as possible automated and reports should be generated automatically for success and failures over time.

Release

The result of a build is a validated and deployment ready package together with its required cloud or other infrastructure configuration. The cloud resource configuration and package is taken by the release system to create the infrastructure and deploy the package on the different environments. Depending on the business and system needs different ways of releasing can be used per business services and component.

During a release multiple actions or steps are executed. These actions depend on the release strategy but mainly cover:

The same release must be executed on all environments. The only differences between  development integration, test, acceptance and production is the configuration data.

On the acceptance and production environment are no manual activities for release allowed. No configuration, no settings, no bits. Everything is done via scripts.

Note: when the service is not capable to reach this level of automation, runbooks for configuration must be in place and a roadmap for automation.

Environments

Infrastructure as code, or programmable infrastructure, means writing code (which can be done using a high level language or any descriptive language) to manage configuration and automate provisioning of infrastructure in addition to deployments.

Infrastructure as Code, AWS

Monitoring