Written July 13, 2014

Craftsmanship and the Role of Mentoring

Dear Diary,

I had a really rough ride this morning. The climb was beautiful and I had some killer ideas as the pedals spun in time with the AD/DC thumping in my headphones. The descent was epic. The flow, balance and focus was unwavering. Unfortunately, on my way home things shifted and my mind began to clutter. I passed under the 241, caught a rut and went down like a sack of potatoes. As I lay there assessing myself for injuries … bleeding abrasion on the knee, cut on the arm, covered in dust, mangled handlebars and a bruised ego as the skater kids smoking pot under the bridge re-enacted my demise … I had an epiphany.


I will eagerly admit that software is thought work. We developers spend our days solving problems, pushing glyphs from our minds through our fingers and onto compilers. In some ways the work is decidedly different from our counterparts in the trades. But in other ways, are we really that far removed from the carpenter, or plumber, or welder, or mason?

For me, the strongest union between the classical trades and software development is the notion of craftsmanship. In all cases, there is a final work product that reflects design choices, and quality of execution. Earlier today I tweeted a vary common phrase that most all, in the trades, know dearly

Having been in both the trades and software, it seems to me that developers spend an awful lot of time griping about their tools, from text editors to IDEs to automation, etc. And to alleviate any further skepticism, I will fully admit to having blamed plenty of tools, even the ones I have built, for their poor quality. That said … I still whole heartily believe in the the phrase above.

Because this is the age of the internet, and on the internet you can always find someone who says you are wrong … I took to Google to find some dissenting opinions. Take this wonderful shot at inverting the colloquial phrase:

It’s (Not) a Poor Craftsman Who Blames His Tools

The article and quite a few comments, attempt to claim that an expensive table saw will produce better results than a cheap one; and to the apprentice or journeyman, that sentiment is absolutely true. The problem, is that the core assumption is false and it willingly neglects to consider all the pieces in motion.

Every project, from your kitchen cabinets to your bug tracking software, comes down to the interplay of finished quality, time and materials (inclusive of money). If the client is interested in a finer product, that will require either more time or better materials and possibly both. True craftsman have mastered the interplay of these elements within their given trade. Let’s look at an example …

I have been bugging my wife about getting a custom cabinet built for this nook under the stairs that we have. I really want a book shelf and sun bench with storage, for that area (dog toys, legos, books, etc.). Now bear in mind that both my wife and I are finish carpenters. We have spent extensive time making everything from crappy single sided theatrical cabinetry to finely crafted hand hewn furniture. We are both equally skilled in joinery; yet, we are looking to hire someone to do this work. Why?

Well for starters, we do not have the appropriate tooling … no Delta Cabinet saw, no stacked dado head cutting tools, no pneumatics. Hell, we don’t even have any glue. So, we are effectively missing all the tools of our trade to complete the job.

But is that really true?

I have some screws, and nails, and a Japanese pull saw. I could still buy the best wood and save the expense of proper tooling by crafting jigs and fences and a whole host of small devices that would enable me, as the master of my craft, to utilize the tools I currently have to complete the job to any level of satisfaction. The question is, am I willing to spend the time and money to build the devices that make the incorrect tools function properly within this context.

Well save the suspense, the answer is no. I would much rather hire someone that has purchased the proper tooling to do this job quickly. I get a high quality product, with choice materials, in less time. I have made the decision that my time is more expensive than the cost of materials and someone else’s time, for the level of quality I desire.

All this said, I am not the craftsman here … the cabinetmaker I hired is. I have brought them in to asses the project. I have given requirements such as materials, a delivery date and an anticipated budget. The cabinetmaker will then decide, given my requirements and their assessment of tooling, whether or not the work can be completed within my constraints.

One might clammer quickly to mention that the skills of the cabinetmaker are also at play here, and I would agree only to say that skill is a function of time. The cabinetmaker may recognize that my request for butterfly joints in the bench top is not a technique they have used before, nor are they properly tooled to craft such a fancy bit of joinery. That factor, time to learn how to do the joint and the tooling to cut it properly, may end up in the quote from the cabinetmaker … but it also might not.

The craftsman, will see my request for this new joint as an opportunity to learn a new skill, build the proper tooling such that they can offer this capability to other clients. They may also recognize that it is not necessarily my responsibility to pay them to learn how to craft this fancy bit of joinery.

If the craftsman would like to have me cover the cost of adding butterfly joint capacity to their shop by supporting training and in the construction of associated tooling, they should inform me of that; and I, as the client, have the option to accept the added cost or find another cabinetmaker.

Perhaps, I recognize that investing now in bolstering the craftsman’s tooling and skills could save me significant money later, when I have them build my kitchen table; but I won’t know that, if they don’t inform me of it.

So where is this cabinet making post going?

The situation presented here is not unlike the day to day interaction between a developer and a business. The developer is presented with requirements and it is their job to asses the situation and inform the business of the pieces in play. Experience and skill both play a factor in the quality of this assessment. Note that experience and skill are both a function of time.

A good craftsman, communicates effectively with the business to help them balance time, materials and quality. The craftsman will also recognize that the acquisition of new skills or tooling may or may not be the responsibility of the business, depending on who is getting the most value out of the training. If the acquisition of new skills or tooling is ultimately of greater benefit to the craftsman, then it is their responsibility to spend personal time and materials to acquire the skills. Let me repeat that ….

If the acquisition of new skills or tooling is ultimately of 
greater benefit to the craftsman, then it is their responsibility to spend 
personal time and materials to acquire the skills. 

This assertion comes down more on the side of experience than that of skill; but, in terms of business value, it is still a function of time. My assertion here is that the distinction between “poor” vs, let’s say, “good” craftsmanship is in the expenditure of time; let’s take a look at a specific example:

If you were alive in the 90’s, I would suspect that you remember The New Yankee Workshop with Norm Abram (we may have had different childhoods). If you don’t, or its been a while since you last saw it … I highly recommend at least checking out the following episode which is broken into two parts.

New Yankee Workshop - Building Jigs Part I New Yankee Workshop - Building Jigs Part II

In this episode, Norm spends an hour of broadcast time, several days of filming, building jigs for various projects. Construction of even the simplest of these can take over an hour to manufacture, and some of the more complex ones, perhaps even a full day. So why is Norm, unquestionably a master craftsman, spending all day to make a jig that he will use for a single 30 second cut? I posit that the poor craftsman blames the tool because they have failed to recognize the extent and importance of their personal role, i.e. their time, in tooling up properly for a job. That also implies that poor does not mean bad, but simply inexperienced.

Perhaps our affinity in software to blame our tools, is simply because we are missing something that the trades, and even medicine, have long known?

Question: What do physicians call their businesses?

Answer: A Practice.

Why?

Why would you call, what you do for a living … a “Practice”? Well, it’s because that is exactly what they are doing … practicing medicine. It’s an ownership of the novice state. An understanding that mastery has not yet, and may never, be completely achieved.

So let’s take a look at the carer path of a physician.

Know what physicians do right after receiving their graduate degrees? They intern. Why? Because they may have the knowledge, but not the skills to practice medicine.

Know what physicians do after they intern? A residency, where they spend several years beginning to practice medicine under the watchful eye of an even more skilled physician.

Know how long this process takes? Example: Neurological Surgery … 6 YEARS.

This tiered level of graduation in medicine was taken directly from the trades, where in a guild one apprentices, then achieves journeyman, and then is finally granted the title of master of craft.

In software, we happily support novice programmers who write code for critical infrastructure, payment systems, etc. without a second thought. As software eats the world … does this make you feel warm and fuzzy inside?

Our industry is new … carpenters and masons have been at this for thousands of years and we, as members of the software industry, need to learn from their experience. Hell, even modern medicine has done so, to quite significant success.

Software business need to understand that their developers may not be craftsman … i.e. have the skills or experience to inform management that they are actually ill equipped to perform their jobs. They may posses the knowledge to complete the task, but not the skills to properly build the software. While throwing the bird from the nest may be the only way they will learn to fly; surprise, writing software is not a natural human instinct.

Extreme Programming, with its concept of pair programming has been a small step in the right direction. Sit two, close but unequally matched developers down to complete a task together. The interaction benefits both parties as they learn and bolster their skill sets; the delivered product is typically much better off … this is a form of mentoring.

Mentoring does not need to be 100% of the time; I am pretty sure that Aristotle spent some time by himself thinking without the help of Plato.
Nonetheless, business that invest in the infrastructure to support pairing are, by de facto, building and supporting mentoring programs.

In this time of plenty, when developers can do what they want and for who they want, we need to focus on upping our game. We need to create the infrastructure that will make software a sustainable, diverse and supportive industry.

We need to introspect and asses our own level of skill … are we craftsman? If so, what role are we playing in building up and mentoring the junior developers.

Are our businesses invested in education, and tooling? If not, is it our responsibility as craftsman to seek out further education and build needed tooling on our own accord; taking that knowledge and those tools to the junior developers, so that all within the craft may benefit?

Can we endeavor to give the inexperienced developers in our industry, no reason to blame their tools?