The most common desired future state we see when our customers undertake our DevOps Maturity Assessment is one of Continuous Delivery (CD). With applications becoming increasingly critical to organizations' competitive success it's no longer enough to just be Agile; innovation has to get to market as fast as possible and this demands the entire software development and deployment life-cycle be optimized and automated appropriately, with constraints and bottlenecks removed.
Continuous Delivery describes a development discipline in which code can be deployed from development to production at any time through a software pipeline vastly increasing release cycle times without compromising on quality.
Our Continuous Delivery experts have identified the 7 habits they think make them most effective:
1) Thinking Culture Too
Our DevOps mantra "Culture > Interactions > Automation" (an update from our ALM/SDLC mantra "People > Process > Tools") is just as applicable to CD. A tool doesn't know what to do if we don't have process to drive it (although it's worth noting that a process often cannot be fully accelerated without a tool to automate it) and a process can't be defined without an organisation and roles being defined. For Continuous Delivery, culture changes require:
- The business to fully embrace, understand and support the opportunity CD offers
- Everyone to engage more frequently and more deeply than with traditional approaches
- Flexibility in governance models to avoid delays (you may need to revisit ITIL)
2) Loving Automation
In Continuous Delivery, commits initiate and build and tests are executed automatically to check the changes are acceptable for inclusion in a delivery package. Should any of the tests fail, the change reverts to development for correction. Removing manual steps accelerates process, and automation drives repeatability and standardization resulting in consistency and predictability.
The goal of a unified continuous software pipeline is automation at every step of the process so changes, updates or adjustments can be made fast and with confidence without introducing errors. While not every activity can immediately (or sometimes, ever) be automated, the more automation that is introduced over time, the faster the release cycle.
Automation does demand tools, and the culture and processes need to be ready to take full advantage of the benefits they offer. There is one tool we think can help define the continuous delivery pipeline upfront though - Application Performance Management. APM can help quickly identify the bottlenecks and constraints that need to be removed, optimised and/or automated.
3) Shifting Left
DevOps is about breaking down barriers between teams and Continuous Delivery demands effective collaboration through the whole software pipeline. It means testing has to happen much earlier, operations should be involved at the requirements gathering and definitions stage so they know what's coming down the pipeline to them and that requirements around configuration and environments can be satisfied long before the code arrives ready to go-live.
This is what we call 'shifting left' - the movements of tasks typically undertaking towards the end of the software development lifecycle nearer to the start.
4) Promoting Visibility
Allowing all team members to see what's happening in a system supports collaboration and promotes knowledge sharing having a direct knock-on positive effect on quality. Contributions can be easily recognized and rewarded and managers can also see the performance of their pipeline in real time.
Improving visibility increases quality too since collecting and providing data across all parts, pieces and people in a process allows for improved decision making for future workstreams and investments.
5) Keeping an Eye on Standardization
Standardized environment configurations create a solid platform for improvement and optimise automation. Without standardization, results are inconsistent and huge amounts of time and effort are wasted triaging and troubleshooting the source of errors. Having common configurations throughout the route-to-live (development, UAT, system testing, production) results in the elimination of errors and boosts overall productivity. Automating provisioning improves availability, eliminates delays, and enables auditability.
6) Designing Compliance In
If you're thinking about DevOps, working towards Continuous Delivery, it's likely that one of the key drivers is the increasing importance and criticality of your applications. And alongside this, the impact and consequences of system failure increase. And alongside that, we see compliance bodies in all industries continually tightening rules and regulations.
The good news is that building a Continuous Delivery software pipeline automatically enables audit trails. Using automation tools means that you know who's doing what to your systems when, you have a full history of what your system looked like at any point in time (and the ability to redeploy and prove it) - a comprehensive audit trail to show to auditors. You can easily and confidently build best practice into your process.
7) Unifying Assets
Collecting all your software assets in a unified version control platform:
- Streamlines siloes from end-to-end
- Enables teams to work in tighter loops by accelerating feedback, automation and testing
- Makes it possible to redeploy the last known working version if and when necessary
Unifying the collection and management of your assets reduces complexity whilst supporting dynamic work in a highly collaborative and consistent environment.
What do you think? Are there other habits we have missed?
We are hosting a Continuous Delivery Online Clinic on the 15th May - you can register for this here.