I've been reading a bit about CI servers like Jenkins and I'm wondering: at which point is it useful?Because surely for a tiny project where you'd have only 5 classes and 10 unit tests, there's no real need.Here we've got about 1500 unit tests and they pass (on old Core 2 Duo workstations) in about 90 seconds (because they're really testing units and hence are very fast).  The rule we have is that we cannot commit code when a test fail.So each developers launches all his tests to prevent regression.Obviously, because all the developers always launch all the test we catch errors due to conflicting changes as soon as one developer pulls the change of another (when any).It's still not very clear to me: should I set up a CI server like Jenkins?  What would it bring?Is it just useful for the speed gain? (not an issue in our case)Is it useful because old builds can be recreated? (but we can do this to with Mercurial, by checking out old revs)Basically I understand it can be useful but I fail to see exactly why.Any explanation taking into account the points I raised above would be most welcome.
At which point is a continuous integration server interesting?
continuous integration
Is it just useful for the speed gain? (not an issue in our case)Any time spent cycling your process is time you could have spent getting into the flow of developing.You will also save time at milestones because you ideally are building fully packaged and ready-to-ship bits that can be burned straight to CD, uploaded to the web, etc.Is it useful because old builds can be recreated? (but we can do this to with Mercurial, by checking out old revs)No, you don't recreate builds.  You use the build it created, and keep it around until your retention settings toss it out.You build it on the build server, as opposed to on some Dev's box.Here we've got about 1500 unit tests and they pass (on old Core 2 Duo workstations) in about 90 seconds (because they're really testing units and hence are very fast). The rule we have is that we cannot commit code when a test fail.In addition wouldn't you like to be able to run automated integration or end-to-end tests on your code and catch issues that unit tests won't catch?You wouldn't want to run those on dev boxes, because it would be a pain to set up and maintain that environment.  Integration tests also tend to be very slow to execute.at which point is it useful?It is an investment like any other.Use it once and you might come out behind or only break even.  Use it on multiple projects and you will probably come out ahead.It also depends on the type of applications you make.If you make web applications that need to be deployed to a Java Application Server, or IIS, then CI becomes a no-brainer.  Same if you have a database as part of your project.  Deployment is painful to execute manually, and your QA team (if you have one) will need it as often as daily at some point.Also, you might want to see how your needs and problems align with Joel Spolsky's 12 Steps to Better Code.  Particularly 2, 3 and 10 (though they're all interesting and important).