Continuous Delivery and Dev-Ops
Software organizations strive to deploy valuable new features into the hands of users as fast as possible, while making sure that they keep their production environments stable. Continuous Delivery (CD) is a revolutionary and scalable agile methodology that enables any team, including teams within enterprise IT organizations, to achieve rapid, reliable releases through better collaboration between developers, testers, DBAs and operations, and automation of the build, deploy, test and release process. CD brings enormous benefits to the business, as it allows it to rapidly complete the Buןld – Measure – Learn loop, inspired by the Lean Startup movement.
AgileSparks offers a complete support package for deploying CD at your organization.
How does that fit into Agile?
According to the Agile Manifesto, the first principle is “Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.”
Continuous Delivery is the embodiment of this principle, applied in a rigorously planned and executed manner.
Based on best practices accumulated and refined over many years by industry-leading companies, the discipline of Continuous Delivery combined with Devops and an Agile culture can propel your company to new levels of performance by drastically reducing the feedback loop on all aspects of product development.
Benefits of CD
Continuous Delivery and DevOps culture can bring huge benefits to your organization:
Reduce time-to-market – Deliver value to the market faster, whether it is a new product delivered, new feature, fast response to competitors, a response to high valued customer or a high priority support case.
Exercise Build-Measure-Learn cycle – Get faster to the right product. CD enables you to implement lean startup methodology and incorporate market feedback and lessons learned into the system, and deliver back to the market for measuring their success and reducing the cycle of product development.
Increase operational effectiveness – CD enables you to easily switch efforts between products and projects based on business needs, thus focusing always on doing the right thing, being much more effective in using your resources.
Improve system stability – Contrary to what most people would expect, moving to CD improves system stability. Instead of large scale deployments that shake the system and involve long settling time, CD allows small increments to be tested, isolated, risk to be managed and when a feature is fully deployed the system is in a stable status.
Improve operational efficiency – CD allows you to cut waste and overhead involved in heavy weight deployments. Once delivery pipeline is automated, the delivery cycle becomes much more efficient, less stressful than the common painful “big-bang” product release processes, and less effort consuming.
Empower teams – CD allows developers to experience the effect of their delivery. Delivering valuable software to production in a matter of days instead of months, empower your teams, improve collaboration between business and product development departments and empower the teams to get faster to what they aim for, to reach the team goals.
Continuous delivery as a practice is relevant to all companies who release software. Even if your company releases software at large intervals due to constraints imposed by contractual delivery agreements, users up-take limits, or mobile stores’ deployment lag, continuous delivery represents a significant advantage. As Jez Humble puts it, Continuous delivery is about putting the release schedule in the hands of the business, not in the hands of IT. Implementing continuous delivery means making sure your software is always production ready throughout its entire lifecycle – that any build could potentially be released to users at the touch of a button using a fully automated process in a matter of seconds or minutes.
Building Blocks Required For Continuous Delivery
- Continuous Integration is the first step in a company’s journey toward Continuous Delivery. It implies a fast, repeatable and fully automated build of the full product, which is typically triggered by changes to the code or data. Continuous builds are supported by a set of unit tests which cover most of the systems’ code, and provide fast feedback on errors, which are immediately rectified. On top of these a set of integration and End2End tests. This immediate feedback loop is crucial to keeping the quality of the product consistently high.
- Fully repeatable build, which implies all-inclusive configuration management of code, tests, reference data, configuration, documentation and all dependencies.
- Feature toggles (for new features & for features that are in progress) so decisions about which features to enable can be made independent of their implementation.
- Canary, A/B & Staggered Deployment, to reduce the risk of deployment by having different environments running different versions of the system, and provide a live comparison of the outcome.
- Live metrics: production monitoring for
- Business analytics (Revenue, # of users, # of orders, conversion rate…)
- Ops analytics (MTBF, incidents, changes etc.)
- Technical (transactions-per-second, response time, memory, network bandwidth etc.)
- Devops culture – Ops people working in close collaboration with product development teams
- Environments (Staging, Testing…) which support the continuous delivery pipeline
- Deployment pipeline – Create a fully automated process for deploying, provisioning & handling database migrations.
- An architecture which supports unit testing and side-by-side deployment and versioning to support hot rollbacks
- Frequent Inspect & Adapt using retrospectives and root-cause-analysis
Training and Coaching, Implementation
Moving into continuous delivery and DevOps involves changes and adaptations in various aspects of product development as described above: processes, tools, methods, architecture, culture etc. So before going into implementation phase, an assessment phase is required to assess the existing pains, needs, goals of the company and the existing status of delivery.
The assessment conducted will cover all aspects of CD and DevOps. Delivery pipeline will be analyzed followed by a careful inspection as to what are the required steps and changes for conducting CD and their appropriate priorities. Priorities will be evaluated based on the respective ROI of each step. For example, prioritize highest teams and projects with high demand for new features, strategic direction, short response time and so forth.
Based on the assessment an implementation plan for advancing into CD will be crafted that contains 3 major phases.
Phase 1 – Quick wins – 3 months
The first implementation phase will last about 3 months in which quick wins will be identified and efforts will be focused on making those quick wins happen. Wherever needed, training will be conducted (TDD for example) and practices and tools integrated into the existing processes.
Phase 2 – Moving forward and expanding
In the second phase we shall expand our coverage and deepen our methodology:
– Effort will be made to cover as much building blocks as possible: Continuous integration, environments, testing methodologies and tools and so forth.
– New tools shall be incorporated as required to enhance automation and reduce cycle time and collaboration
– in some cases this is the phase where we shall finalize a basic automated regression testing. wherever possible, this phase will start in parellel to phase one.
– expansion across projects and teams
– Infrastructure changes as well as some architectural changes may be considered in this phase.
Phase 3 – Matured CD and DevOps organization
The last phase includes advanced mechanisms, tools infrastructure. Production monitoring capabilities, advanced pipeline monitoring capabilities, as well as establishing a continuous improvement process turning the processes and culture of continuous delivery and DevOps collaboration into a robust, natural and mature environment so all fruits can be ripped.
Coaching and mentoring services will be available throughout the process to assist in advancing your organization towards continuous delivery of valuable product, as fast as possible.
Jez Humble on DevOps – http://www.youtube.com/watch?v=I8xnnkmK4Ec
State of Devops 2014