In today’s world of Agile, we know that development teams must offer products and services to end users on their terms, on their choice of devices, and at their convenience – creating and differentiating features that work perfectly regardless of how much time they have to build and release the new software. At the end of the day, this combination of velocity and quality can be make or break for brands, but achieving it is no easy feat.
We believe that teams which are trying to mature their DevOps practices, but facing hurdles, should consider the combination of the ‘Three Cs’: continuous integration, continuous testing and continuous delivery in their workflows. By automating all release activities, teams can assure high quality deliverables throughout each stage of the DevOps pipeline, raising the confidence of flawless release time after time.
Although they serve slightly different objectives, the ‘Three Cs’ can actually integrate to assist teams in meeting their primary goals: speed and quality. But, determining how to combine these three methods into the right formula is crucial, and for many that’s the challenging bit.
Defining the methods
Before we consider how these practices can work together, we should address some confusion still in the market – and take a quick look at what each of these methods really means.
Continuous integration: The most dominant player in the ‘Three Cs’ is Continuous integration (CI) and it’s a necessary approach for any Agile team. CI 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.
By integrating regularly, teams can detect errors quickly, and locate them more easily. Simply, it ensures bugs are caught earlier in the development cycle, which makes them less expensive to fix – and maintains a consistent quality.
Continuous delivery: Continuous delivery is the practice of streamlining/automating all the processes leading up to deployment. This includes many steps, such as validating the quality of the build in the previous environment (ex.: dev environment), promoting to staging, etc. These steps, done manually, can take significant effort and time. Using cloud technologies and proper orchestration, they can be automated.
Teams should ensure they have a monitoring dashboard for your production environment in place in order to eliminate performance bottlenecks and respond fast to issues. This will complete an efficient CD process.
Continuous testing: Continuous testing (CT), which can also be referred to as Continuous Quality, is the practice of embedding and automating test activities into every “commit”. CT helps developers use their time more efficiently when trying to fix a bug for code that was written years ago. To fix the bug, developers should first remind themselves of which code it was, undo any code that was written on top of the original code, and then re-test the new code; not a short process. Testing that takes place every commit, every few hours, nightly and weekly, not only increases confidence in the application quality, it also drives team efficiency.
These three processes are often viewed as distinctly separate identities, fighting for the top spot in the DevOps pipeline. However, we’d argue that the ‘Three Cs’ together are important to the success of one another throughout the delivery cycle, and it’s only by incorporating the CI/CD/CT trifecta that teams will be able to achieve the velocity and quality they need.
But with distinct personalities and separate jobs to do, how can DevOps teams bring these functions together and ensure a smooth running, fully integrated, team?
First, it’s important to understand how each function plays into the others. For example, for CI to be successful, you need to ensure tests are stable and run continuously and in a stable environment – which in turn ensures high reliability of the test results per each build execution. The same goes for CT; to have an engine that can trigger tests automatically requires robust test code, a robust test lab, and most-importantly, cultural and team synchronisation. When both CI and CT are working for you, that means that you are that close to a working CD.
We also believe that there are three key characteristics that teams must have to make the trifecta of CI, CT and CD work together. The first is communication. Communication between team members is vital, and this is something that CI enables. CI allows teams to be Agile, by ensuring teams are all on the same page, despite leaving a project or moving on to a different step in the process, teams can easily integrate once they return, without having to start over from page one.
The second key characteristic is trust – CD alleviates any unknowns by automating and streamlining all the processes leading up to deployment, such as validating the quality of the build in the previous environment and promoting to staging. And third is honesty. If teams leverage CT when developing apps in different environments and with different criteria, it will prevent larger issues from happening once the app is in the sprint, or live, keeping developers honest about the status of their code.
So, we can clearly see the benefits of adopting the Three Cs – and by establishing open lines of communication, and ensuring teams know how each function plays into the other, DevOps can establish a seamless development workflow. And, of course, it’s crucial incorporate CI, CD and CT throughout the entire SDLC to keep deployments moving – and to achieve the velocity of release and application quality which ultimately keeps consumers happy.