The principal misconception about execution is that it is primarily a function of high-visibility activities (e.g. design), and that other related activities exist primarily for assessing the quality of execution. In my experience, execution itself is in fact increasingly dependent on decreasingly visible supporting activities, as illustrated by the following diagram:
The Pyramid of Good Execution [ PDF ]
Since supporting infrastructure is typically neglected, there is usually a great deal of leverage in improving it, even if that requires compromising high-visibility activities.
Nonetheless, even with the best possible design practices, the fact remains that...
| Anything that isn't verified is most likely broken. |
Since it is also necessary to verify arbitrary combinations of features, the verification effort must also be coherent, meaning that there is a single verification platform that covers all the features. An incoherent verification effort requires more resources to be complete, which is problematic because even coherent verification requires at least twice as much effort as design on contemporary state-of-the-art projects.
However, because design changes are a normal and commonplace part of the verification cycle, even the most thorough verification effort is worthless unless it can be applied to an arbitrary number of design iterations. Therefore, the verification effort is entirely reliant on the build system.
Unreliable build systems can sometimes be made reliable by consistently clean-building, meaning that all builds are from scratch regardless of what has changed since the last build. However, clean-building is also very inefficient. The problem with an inefficient build system is that it dramatically increases the length of the design/verification cycle, which significantly slows the rate of progress.
Still, even the best build system in the world won't help you unless you are building the intended version of the design and verifying it with the intended versions of the tests. Therefore, the build system is entirely reliant on revision control.
Effective and fully functional revision control is so fundamental that it is often taken for granted. In reality, it requires quite a bit of attention to get right, and the consequences of getting it wrong permeate all aspects of the project, as well as the operation of the organization in general.
Anders Johnson, last modified $Date: 2002/02/05 $