Warning: Continuous Integration builds are addicting
We finally have a first cut at continuous integration builds going for a large ASP.NET application. We are using CruiseControl.NET and NAnt with great success. I wanted to comment on an unexpected psychological effect I experienced. Continuous integration builds are addicting. OK, I'm not even currently on the development team for this project, just helping them out with their builds, but I still feel the need to check the status of the builds throughout the day. I feel stressed when the build is broken, and relaxed when it is fixed.
Checking the status is made easier by CruiseControl.NET's nifty little notification tray applet that indicates build status by showing green or red. One of the developers on the project is going to buy an Ambient Orb and set it up above his cube to glow green or red based on the build status. CruiseControl.NET also provides a web app that shows you the build results and a log of all check-ins since the last build (Here's an example from CruiseControl.NET's own live build server).
In the past, we only did a full build nightly at 11:00 PM. I'm telling you, it is _so_ much better to know the build is broken in “nearly-real-time” instead of having to wait until the next morning when you came in to find an e-mail from the build machine telling you that something you checked in (or forgot to check in) yesterday broke the nightly build.
At first, I wasn't so sure that CI was a good fit for our project because it's fairly large (about 30 solutions), and can take so long to build (20 min or more on a dual proc build box), plus we are using Visual SourceSafe which doesn't have atomic check-ins which can lead to premature build triggering. (By the way CruiseControl.NET has an elegant low-tech solution to reduce the chance of this with its <modificationDelaySeconds> setting).
Think about continuous integration builds if you aren't doing them. I'm sure lots has been written on why they work, but I can honestly say that I didn't fully “get” it until we actually started doing it. Had I known, I would have gotten them going a long time ago.