CruiseControl and I have never really gotten along. When you're a Java shop, you have to use continuous integration. In fact, if you're a code shop, you need CI. For the longest time, CruiseControl was the only kid on the block. I'd heard about Hudson quite a bit, but I didn't take the time to try it. Why not? Well, because CI is hard, and it takes forever to get setup right -- I didn't want to have to re-invest all that time. Man, if only I'd known how wrong I was.