Cloud Native Maturity Model - Level 3
Dante's Cloud Native Maturity Model is a framework that enables organizations to gauge the current maturity of their cloud applications and to define an architectural roadmap such that the applications will ultimately take full advantage of cloud computing. In the first three installments of this series we discussed the classic mistake of lifting and shifting an application as-is into the cloud, why software defined infrastructure is a prerequisite to further advancement in the cloud and how cloud native architecture enables applications to operate at web-scale.
- Level 0: Lift and Shift
- Level 1: Embrace Software Defined Infrastructure
- Level 2: Liberate Cloud Native Architecture
- Level 3: Transcend to Continuous Deployment
Level 3 - Transcend to Continuous Deployment
At Level 3, we build on the previous levels to reach the holy grail of Continuous Deployment, which facilitates lean, agile and adaptive software products. Continuous Deployment is often confused with Continuous Delivery. With Continuous Delivery, every commit goes through the Build/Deploy/Test cycle and delivers a Release Candidate, which can be deployed to production if Manually Accepted. Continuous Deployment differs from Continuous Delivery in that there is no Manual Acceptance gate. Continuous Deployment obviously depends on the automation provided by Software Defined Infrastructure (SDI), but it also relies on the decoupled nature of Cloud Native Architecture (CNA); necessitates fully automated testing, both before and after the release; and must be entrusted to mature product teams.
Continuous Deployment constitutes a significantly high risk for monolithic systems due to the shear volume of components that are deployed. With CNA each service is released independently. The microservice nature of CNA improves team autonomy and enables a faster frequency of change. But with this great flexibility comes great responsibility.
Fully automated testing is essential, both before and after a release. Consumer Driven Contract Testing must be part of the pre-release testing. Consuming services provide these contract tests to the supplier to be included in the supplier's build pipeline. This helps ensure that changes to a service do not impact the downstream consumers. Automated and continuous testing must also be performed in production. In the cloud there is a prudent expectation that resources will fail. This means that focus must be placed on the mean-time-to-recovery instead of the traditional aim of mean-time-between-failure. Synthetic Transaction Monitoring must be part of post-release testing. This is the combination of continuous, non-destructive test execution with real-time monitoring and alerting. The objective being to proactively identify and fix issues and roll forward before they are found by users. A Chaos Testing approach, such as Netflix's Chaos Monkey, adds an additional layer of production testing which purposefully causes faults in the system to test the system's resilience.
Team Maturity is crucial. Continuous Deployment requires a thoughtful roadmap of incremental changes to ensure that there is zero downtime during deployment. To safeguard the roadmap, the Task Branch Workflow pattern should be the norm for change control. This ensures that changes are divided into discrete units that are tested, reviewed and deployed sequentially. There should be no separate DevOps teams. These skills should be embedded in the teams and codified. The software defined infrastructure and continuous deployment pipeline logic should be defined in a domain specific language (DSL) and version controlled along with the application logic. Monitoring and health-checks should be first-class requirements for every service and version control events should be correlated with monitoring. DevOps is a culture of shared responsibility. The mantra should be "You build it, You operate it!", which provides teams with incentive to be proactive and build high quality deliverables.
Ultimately, to take full advantage of cloud computing, cloud native applications must be treated as products that need to adapt to and evolve with their environment, instead of projects that just need to be completed. In this context embracing Software Defined Infrastructure, liberating Cloud Native Architecture and transcending to Continuous Deployment become essential building blocks for the on-going cycle of validated learning which leads to refined and optimized business processes.
Engage Dante to help you transcend to continuous deployment and navigate a successful transition to the cloud.