Posted on March 29, 2016
by Doug Klugh

Continuous Integration (CI) is one of the best methods for promoting increased productivity and higher software quality while effectively supporting Agile practices.  Development teams that are good at CI have a high confidence level in their software that resides in source control.  And through automated testing and associated metrics, they have a good understanding as to the quality of that code.

What is Continuous Integration?

CI is a software development best practice that was adopted as part of eXtreme Programming (XP) to help ensure the integrity of software under development.  It requires developers to integrate code several times throughout each day by checking code into their source control repository.  Each time this happens, that code is automatically compiled and built to ensure proper code syntax and to ensure the components are successfully assembled and packaged into a versioned software build.  Automated tests are also often run to validate code quality and functionality.  These tests usually include unit tests, but can also include functional and regression tests.  CI is often used in conjunction with Test Driven Development (TDD) to ensure high quality of the software being developed.

Safeguarding Quality

CI can serve as a gatekeeper to the source control repository by rolling back any changes that breaks the build or fails any of the automated tests.  Notifications can then be sent out to the developer who checked-in the code or to anyone else.  This helps to maintain a specific level of quality for all code in the source control repository and facilitates collaboration among team members.

Benefits of Continuous Integration

CI provides numerous advantages for developers, teams, stakeholders and beyond.  The value is realized through higher quality, reduced time to market, and greater predictability; all of which translates to happier customers, happier employees, and higher profits.  Based on your practices and how your environment is configured, CI services can range from automatically creating software builds to safeguarding the source control repository through various quality gates.  And it all comes down to automation.  The more you take out of the hands of your people, the more productive your team(s) tends to be.

Confidence in Your Code

By gatekeeping your source control repository, you can be confident that all of your code compiles, builds, and successfully passes all automated tests.

Faster Integrations

Gone are the days spending hours or days, resolving dependencies, trying to integrate your software.  By integrating and building on every check-in, you will know immediately if there is a problem integrating any of your software components.

Faster Deployments

Automate deployments as part of your CI process to automatically deploy to QA or UAT environments.  This will ensure that QAs and other stakeholders always have the latest builds.

Reduced Risk

Integrating, building, testing, and deploying often is one of the best ways to mitigate risks associated with software development.  The sooner you identify defects and issues, the sooner (and cheaper) you can fix them.  And they will usually be small and relatively easy to fix.

Works on My Machine

Anyone who has done any significant development work outside of a mainframe environment has, at some point, declared “it works on my machine.”  While one developer may implement some changes, validate the changes locally (on his/her machine), and check the code into source control, another developer may pull down those changes and discover it either breaks their build or does not function as expected.  CI resolves this problem as it automatically compiles, builds, and validates the changes that were checked in and rolls back those changes when they break the build or simply don’t work.

Facilitation of Agile Practices

CI facilitates Agile development by helping to roll out small, incremental changes often.  By continuously integrating small pieces of functionality, testing early and often, and automatically deploying those new features to QA or UAT environments, the stakeholders have many opportunities, to not only see the new features, but to get their hands on them and provide feedback early and often.  This visibility into an evolving product is a core value in Agile development.

Conclusion

Building a mature software development team requires continuous integration.  Developing software without it only helps to increase risk, extend development time, reduce software and code quality, extend the feedback loop for stakeholders, and causes junior developers to go broke as they contribute a dollar each time they break the build.  Few practices offer as many advantages as CI.  For a relatively low cost, there is much to be gained.
Tags:
Agile automated testing code Continuous Integration (CI) defects feedback quality risk Test-Driven Development (TDD) visibility Xtreme Programming (XP)

Doug Klugh

Doug is an experienced software development leader, engineer, and craftsman having delivered consumer and enterprise firmware/software solutions servicing more than one billion users through 20+ years of leadership.

Similar Articles


subject Article

Branching for Team Agility

High performing Agile teams are always expected to deliver multiple features within an iteration.  To do this effectively, you must have a configuration management process and branching strategy that support concurrent feature development.  Being able to develop features in isolation will enhance your team’s ability to deliver value to your customers quickly while helping to improve quality control.

Read More
subject Article

Why Bother With TDD?

Does it really make sense to test code that hasn’t even been written yet?  Or to disrupt your development mojo every minute to stop, write tests, and refactor code?  It does if you want to deliver software faster, through better code, with fewer defects, and greater agility.  As software development leaders, it is important to understand that Test Driven Development goes well beyond quality control.

Read More
subject Article

Agile Is More Than Process

There is more to Agile than estimating stories, collaborating with customers, and showing working software.  Agile is also about technical excellence.  And this is where many Agile teams drop the ball.  All too often, teams focus too much on process and not enough on technical practices.  If the effort, complexity, and risk is too great for your team to extend and maintain their software, they will struggle to deliver functionality to their customers at the end of each iteration.  They will struggle to deliver working software as promised.

Read More