(This blog post is shamelessly
ripped off from based on Roy Osherove's praise of FinalBuilder(*) during a session at TechEd Barcelona last year.)
"[The Bus Factor] means if the developer who wrote [the project] is hit by a bus, you're screwed."
- Scott Hanselman
It's common to talk about the Bus Factor of a software project or a piece of code. Specifically, the Bus Factor is the number of people on your team who need to be "hit by a bus" (or change jobs, or change projects, or move away, or retire, or get sat on by an elephant) before the project is in trouble. The hallmark of a bad Bus Factor is having specialised, hard to access, knowledge which is only understood by one or two people on your team.
FinalBuilder encourages a good Bus Factor for builds.
To help demonstrate this, here's the Nant build process for one of my favourite .NET Open Source tools, NUnit:
(Start scrolling now...)
The build process is 2,688 lines of XML, spread amongst 33 XML files. I combined them all into a PDF to create the images shown above. NUnit uses NAnt, but if you're using MSBuild then your build process will look very similar.
Comparatively speaking, this a simple build process. The entire NUnit codebase is only around 70 thousand lines of C# code. The build above doesn't do anything particularly complex. Imagine how much worse this gets if either the codebase, or the level of functionality, needs to grow.
Would you want to be a new developer in charge of working on that build process?
For comparison sake, I recreated most of the NUnit build functionality in FinalBuilder (this is based on a rolling demo that we used at TechEd Barcelona.)
The FinalBuilder project doesn't do absolutely everything that the NAnt script does, but it could be extended to fill in the gaps without changing the appearance drastically from what you see here. The FinalBuilder project also does do some things that the NAnt project does not do - namely version control integration and FTP deployment.
Ask yourself: Which type of build process would I like to see deployed in my organization?
This isn't an entirely fair comparison, because lots of the details about how the FinalBuilder project works are hidden away under the GUI abstraction. That's my the point, though: In FinalBuilder the project details aren't all in your face, but they're easy to find and understand if the person who wrote the build process happens to get hit by a bus.
(*) For the record, we didn't ask Roy to praise FinalBuilder, and we definitely didn't pay him to do so. He said it all off his own bat. I hope he doesn't mind me quoting him. (back)
(**) I don't mean to pick on NUnit here. Naturally, OSS development involves different factors which come into play when choosing tools. That said, we'd be happy to offer the NUnit project a free license (or two) of FinalBuilder for use with internal build and configuration management. (back)