Machine Lawyers

I recently read a series of articles by Erik Dietrich critiquing the trend of describing software engineering as a trade, or craft. At risk of oversummarizing and misconstruing, the gist was that this trend misunderstands the nature of software work as “knowledge work,” as opposed to “skilled labor” like pipe-fitting, which can be accounted for and estimated at a greater degree of precision and accuracy.

While I don’t really agree with the argument, the conclusion is well taken.

My primary issue with the argument is that I believe the dichotomy between “knowledge work” and “skilled labor” to be a false one. The only thing that separates software work from pipe-fitting, plumbing, or being a diesel mechanic is the standardization of tools and designs. Software work is still in the phase of reinventing itself constantly in search of good models. If plumbers had to re-engineer pipe material, joining methods, pumps, and adhesives every time they did a job, it would probably look an awful lot like software work.

Nevertheless, I think the conclusion that software engineering should not be thought of as a craft is well taken. And my reasoning is simply because it’s not; not yet anyway.

If anything, software work, as it currently exists, is more akin to being a lawyer. The law is an organic structure built over many years and guided by precedent. Its goal is to implement logical structures that constrain human behavior. It’s not perfect, given the complexity of the world it attempts to control. Sometimes parts of it are found to be faulty, and must be rewritten to better address the cases that caused it to fail.

Sound familiar?

I think this metaphor is a good one for another reason. Anyone who has considered law as an occupation has probably noted the recent reality that law is no longer a guaranteed path to high earnings. In fact, attorney incomes now follow a bi-modal distribution; a small lump of people earn a lot, and a big lump of people earn much less, with very few in between.

This is partially due to the glut of law grads, but I suspect there is something else at play. As society has scaled, certain parts of the law have become extremely standardized through repetition. Think of title transfers, simple wills, leases. These are no longer written from scratch for every case, as the law has evolved to take care of the vast majority of cases in a straightforward and well understood manner. A layman can pull a template off a shelf, fill it in, and be of reasonable confidence that if he read the form correctly, then the document he has created will be found to be valid and functional.

This standardization means that good lawyers are only really needed in those cases where things have not reached standardization, and may never reach it due to complexity: mergers, divorce, criminal trials, etc.

You can apply the same logic to “general labor” such as plumbing and HVAC work. Residential plumbing jobs are, for the most part, thoroughly understood. When you pay for these jobs, you’re paying for workers that already know how to do the job. When you scale up to something like municipal wastewater projects, or even plumbing for skyscrapers, things become less well-understood, and you start paying for people who don’t know how to do the job when they start, but are confident that by the end, they’ll have figured out something that works.

I bring this up because this is the direction I believe software work will go. As certain tasks are repeated tens of thousands of times, standards will emerge. This has already happened, to an extent. RESTful API design is a good example. So is using git for version control.

Eventually, I think software work will approach this kind of bi-modal distribution as well. Some might argue it already has, and they may be right, though I haven’t seen data to support it in general (adjusting for cost of living, etc.) Well understood projects will take a team of a few people a few days to bang out. However, there will still be skyscrapers to build, and the people who can show up blind and design something from scratch will still be paid handsomely.