34 signs that continuous integration isn't working

  1. When a newcomer arrives on the team it takes weeks of copying files off other people’s computers to get something to build.
  2. Everyone has a different set of projects checked out on their PC.
  3. You don’t have a master build script that builds everything on any PC.
  4. Your software often doesn’t compile.
  5. Your software often doesn’t pass its automated tests.
  6. Your software doesn’t have any automated tests.
  7. When an automated test is failing, you often comment it out.
  8. The automated tests don’t test the code you actually have.
  9. When your software doesn’t compile or pass its tests, no-one notices.
  10. When your software doesn’t compile or pass its tests, no-one cares.
  11. You have more than one development branch checked out on your PC at the same time.
  12. Whenever you create a branch for a release it gets huge.
  13. 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.
  14. You often check in only some of the changed files in your workspace.
  15. You often check in multiple times without actually changing any files.
  16. You sometimes check in without catching up with other people’s changes.
  17. 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.
  18. You hate/fear checking code in.
  19. One moment your code is there. The next it’s gone. Code is often reverted by accident.
  20. Stories never seem to get finished.
  21. Developer “done” means something very different from user “done”.
  22. When every task on the story has been completed, somehow the story doesn’t actually work.
  23. You sometimes discover two groups of developers are trying to work on exactly the same thing and don’t know it.
  24. No-one knows who’s working on what.
  25. It’s difficult to take a cut of the code that’s consistent enough to make a release from.
  26. When the code goes to QA it rarely works.
  27. It takes forever to make a release.
  28. Things that were working fine suddenly stop working.
  29. If you want to know what code is running live, you checksum or diff it against known versions.
  30. The checksums don’t match any known version.
  31. The production, pre-production, test and development environments are all completely different.
  32. The code works in development and pre-production, but not in production or test.
  33. You are only allowed to release in the middle of the night / weekend / both.
  34. 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.