34 signs that continuous integration isn't working
- When a newcomer arrives on the team it takes weeks of copying files off other people’s computers to get something to build.
- Everyone has a different set of projects checked out on their PC.
- You don’t have a master build script that builds everything on any PC.
- Your software often doesn’t compile.
- Your software often doesn’t pass its automated tests.
- Your software doesn’t have any automated tests.
- When an automated test is failing, you often comment it out.
- The automated tests don’t test the code you actually have.
- When your software doesn’t compile or pass its tests, no-one notices.
- When your software doesn’t compile or pass its tests, no-one cares.
- You have more than one development branch checked out on your PC at the same time.
- Whenever you create a branch for a release it gets huge.
- You’re sometimes surprised that code ended up on branch X (which is in production and supposed to be locked down) and, strangely, it doesn’t seem to be in your new release candidate.
- You often check in only some of the changed files in your workspace.
- You often check in multiple times without actually changing any files.
- You sometimes check in without catching up with other people’s changes.
- When you start a new task, you don’t begin by ensuring you have no modified files in your working copy, and that it is up to date.
- You hate/fear checking code in.
- One moment your code is there. The next it’s gone. Code is often reverted by accident.
- Stories never seem to get finished.
- Developer “done” means something very different from user “done”.
- When every task on the story has been completed, somehow the story doesn’t actually work.
- You sometimes discover two groups of developers are trying to work on exactly the same thing and don’t know it.
- No-one knows who’s working on what.
- It’s difficult to take a cut of the code that’s consistent enough to make a release from.
- When the code goes to QA it rarely works.
- It takes forever to make a release.
- Things that were working fine suddenly stop working.
- If you want to know what code is running live, you checksum or diff it against known versions.
- The checksums don’t match any known version.
- The production, pre-production, test and development environments are all completely different.
- The code works in development and pre-production, but not in production or test.
- You are only allowed to release in the middle of the night / weekend / both.
- Releasing a one-line fix for a show-stopping production bug is “too risky”.
There is a longer article on continuous integration. Thanks to Lindsay McEwan for his contribution to this list.

