I want you to write down a list of 5 tools you use on a regular basis, to get stuff done. Pick your favorites; it doesn't have to be scientific, just the 5 you can think of quickly that make the biggest difference in your daily life. If you're a programmer, list your IDE, editors, browser, whatever. If you're an artist, list your art software, tablets, pen and paper brands, and so on. If you sit around on your fat ass all day surfing the web and eating junk food, list stuff like "plastic bags," "the Coca-Cola corporation," or "fork."
Got your top 5? Good. Now find out who made each of them. Send the creator a letter of thanks, and make it sincere. If appropriate, send a small cash donation, anything you can afford.
No, this is not a subtle plot - I did not litter the above paragraphs with subliminal messages in an attempt to harvest cheques and praise from you. (Go ahead, read it again - you won't find any such devious devices.
I haven't lost my grip on reality, either - fact is, I never had one.
My motivation for this is simple: tools are underappreciated. That may sound weird in a day and age where editor, compiler, and 3D modelling package are defended in epic flamewars that make religion jealous. Who hasn't been singed by the roiling inferno of Emacs vs. vi, Visual C++ vs. GCC, Max vs. Maya? Linux vs. Windows? OpenGL vs. DirectX? Puppies vs. kittens?
Sure, plenty of people understand very well that tools are important, and how much effect they can have. I've dribbled quite a few grandiose tomes about how important tools and efficient workflow can be. But there's still a problem.
I love Fred Brooks. I really do. If you haven't read The Mythical Man-Month, go buy it and read it like ten times, rightfrickennow. It's genius, it's profound insight, and it's crammed full of invaluable truths about how our business works. And it's three decades old. You can't buy timeless power like that. (Well, actually, you can - try Amazon or your local Borders.)
Good ol' Fred suggested an interesting formation for software development teams, similar to the way surgeons do their thing. One of the central members of the Surgical Team is the tool creator. Brooks correctly and emphatically points out just how valuable that guy really is, and makes it clear that to underestimate that role is suicidally foolish.
And yet how many times have we all looked over the classifieds, seen a nice-looking job with great pay and benefits for which we are totally qualified, and then shrugged it aside because "it's just tools"? Shame on us. Shame on us stupid, stupid fools. I've done it, and I'm pretty sure you probably have, too. Heck, if you're like me, you do it a lot - and rarely if ever realize it.
Here's a quick thought experiment for you: think about some huge, awesome, ground-breaking, revolutionary project that you'd be interested in working on. The Pneumatic Midget Cannon, Doom IV, a cure for cancer, holographic interactive porn, whatever. Now, suppose you're given your dream job working on this project: you set your own hours, your own responsibilities, and even your own salary. You can have one of two main roles: working on the project directly, or creating tools for others to use as they do the project. The positions are identical in every possible way, except for the actual work you do.
Show of hands: who wants to make tools?
Put your hand back down, you filthy liar. Everybody wants to be on the front line, doing the sexy job and raking in the TV interviews and book deals. Can you name a single person involved in the Manhattan Project, without looking it up? But I bet you know the president who dropped the bomb. Can you name three people who have worked on Visual Studio? (Microsoft employees need not apply.) But you probably know people who use it... like, say, John Carmack, or Tim Sweeney.
Ever heard of Alexander the Great? Sure you have. Ever heard of Iolaos the Ironmaster? Didn't think so - he was "merely" the guy responsible for creating most of the legendary weapons and armor used by Alexander's mighty armies.
And yet you've never heard of him.
OK, fine... the fact that I totally made the guy up sort of skews the numbers. But it's the principle that counts; I had to make him up because nobody knows who actually did it. Being the guy that makes the tools isn't glamorous or attractive. It's just boring. If you want the glory, you've got to be the guy who goes out and uses the tools.
Some people might argue that that is a natural thing; after all, a sword isn't really worth much unless you cut and stab stuff with it. Compilers can't write code by themselves. Little balls wrapped in leather don't run around autonomously on fake grass fields. People have to use the tools. So who really cares if the tool creators don't get any love?
I say, though, that this situation is a travesty, a tragedy of epic proportions, a horror and shame and all-around detriment to all of civilisation. Well, maybe not all that, but it definitely sucks.
Sure, we have to use the tools in order to do anything meaningful, so tools on their own are nothing. But what is a great man with no tools? I submit to you that he's actually an impotent shmuck who will get fat and die of a myocardial infarction on his couch from eating too much junk food. Or maybe get stabbed by the Other Guy and breathe his last in a decidedly anticlimactic pool of innards. That sort of depends on what exactly he was going to do. But either way, he's probably not going to get much done.
Magnificent tools with no users are, at worst, still pretty good tools. Magnificent users with no tools at all aren't worth jack.
Truman would be nice and obscured by history if he hadn't cooked a couple of cities clean off the map. Had he never gotten ahold of computers and programming tools, John Carmack would have been... well, not nearly as famous most likely. If good ol' Alex didn't have his sword, he wouldn't have done that whole Gordian Knot thing, and we probably never would have heard about him.
There's a moral to all this. The next time you start up some project, don't fall victim to the temptation to do the tools later. I routinely see projects start up, and people are all excited and enthusiastic, and really keen on getting stuff done. They figure it's worth the mild inconvenience of editing things by hand and gimmicking around for a while until the "tools" are all done. After all, maybe the data formats will change, or my ideas will go some other direction, or... or... or... whatever. Write in your own excuses.
The important thing is, those excuses are evil lies. Eventually, you will reach a point where not having tools is actually costing you more time, effort, and frustration than the expense of doing all the "boring" job of creating the tools. I think most people already realize that; the problem is, most people wait too long to do the tools. By the time you notice that you need tools, it's already too late.
Suppose you're out on the battlefield. Maybe you're saving the earth from evil alien demons, or whatever. You brazenly swaggered out onto the field unarmed, certain that as soon as you knew the level of danger, you could run back, order a suitable weapon, wait for it to be manufactured, learn how to use it, then get back out to those evil demons in time to load some hot lead in their maniacal asses.
Sounds really stupid, doesn't it? And yet, in software development - especially games - we do this to ourselves all the time. We start with just a "quick and dirty prototype" and then refine it into a "pre-1.0 version" and so on. Next thing we know, it's legacy code, three generations of maintenance programmers have poked at it, and the users still create data files by hand in Notepad.
If you realize you're hurting for lack of a tool, you've already wasted invaluable and irrecoverable time. It's too late; the demons are already using your bones as toothpicks. And, honestly, when can we not see the need for tools in advance? The alien demon invasion scenario is obvious enough, sure, but what about WidgetMeister 2.0? Is it possible that we might actually not be able to reliably predict what tools we'll need?
Well, you tell me. Personally, I can't think of a single case where the purpose of the end product is known, but we can't figure out what tools will be needed to get the job done. Any good gamer or military buff can tell you that, to repulse an alien demon invasion, you need some Big Fucking Guns. And any good programmer can tell you what tools you'll need, long in advance.
Here's a scenario: excited with the plans for New Project Foo, the team sits around one afternoon with coffee and donuts, brainstorming and talking. Someone mentions the Quux Data that will be so essential to Foo's operation. Developer One says something like, "Yeah! We can do Such and Such and The Other and it'll all be great! And if we use XML or Other Buzzword of Choice we can reap unfathomable benefits in terms of Obscure Business-speak Bullshit Phrase!" And in pops Developer Two with, "Yep... yep... we could even create a really cool GUI drag-and-drop editor that magically creates Quux files and pets kittens, all in an environmentally friendly way!"
And everyone agrees that the editor would be Really Awesome, and We Should Definitely Totally Do It, and such. Then the resident cynic (that's usually me) says something like, "Well, we have to get the data format nailed down first. We should probably do a prototype, too." Somewhere along the line (it may take a few months), everybody agrees that there's enough work to do, and the Quux Editor will get pushed back to Version 2.0. Hey, then we can sell it as a New Feature - value added to justify the exorbitant upgrade price. Perfect plan, right? Quux files can be edited easily in WhateverApp... it's a little finicky and not as user-friendly as it could be, but who cares?
Sound familiar? I've seen this one play out numerous times, and always with the same results: sometime down the line, long after it is too late, we all wake up and realize that some dark hellspawn is cleaning its teeth with our former shin bones. Oops.
So, if you're the kind of person who doesn't read between the lines very well, or has to have things spelled out in explicit sound bytes (or if you just skipped all my palaver to read the last paragraph and get the punch line), here's the point of my little musings:
Build your tools first. Don't let the Legions of Evil pick flesh out of their molars with the shreds of what used to be your leg.