Continuous Delivery or CD is a DevOps practice where teams produce software in short cycles. CD ensures the release-readiness of software at any given time. It is the ability to build, test, configure and deploy from build to production, quickly and in a sustainable way. Martin Fowler defines it as such:
“Continuous Delivery is a software development discipline where you build software in such a wan by that the software can be released to production at any time.”
And while there is much insight and discussion on how to enable continuous delivery and its best practices, we bring you the common pitfalls in CD implementation. Or what not to do:
1) Mistaking Continuous Deployment for Continuous Delivery
Many organizations fail to distinguish between continuous (deployment and delivery). Continuous Delivery is a process that ensures that code can be rapidly and safely deployed to production by committing every change to a production-like environment. CD ensures business apps and services function as expected using diligent automated testing.
However, continuous deployment is the next logical step. It requires that all successful changes made to code base will be deployed almost immediately.
Thus, Continuous Delivery ensures that code base is always ready at a quality level to be safely released. Yet, Continuous Deployment is daunting for organizations and they somewhere feel that they are not implementing CD if they aren’t deploying continuously.
So while, continuous deployment may not be appropriate for every organization, but continuous delivery is an absolute must for DevOps.
2) Long and slow deployment pipelines
A common mistake is setting up long-winded deployment pipelines requiring many steps in a sequence. This leads to a long wait between committing code to version control and finally seeing the changes in live environment. It defeats the very purpose of CD – to have rapid feedback available for teams to act instantly on the failures and learn by tracking these issues.
Shorter deployment pipelines facilitate rapid feedback and better decisions. Therefore, the ideal approach is to use wide but short deployment pipelines that provide enough flexibility to choose which tests to run depending on the specific changes.
3) Lack of effective dashboards and metrics
Logging and metrics are crucial to an effective CD practice. Contemporary tools require good log data, and good data translates to relevant information. What is the data everyone wants and what is required to assess the most important needs.
When instrumented correctly, telemetry enables automated feedback mechanisms and monitoring applications in real time. While DevOps teams use telemetry to detect and resolve problems as they happen, this data is also useful to technical and business users.
4)Ignoring the database
One of the reasons for forgetting or overlooking the database is a mistrust for automated database development. However, with the right implementation and structure along with a transparent automation infrastructure, the worry is misplaced.
The answer is smart database automation to ensure DevOps is applied consistently across departments and across the entire software ecosystem.
5) Not Investing in Continuous Testing
A goal without a plan is just a wish. Without Continuous Testing, Continuous Delivery remains a pipe dream. Continuous Testing enables shifting left by testing early, often, and helps assess business risk coverage.
This instant feedback on the impact of changes allows to shrink the lead time from check-in to release.
Waiting to test at the end of production lifecycle is neither real DevOps, nor Continuous Delivery and will only lead to unwelcome surprises and delays.
But Continuous Testing requires an effort on the enterprise’s behalf to organize their tools and talent. It takes the right combination of test management tools, build tools, version control systems and planning to make it happen.
Continuous Delivery is vital for the DevOps culture, and it needs time, planning and investment to work.