A Maturity Model for Continuous Delivery
|Process & Organisation||Technology||Quality assurance||Deployment routines||Configuration management||Build & Continuous integration|
|Advanced||Self organised and cross functional.
The team can solve any task.
|Loosely coupled architecture.
It is easy to replace technology for the benefit of something better (Branch by abstraction).
|All testing automated.
Almost all testing is automated, also for non-functional requirements.
Testing of infrastructure code.
Health monitoring for applications and environments and proactive handling of problems.
Everybody (including the customer) can deploy with one click.
Feedback on database performance and deployment for each release.
|Infrastructure as code.
Fully automated provisioning and validation of environments.
Orchestration of environments.
Same binary is deployed to all environments.
Continuous improvement and automation of repeating tasks.
Optimised for rapid feedback and visualisation of integration problems.
Measurement and reduction of cycle time.
Continuous focus on process improvement.
Always production ready code.
In depth knowledge about each technology; why it is used and how it works.
All of the technologies used are easy to configure and script against.
Technology that makes it simple to roll back and forth between database versions.
|Automated functional tests.
Automated acceptance and system tests.
Tests are written as part of requirements specification.
All stakeholders specify tests.
Same process for deploy to all environments.
Feature toggling to switch on/off functionality in production.
Release and rollback is tested.
Database migration and rollback is automated and tested for each deploy.
Database performance is monitored and optimised.
|Application configuration control.
All application configuration in version control.
The application is configured in one place.
Self service of development- and test environments.
Continuous integration of source code to mainline.
All changes (code, configuration, environments, etc.) triggers the feedback mechanisms.
Reuse of scripts and tools.
Generation of reports for the build.
Builds that fail are fixed immidiately.
Improved communication with business.
Releases after each iteration.
Developers have access to production logs.
Chooses technology stack based on what is best for each purpose.
Preference for Open Source.
Avoids products that causes vendor lock-in.
|Automated technical tests.
Automated unit and integration tests.
Documented and partially automated deploy.
Database changes are scripted and versioned.
Dependencies and libraries are defined in version control.
Automation of builds/tests on CI server.
Can recreate builds from source code.
|Big challenges||Silo organisation.
People who in some way depend on each others work are not co-located.
Developers do not have access to production logs.
Technology that can only be configured via a GUI.
Large "enterprise" suites claiming they can solve all your problems.
Testing towards the end, not continuously.
Developers do not test.
Deployments require many manual steps.
Manual and unversioned database migrations.
Manual configuration in each environment and on each server.
Manual routines for builds.
Lack of artifact repository.
Lack of reports.