When I ask people what Continuous Integration (CI) is, I generally get a lot of different answers. Popular ones include:
“Running builds all the time!”
“Binaries on demand for QA.”
“The automation of the build so that developers don’t have to do it.”
And my favorite – “That server that sits in the corner that only the release engineer cares about.”
While all of these responses might be partially true, they don’t really cut to the core of what Continuous Integration is all about.
The true value that CI provides to your organization is QUALITY.
Let’s take a step back and talk about how quality happens. If we take a typical software development organization, feedback from the QA team is what drives product correctness. This feedback is used to help developers fix mistakes, and even change course in the way that something is designed for a specific release. One of the best ways to improve quality is to get that feedback to the developers faster, so developers don’t invest too much time, effort, and work into something that might actually be broken.
In Mary Poppendieck’s book “Lean Software Development: An Agile Toolkit” she often refers to feedback loops as being an important part of a development cycle – even going as far to point out that feedback loops help optimize certain common objects we use in everyday life, like a traffic light or in my opinion, a toaster oven. Feedback loops are all around us, it’s the difference between waiting at a traffic light that operates on a timer versus the ones that take feedback from the sensors in the road, sensing when vehicles are there. Which one do you think is more efficient?
This is what CI really is, it’s a basic feedback loop to tell your development organization that the code is either alive or dead. If dead, notify everyone and fix it. Without it, you might wait a week without fixing the problem, and will have coded yourself into a bad situation. It’s not about running builds all the time, it’s about knowing your code is still good.
What’s even more interesting about the current state of CI is that people are figuring out all kinds of ways to add new types of automation to it. For example, with Continuous Deployment, teams are measuring how the builds perform in a deployed state, even adding automated testing to it.
CI is turning into the ultimate feedback machine, going beyond regular builds and improving quality for development organizations.