Continuous Integration

Supports Pillars:

Confidence, Collaboration

Dependencies on Other Skills:

Collective Ownership

Definition:

When a team of developers works on a project, changes that each one makes impact the work of the others. Conflicting changes can cause problems during integration. The more frequently we integrate the less painful it is when such conflicts occur, because the number and size of conflicts is small.

To do so, we first integrate other people's changes from source control and make sure that the build passes locally. Then, we check in our own changes and run the build somewhere else. That verifies that everything works outside of our own environment (We could have local changes or configuration that we forgot to check in.)

CI is often seen as a two stage process, firstly the act of integrating our code with all other code on a main branch, ensuring that the build passes which includes all our unit tests. This first stage will normally happen hourly or many times an hour. This type of build should be very fast, typically taking minutes, as all unit tests are run in memory. This first stage will generally run on a CI server amd will normally not communicate with products outside of itself.

Once the first stage passes all tests, a second stage of CI should occur. This can occur at regular intervals, typically daily or a few times a day, which includes the running of automated acceptance or requirements based tests.

Resources:

The Art of Agile Development, Shore/Warden, 183-192

Steps to Mastery:

Can identify what kinds of code changes will cause problems for other developers, and alerts them in advance.

Writes code iteratively, in small tested units, which can be released at least daily.

Designs code so that the number of classes impacted by any feature enhancement is minimized, while avoiding huge classes that know everything.

Performs integrations in a way that is non-disruptive, fails fast, and rolls back graciously

Organizational Support of this Skill:

An automated build, including all the steps necessary to have a working, tested, production ready application.

A continuous integration server, kept in a stable, healthy state.