Your development teams are busy building your next product releases. You follow an “Agile” methodology for your software development process, and have feedback loops throughout your processes to increase visibility, quality, and speed. You have a well defined build and release process and you think you have it all figured out. But do you?
What happens when 2 of your 3 development teams checks-in good code and the 3rd team checks-in bad code? If you are merging the code from these 3 development teams into a main integration trunk, chances are the entire build process is going to break. This situation causes a ripple effect whereby QA is stuck with a build they cannot test. When QA is stalled, your build and release process is stalled. The development teams have to fix their issues, re-test the individual check-ins and re-merge the changes into the main trunk again. If you are lucky, the build will be successful this second time around. This is adding time and cost to your development process and your release cycle. Oh, and by the way, during this time frame, your customers are stuck waiting for software that is just not getting out the door!
So how does CI help fix this situation? By integrating early and often, the development process becomes more efficient, eliminating the potential bottle necks and stop gaps that you are dealing with today.
The CI process allows development organizations to be faster, more flexible, adaptable, and quality centric. CI build streams throughout the development process provide additional feedback loops, whereby developers and engineers get feedback on their code faster and earlier in the development process, which allows them to react faster. The practice of CI Build and test provides much greater visibility into what specifically broke a build and helps to find problems before the nightly top down build and test processes.
Pure and simple, Continuous Integration finds issues where they much less expensive and much cheaper to fix, resulting in higher quality and less risk in the end product.
Integrating early and often creates a predictable and repeatable environment. This environment can continue to interface with existing build/ test or code review processes; OR, because of the nature of CI, some of these build/ test and code review processes can now be automated, saving even more time during the development and testing processes.
The ideal Continuous Integration situation to address the issues experienced above may look something like this:
1) Each developer/team works on and completes issues that get submitted to a CI Build/Test stream
2) When those issues pass automated testing or code review, they get promoted up to the Nightly Build stream
3) Issues passing build and testing on the Nightly Build stream get promoted to the Feature stream; and from there to the Team, Final Integration, and QA streams.
Continuous integration ensures only those issues which pass the build/ test or code review criteria get promoted up to higher level streams. This process allows for “cherry picking” those specific issues which pass testing while segmenting and not promoting those issues which are broken or need more work. You no longer have an all or nothing build process. QA is always working on a stable build for testing and integration purposes. All bugs, issues and defects are identified and addressed early in the development process.
CI is a key strategy for helping companies evolve their software development process. If your organization has not adopted a CI strategy, you are putting your company’s longevity in danger!