CI / CD — A Guide to Maturity
Continuous Integration is a development practice that requires developers to integrate code into a shared repository several times a day. Each check-in is then verified by an automated build, allowing teams to detect problems early [Thoughtworks 01]
Continuous delivery is a series of practices designed to ensure that code can be rapidly and safely deployed to production by delivering every change to a production-like environment and ensuring business applications and services function as expected through rigorous automated testing [Puppet 01]
Continuous deployment is the next step of continuous delivery: Every change that passes the automated tests is deployed to production automatically [Puppet 01]
Continuous Delivery and Continuous Deployment capabilities, together, represent the holy grail of modern software engineering. Continuous Delivery and Continuous Deployment are closely related, so I’ll refer to both as CD from now on for simplicity. Continuous Integration is a key enabler of CD.
When IT reaches a point where CD is possible, they are finally in the best position to deliver value to their clients in the shortest turnaround time and maximum level of quality possible within that environment; at least from a technical perspective.
CD is about far more than just delivering code into production as often as possible; the software engineers need to ensure that code which is deployed is:
- Backwards compatible
- Maintainable
- Performant
- Resilient
- Scalable
- Functional
- Secure
- Highly available
To truly reach the CD zenith software engineers really have to turn all the IT “dials” to the max. For teams just embarking on the CD journey, it can be a daunting task to try and make sense of all the frameworks, practices, tools, buzzwords and hype out there. It can also be difficult to figure out how the team is progressing on this journey.
We’ve put together a high-level CI / CD Maturity guide to help with these challenges. We list all the processes and practices that need to be in place before you can truly claim that you have made Continuous Deployments possible. The guide is aimed at Java based service development. The guide makes certain basic assumptions i.e. it assumes your code is managed in a version control system. We specifically omit certain items such as microservices since you can achieve CD without using microservices.
The suggested tools are the tools we have experience with at Standard Bank. The alternative tools are listed simply as a comparative aid. The tools listed aren’t necessarily the best available nor the most suitable for your specific needs. You still need to do the necessary due diligence to ensure you pick the best tools for your environment.
The goal of this guide is to first and foremost highlight the practices required for CD. The tools simply help with the adoption of the practice; the simple rule being that we should never build a process or practice around a tool, the tool must rather make the process or practice easier or more efficient.
When using the guide, we must not ignore the human component necessary for a successful transition to Continuously Delivery. The success of any significantly complex initiative requires highly skilled, motivated and empowered professionals. Tools alone won’t get you there.
The list is quite intimidating so we’ve highlighted the practices we think you should focus on when starting on this journey. The high priority practices were chosen because they give the most impact in terms of productivity, quality, delivery and risk mitigation.
We hope you find it useful. (Links to XLSX and PDF versions of this guide provided below the image)
- https://feeds.standardbank.com/standimg/docs/sbg/ci-cd-guide.xlsx
- https://feeds.standardbank.com/standimg/docs/sbg/ci-cd-guide.pdf
References
[Thoughtworks 01] : https://www.thoughtworks.com/continuous-integration
[Puppet 01] : https://puppet.com/blog/continuous-delivery-vs-continuous-deployment-what-s-diff