12.1. The Role of the ToolsmithIn traditional factories (that is, factories that produce things you can actually pick up and drop on your toes), there is often a tools department. This department is responsible for producing and maintaining the tools used by the other workers. The members of the tools department are called toolsmiths. Much of this book has been about choosing and using different tools to provide a satisfying software development environment. The people who do this are acting as toolsmiths for their software projects. However, in many projects the position of a toolsmith is not properly filled, and each worker just uses whatever tools are familiar and comfortable. Interestingly, this is the same situation that small-scale craftsmen were in before the Industrial Revolution.
Some smarter companies and projects do have people who are specifically designated toolsmiths for the software. These organizations believe that, just as a product works better when it has been designed (rather than being allowed to just grow irregularly over time), a well-thought-out environment produces better products than does an environment that is a haphazard collection of whatever tools seemed useful at some point. For instance, this book was produced with the assistance of the Production Tools group at O'Reilly, which supports the production editors who shepherd a book from the author's source files to the printed copy and online version. I'm not aware of any hard financial or organizational results to justify employing a toolsmith for your project, but the idea of a tools department seems to have generally done good things for the Industrial Revolution, so I recommend it. So, what is the role of a toolsmith? Each of the chapters in this book describes a part of what a toolsmith can be expected to be involved in. To recap, these areas are: SCM, builds, testing, tracking bugs, documentation, release, and maintenance. Any and all of these areas are good places for toolsmiths to contribute to a project. In the wide-ranging paper "The Computer Scientist as Toolsmith II" (http://www.cs.unc.edu/~brooks/Toolsmith-CACM.pdf), Fred Brooks (author of The Mythical Man-Month) wrote:
A good question is "What does a toolsmith usually not do?" The toolsmith should not try to be an architect or designer for the project. The toolsmith should also not be a long-term developer for the project. The thought behind both of these opinions is that anything long-term that distracts the toolsmith from the development environment means that the environment stops being maintained, and then the rest of the group will suffer as a consequence. However, as discussed below, a few weeks spent developing, testing, and documenting by a toolsmith can produce a crystal-clear understanding of the real problems faced by those groups. Since a toolsmith is a service provider, some customer-service types of activities are often helpful:
Another valuable form of feedback for the toolsmith is to have to use the environment he has created, also known as "eating your own dog food." Though I don't recommend this as a long-term practice (since it distracts from the maintenance of the environment), this is a good idea in the short term. For instance, try entering six bugs in one sessionwhich is the slowest part of the whole process? Debug a problem in a file that is used by large numbers of other files and see how slow the rebuilds really are. Try to fix a broken unit test and then rerun the test suite by hand. I guarantee that the results of these activities will bring a clearer understanding of a group's complaints to any working toolsmith. A toolsmith should also try to avoid making off-the-cuff policy decisions about subjects such as who has access to different parts of the source code, when SCM branches are created, or whether a particular bug really is a critical show-stopper. The toolsmith provides mechanisms to support policies and may well make strong recommendations about how to use the tools, but policy decisions really ought to come from the project leaders and managers. A good toolsmith also has to be nonpartisan about tools that she does not control. The classic example here is the choice of file editors for Unix: Emacs or vi. Both editors are in common use, and the arguments about which is better, and better for what, have raged for decades now. A toolsmith cannot dismiss one editor or the other, no matter her personal preferences (even mine are considered secret). However, it is fair for a toolsmith to restrict official support to a limited number of tools, in order to be able to provide adequate time for each one. 12.1.1. How to Choose a ToolsmithWhile there is rarely a clear career path for software toolsmiths (most of us seem to be developers who have come to specialize in tools), here are some ideas for what to look for on a résumé or to ask for in a job description for a toolsmith:
It's interesting to note that while many of these abilities are very similar to those required for developers writing code, it is not essential (though it is definitely helpful) for a toolsmith to be able to write source code. In a few projects, the managers are the toolsmiths for the project. |