On Software Craftsmanship: The Apprentice and the Journeyman

David Rupp
3 min readApr 9, 2015

--

Our story begins with a tweet.

My initial reply:

This, while pithy and tweetable, is not remotely sufficient. Learn what? Teach how? Specifics will vary across business domains and tech stacks, but there should be some common threads that we can recognize across our industry.

I promised Ted I would think some more on it and post a long-form answer somewhere. Here, distilled from my years of experience as a software developer, even more years reading medieval fantasy books, and a few shots of Bärenjäger, is that answer.

Craftsmanship in the Modern Era

Some modern-day equivalents

The Apprentice

  • Has narrow breadth and shallow depth of scope. These days, one of the ways we distinguish between developers is by where they work in the stack: “front-end”, “back-end”, et cetera. The Apprentice tends not to be “full-stack”. Languages, paradigms, techniques — she has access to at most a couple of any of these.
  • Exhibits casual familiarity with basic tools.
  • Experiments with intent to learn; discards results.
  • Learns within a narrow domain.
  • Follows instructions and common patterns.

The Journeyman

  • Has wider breadth and depth of scope.
  • Is familiar with meta-categories of tools, chooses effectively between them.
  • Exhibits deep expertise with favored tools, techniques.
  • Explores and identifies new candidate tools, techniques. The Journeyman is not always satisfied with the status quo. She knows better than to make a change for change’s sake, or just to pursue the new hotness. But she also wants to make sure she’s using the best tool for the job, which sometimes actually means “a newer tool”.
  • Experiments with intent to adopt; incorporates results.
  • Learns both within and around her specific domain.
  • Leads by example.
Some more modern-day equivalents

Cognitive Budget

This is your brain on graph paper.

I like to think of us developers as having individual capacity for keeping track of all the stuff we deal with; a “cognitive budget”. We can choose to expend that capacity on breadth, at the expense of depth, or vice versa. Most likely we have some combination of the two for any given set of concepts; but the total surface area we can cover is capped by our overall cognitive budget.

Caveat Lector

  • On Metaphor. The example of the guild provides a ready-made framework for distinguishing between levels of accomplishment. But guilds were established in a much different time, and not all of their effects were benign. For example, the language of level gradations (“journeyman”) is inextricably rooted in a time when women were at best second-class citizens. In the Age of the Brogrammer, we can do better than to perpetuate exclusive language.
  • One Size Does Not Fit All. The guild system is not a good fit for prodigies. I’ve worked with several very young, very talented developers in my career; if they had been required to adhere to some rigid, formulaic notion of time-in-grade apprenticeship, they probably would have burnt out, to our detriment.
  • Patterns Are Not Recipes. This article is intended as a thought exercise; it’s an attempt to recognize and describe some abstract commonality, expressed in a specific framework. It is not a manifesto. Please do not codify, certify, license, or otherwise regulate developer behavior using the thoughts herein.
  • Unless I Get A Cut. Then I’m in.

--

--

David Rupp

IMDb Ad Tech by day. Polyglot by night. Ex-ThoughtWorks, Ex-AWS.