If the road to hell is paved with good intentions, the road traveled by failed software projects is paved with broken builds. As a QA engineer, I used to find myself with wasted days, either stalled because there was no build to test or because the build I had just installed was seriously nonfunctional. After becoming a developer, I learned the masochistic joys of getting the latest code only to find that I could no longer build. From more experienced developers, I learned the survival technique of working with my own little sandbox of code that was days or weeks out of touch with the repository. This worked well enough until that moment we all dreaded: system integration.
I’m happy to report that my life is not like that any more. On my current team, everyone works with current code, the developers don’t suffer from merge hell, and the testers receive builds that are reliably functional. There are a lot of factors that go into reaching this happy state of affairs, but a lot of credit goes to an unlikely hero: an automated continuous integration (CI) system that has been tailored for our process.
Author: Jeffrey Fredrick
Published: Better Software Magazine, September 2004