Before now I've talked about our use of the Subversion version control system and Visual Studio.Net 2008. These are two of the most important tools we all use in our day-to-day operations. Today I am going to talk about another one that saves us a lot of time and potential mistakes: Final Builder
Programmer's Heaven is a large site. To keep the code base modular, we break it up into many libraries. Some of these libraries provide primitives that we use all over the place. On top of this bottom "layer" are another set of modules that relate to specific features. For example, we have the wiki engine, the forum, the blog engine and so on. Finally, there is the web project for the site itself.
In all, we have perhaps a dozen solution files to build each time we want to do a full build of the site to test or deploy. Doing that by hand every time would be extremely laborious and error prone, so we automate it. There are numerous ways to do this. Makefiles are perhaps the best known solution. Based on inference rules, they are certainly powerful, and pretty portable too. They are used for other projects I work on, where portability is a large concern. However, at PH we only ever build internally, always on Win32 and for deployment to an environment we have full control over.
Before I took over as lead developer here, Tore (the founder and webmaster here) had already automated the build process using Final Builder. It's GUI-driven, has plug-ins for numerous source control systems, compilers, unit test suites and so on as well as a huge range of file operations - and far more that we've just not needed yet. The build fails if any project fails to build, but we also fail if any of the unit tests fail too (something I'll talk about another time), to help prevent us from deploying broken stuff. Note that we build the unit tests and run them, but don't actually deploy them.
On a system "this big" (yes, I know, there are far, far bigger ones out there), life without an automated build tool would be rather painful. If you have a system of more than a couple of modules, I suggest you invest in something, whether it's a makefile, a home-grown script (I'd hack it up in Perl, of course
) or something like Final Builder, depending on your needs. There is a free trial of Final Builder that you can get if you want to play. (And by way of disclaimer, I'm not involved in any way with the company behind Final Builder; I'm just sharing something that has worked well for us here at PH.)