The first time I heard the term ‘Tools Master’ was in Steve Yegge’s Wizard School essay a few years ago. If you haven’t read that one, go read it. Now. I’ll wait. Read it? Good, now lets go on. Yegge didn’t really talk about what a Tools Master was, or what the job entailed, but from the title itself and the fact that Jamie Zawinski holds it in the essay, it’s not too hard to make a rough guess. Zawinski was one of the moving forces behind the XEmacs text editor and the Netscape (later Mozilla) browser. Now, I consider both the text editor and the browser to be very important tools, both from a software user and a software maker standpoint. For the purposes of this article, let me define a Tools Master to be someone who is an expert in the software development tools (IDEs, compilers, debuggers, test frameworks) used by a particular team. I’m going to advance the hypothesis that having at least a part time Tools Master makes for a better development team.
I’ve been thinking about this matter on and off for a while, but what brought it to my full attention was this article on Dream Development Teams. In it the author talks about an ‘Operations Guy’. An operations guy would be responsible for making sure that the underlying systems used by the team (build farms and their configurations, test environments etc) are all up to date and working well. I think this is a subset of the role of Tools Master that I envision. In his classic The Mythical Man Month, Fred Brooks recommends having a tool master to reduce the burden on the rest of the team (and streamline communication).
Software development itself uses a lot of software and like all other software, development tools are often buggy, incomplete, poorly documented or just not designed for the specific situation they’re being used for. When I was in my software engineering class last semester, we were using the KDevelop IDE. The version we were using (which was one or two versions behind the cutting edge) only had rudimentary Subversion support. As a result, we would often have to drop into a terminal to use Subversion before moving back to KDevelop. It wasn’t exactly painful, but it was certainly something that we would have liked to have fixed. This is a perfect job for a Tools Master. Since KDevelop is open source, he or she could have patched the source to add the functionality that we wanted. Of course, this would have meant that we would be running our own internal branch of KDevelop, but we would also send the code to be merged with the upstream.
Having a Tools Master certainly doesn’t mean that the team should be writing their own editors and compilers and test frameworks all the time. I believe in software reuse and like free stuff as much as the next guy, but sometimes what’s out there is simply not enough. Having read about startups and successful companies, I’m coming around to the idea that if you want to launch a really innovative product, you might want to stray a little bit of the mainstream. For example, Paul Graham’s Viaweb (which was arguably the first webapp) was written in Common Lisp, not a typical development environment unless you’re an AI researcher. Joel Spolsky’s company uses a custom internal language called Wasabi. In such cases, having a Tools Master would be indispensable.
The Tools Master isn’t just relegated to supporting the main development or fixing bugs. The tools that a Master would create would be proper pieces of software in their own right, just as the infrastructure used by modern applications (Google File System, Ruby on Rails) are robust software systems on their own. In fact, I think being a Tools Master might be the best job on the team. Not only would you get to play with cutting edge technology (compilers often have algorithms straight from research papers), your clients would be programmer’s themselves who would have a better idea of what they want than well-meaning customers with no software development experience.
At the same time, being Tools Master would also be very demanding. If developers in the field are anything like the people I’ve worked with, they take their work environments pretty seriously and can be very whiny if the situation demands it. A lot of programmers (including me) have an intense desire to play with the latest and greatest piece of technology and keeping that desire in check can be a very trying experience. After writing software for a while you also learn to love some tools and hate others. I love Emacs and wasn’t very happy when I needed to use KDevelop for my software engineering class. I’m not sure how real work software shops work in terms requiring common tools, but I think that a Tools Master is likely to get lots of complaints if the tools in use aren’t up to par with those the developers are used to.
Considering the very important duties that the Tools Master would have on a team, it’s important that he or she be a very competent hacker. Having systems that are broken, buggy or just a pain to use can dramatically reduce a team’s efficiency. Any software team also uses a wide variety of tools, and the Master would have to be fairly proficient at all of them. I think that a large part of the job might involve lashing together existing systems, so a good knowledge of scripting tools would be necessary. At the same time, such scripts can have a tendency to become unreadable and unmaintainable since they’re written in the heat of the moment. If such scripts eventually become the backbone of the development system they need to be cleaned up and kept in proper shape. It’s no wonder that Steve Yegge picked Jamie Zawinski to be his fictional ace Tools Master. You could easily consider him a real world Tools Master.
Unfortunately, I don’t know enough of software development in the real world to say how much of what I said actually happens. However, if I ever get to lead my own development team (or start a company), I’m definitely going to have a Tools Master. Considering my interest in programming languages and dev tools, I might want the job myself (if I’m good enough).
I envision Tools Masters as being the blacksmiths of our times. Knights with shining Mac Pros riding their trusty Quad Cores into battle might get all the glory, but skilled blacksmiths are no less important. They need to know a lot about how weapons are used and wars are fought in order to create good weapons. You can’t be a good Tools Master without knowing about software development. I’m going to be keeping a look out for examples of Tools Masters on the Internet and trying to learn from them. If you have any examples you know of or admire, you should share them in the comments. Happy Hacking!