Building Software

Please see the bottom of this page for links to several resources. (click read more!)
Building software is a list of steps needed to take source code, images, other things called artifacts into something useful.

Critical Best Practices:
1) Software reproducibility
2) Decoupling your process from your hardware
3) Build early and often
4) Combine technology with the human process

Here is a text of a podcast from IBM and Sundeep Goel. He makes several good points.

When you actually build an application you will need to maintain it. This means even though you working on 2007.5 version of your code, somebody with 2005.2 might need you to rebuild the application.

How do you make sure you know what you built and when? If you can interact with your repository when you build, you have a chance. You need to label all the files in the application. Not 99.5% but all that is needed to rebuild the software. You might not need the 0.5% until you know you don't have it.

The critical part of the build process is making it flexible. When you install Luntbuild, Build Forge, or some other build package, it will be missing something. Any manual and pre-setup steps that are done for a build will need to packaged to fit the build tool. The re-packaging of your build process can start now.

If you have a build machine and have never built on another machine, you are risking your business on a few levels.

One, if that machine fails, your product will fail to build. When that happens you will need to pull all weekers to get the product back together. If you used third party tools that were only on the sole build machine, you could have issues getting another copy.

Another risk is if you have more then just a few developers, they never build an actual shipping product. They compile parts, but never make 100% of the shipping product. They don't get to see all the "work" that goes into getting the product ready for a sale. If they did, they could improve it and stream line the making of the product. Finally, all the broken bugs they thought they fixed with the 94% product they tested on.

Better Builds Online is a great guide to convert projects from ant to maven.

LuntBuild allows you to organize how and what was built.

Hudson Continuous Integration is like Luntbuild. It allows easier use of labels. Although the Perforce support is limited.

Continuous Integration and Code Inspection with Hudson and FindBugs is a good article on code inspection. It is for Java, but the pattern would be the same for other code.