The Stripy Strudel's Journal

IT Allegory

At my job I take part in development of certain kind of tools. I love my job, and most of all I like to invent new, universal tools solving whole new classes of problems.

Recently, my boss has assigned me the task to design a new screwdriver. The task didn't contain any clarifications as to what the screwdriver should be like, and, in fact, it couldn't contain any because, at that time, my boss didn't have any clearer vision of the problem than I had. So I decided to design a screwdriver that would be universal in its class of tools (that is, among handheld battery-operated tools — we wouldn't try to compete with specialized stationery machines).

I started by studying all kinds of screws, bolts, nuts, washers, studs, brads and split pins, learned about the specifics of their use. While studying everything relevant to threaded coupling, I figured out for myself something like a common denominator for all the tasks that my universal screwdriver might face: a screwdriver is used for coupling and decoupling of parts by setting one of them in rotary motion. To encompass the entire range of fixing parts, one or two exchangeable bits were obviously not enough. Instead of following the straightforward way of increasing the number of bits (you can't provide for every eventuality anyway), I designed one universal workhead. It could fit parts of different shapes and sizes: from sunken three-millimeter philips screwheads to five-centimeter square nuts. The electric drive allowed to adjust the speed and torque as well as to set the stopping condition (linear distance passed by the part, number of revolutions or strain to reach). It was also assumed that the user should be able to choose from presets for typical tasks instead of setting the parameters manually.

After I was done with the analysis, I started implementing the design. It's not really interesting to describe this because it basically went smoothly. Some features had to be left out until the next version, but it was easy to add them later without breaking anything. The most interesting is what happened a month later, in the final stages of the development. The first to have a suspicion was the UI designer whose task was to refine the look of the prototype. It seemed to him that the handle of the “screwdriver” had too many buttons. I explained to him why this buttons were necessary, and showed how to use the tool in different modes. Then he asked why didn't I just make a bunch of exchangeable bits like everyone does. I explained that a fixed set of bits would never match the abilities of the universal workhead, and, after a long debate, I've been understood, but after that I had to answer a similar set of questions to the head of technical documentation department, and then to a QA engineer. We had to gather a meeting with the manager, the head analyst of the project and other official persons.

In the meeting, another important “little” thing came to light. It turned out that the potential customer doesn't really need to work with the whole range of screwheads and nicks of the fixing parts. They need to screw and unscrew just two or three kinds of screws, but they also want to hammer in nails. With the same tool. To make things worse, the marketing research indicated that the average customer doesn't realize the difference between a screw and a nail, or gets it wrong. As to buttons on the handle, the specifics of the target group imply that there can't be more than two.

Then was the time when one would do a new round of analysis, find a new “common denominator” and design another prototype. But the problem was that there was basically no time left until the scheduled release date which has been already declared in the marketing campaign. There wasn't enough time for all of that, even if you stop eating, sleeping, and going to bathroom. The only possibility left was to adapt the existing prototype to the problem that has changed. This means extension in directions in which there was no extensibility. This means implementation of admittedly suboptimal and short-sighted solutions. This means ending up with something not extensible in any direction anymore, something hard to debug and support, and, of course, with no traces of the initial beauty of approach.

After considering this gloomy perspective, I gave a sigh and took the prototype along with all the blueprints far away. Instead of crippling the existing mega-screwdriver with an axe, I chose to make another one. Not universal at all. Completely inflexible. Able to drive the exactly three types of screws (listed in the new problem statement) in the traditional way — by means of exchangeable bits — and to hammer in nails. Because this new device was nothing but a cliché and didn't have a single non-trivial part, I did it in three days and three nights, or something like that. Only one non-critical part I was able to reuse from the original design: it was the accumulator which didn't need to change at all. The result was quite acceptable — until you want to expand the capabilities somehow.

Why did I choose this way? It's obvious that the simple tool I could make in three days doesn't have any flexibility, scalability or extensibility. True, but the old prototype adjusted to the new problem wouldn't have it either. It's flexible but not to those angles, it's scalable but not by those parameters, it's extensible but not in those directions. It's natural — because it's impossible to design an Ultimately Universal system. If you need something universal, you have to answer the question first: what do you have to encompass by this universality? An incorrect answer, or one that later turns out to be incorrect, leads to waste of time and effort. An attempt to apply a system which is universal in one area to encompass problems from another leads to loss of all advantages of the universality, but does increase the overall complexity of the solution. If you can't do it the right way, it's better to do it the wrong and simple way than the wrong and complex. What can be done in three days, can be even redone from scratch, if necessary.

The first prototype still rests in my desk drawer. Maybe I'll still have a chance to dust it off someday?

По-русски: IT-аллегория

Not Every Bug is BadIT Allegory: Afterword

How to use Quote function:

  1. Select some text
  2. Click on the Quote link

Write a comment

Comment
(BBcode and HTML is turned off for anonymous user comments.)

If you can't read the words, press the small reload icon.


Smilies