Software Stewardship
Product Development as Drilling

I can’t seem to stop making up these analogies of what is product development. The last time it was a sandwich and now it’s drilling:

Drilling is a cutting process that uses a drill bit to cut or enlarge a hole of circular cross-section in solid materials. The drill bit is a rotary cutting tool, often multipoint. The bit is pressed against the workpiece and rotated at rates from hundreds to thousands of revolutions per minute. This forces the cutting edge against the workpiece, cutting off chips from what will become the hole being drilled.

Sounds about right.

I actually don’t know anything about drilling or not much more than what I saw in the movies. Where I find the analogy of drilling is actually one particular technique, something that Wikipedia calls center drilling:

The purpose of center drilling is to drill a hole that will act as a center of rotation for possible following operations.

I’m guiding the development of a new product and the development team was postponing giving me even a remotely functional version of it. They wanted to do different aspects of it and then integrate very late.

When developing a software we have to ask ourselves what is the actual product. There is a huge amount of stuff that has to be developed for the final, finished product but that are not the thing that we are actually trying to achieve with it. No one is interested in a login system on its own - it has to give or deny access to something useful, otherwise it’s just an empty shell.

My development philosophy if you will is to first achieve the vertical integration, to actually do and be able to show to the end user, in one way or another, the ultimately useful aspect of the product. When we were developing ApexSQL Comply the first thing we did was to actual capture auditing data and start storing it in the database. Then the software was expanded around this central feature to include GUI, reporting, tamper-evident database design, fault-tolerant data processing and so on. And all those aspects and technologies are the largest part of the value that the product delivers to its users. But they are not the essential function that the product is supposed to deliver: capturing audit data and storing it for later querying.

And thus center drilling - we “drill” the center hole, make complete vertical shaft by actually doing what we are supposed to essentially do, then we make it larger by horizontal expansion. It’s not all drilling - we do wireframes for GUI at the same time and I don’t spare effort to push for quality decisions and software on every turn, hopefully avoiding future rework. But if we don’t have that main spine (oh, another analogy!… damn it) then we don’t have a product - we just have a bunch of technologies that may or may not work together.

One final advantage to developing software like this is that you are able to start cutting features at any time. You can’t cut integration otherwise you don’t have a product but you can (and I have) cut good-but-not-essential features very late in the process. In many ways the art of deciding what is actually important and cutting the rest is leading software development. Now I just need to come up with a good analogy for it! Maybe making steak tartare of which I actually know much more than I do about drilling.

So which one is it: sandwich or drilling? Neither, obviously. But to me these seem like useful analogies when considering different aspects of product development and trying to convey that to others. I wonder which will be the next one.


Last modified on 2013-05-25