Introduce a similar, yet different, antipattern: "It only builds on this machine" or as I like to call it: The Magic Machine. The Magic Machine is the only machine capable of building your software. It's the "Don't touch that machine or we'll go out of business" machine. It turns out this is much more common then we may realize.
This occurs for one reason: tightly-coupled build dependencies! Typical Causes:
- Build script is tightly coupled with the IDE
- No build script. Every build is a custom hack job.
- The build script only exists on the Magic Machine
- A customization of the build script only exists on the Magic Machine
- Dependencies on Database/Application Server or other servers that must be recreated for each machine
- Custom configurations (username/password, scripts) on Magic Machine

Symptoms and Consequences The symptoms are very straightforward: you try to build on a different machine than the magic machine and it won't build. The bottom line is that if this Magic Machine ceases to work, you are effectively out of business for the product you are producing. The risk of relying on only one machine that can build your software occurs more frequently than you may imagine. You must immediately work to ensure that you can build your software on any machine. Depending on your particular circumstances, this may be a significant undertaking.
I highly encourage development groups to build on a separate machine; just make sure it's not the only machine that is capable of building your software. The worst-case scenario, and all too common, is if your development machine acts as your build machine (and magic machine).Refactored Solution
- Create one set of build scripts that everyone uses
- Build dependencies into the build script (e.g. using relative references)
- Make it simple to download servers and other software for which the build has dependencies
- Scorch the environment on each machine to ensure build is working and not relying on files from previous builds
Benefits The primary benefit is that you have working software at any point in time. What's more is you will learn of integration problems before you deliver to the users. By building on a separate machine, and any machine, you enforce a single source code line obtained through your version control repository.
Originally authored by Stelligent at testearly.com
Comments