Without a doubt, continuous integration (CI) has become a mainstream principle for software development. The benefits of CI are well-known across the industry and it would be hard to find anyone who would argue against implementing it.
Here, I wanted to gather those benefits into one central place. But I also thought it would be fun to play devil’s advocate and try to find the drawbacks, or challenges, of continuous integration.
What Is Continuous Integration?
Fundamentally, continuous integration (CI) is a development practice where developers integrate code into a shared repository serval times a day. In that repository, the code is verified by an automated build that detects any problems early in the process. This allows teams to spend less time backtracking and more time building new features.
The Benefits of Continuous Integration
1. Risk Mitigation
According to Martin Fowler, the most substantial benefit of continuous integration is reduced risks. By deferring code integration, teams increasingly compound the number and severity of their merge conflicts. When teams integrate frequently (with an automated build), they reduce the number of potential risks because they always know the current state of their system.
2. Quality Insurance
Teams that implement continuous integration have greater confidence in their operations. They know the automated build is catching defects immediately, which allows them to promise quality. They aren't guessing the number of bugs in their system either, which allows them to give accurate numbers to their teammates and a better service for their customers.
3. Increased Visibility and Enhanced Teamwork
An automated build provides a team complete visibility into their system. They know the number of issues and can combat them quickly. Increased visibility also allows teams to coordinate before a small issue turns into something bigger.
The Challenges of Continuous Integration
1. Organizational Culture Changes
Some businesses prefer traditional methodologies and might have a hard time implementing continuous integration. They would have to retrain staff members, which would mean overhauling existing operations. Managers may be resistant because continuous integration doesn’t help them meet their immediate company objectives (e.g. money over quality).
2. Difficult to Maintain
Building an automated code repository is not a simple task. Teams must build the proper testing suite and spend time writing test cases versus developing code. At first, this could slow them down and make them lose faith in completing their own projects on time. If the testing suite isn’t stable, it could work perfectly on some days, but other days it may not work. The team would then have to spend more time trying to figure out what happened.
3. Numerous Error Messages
For larger development teams, they may see CI error messages daily and start ignoring them all together because they have other tasks and concerns. They may start to see a broken build as a normal thing and defects could start accumulating on top of each other.