I have, for some time now, considered myself to be a “craftsman” of code. In my Twitter bio, I’ve even been calling myself “A craftsman of fine digital goods”. By using that term, I intend to convey that I take a good measure of pride in the fact that on whatever project I’m currently working, I do my best to build interfaces that are a pleasure to use. That is, interfaces that help a user get their job done, and don’t get in the way by being showy or gimmicky. It also means that the code which I author to realize those interfaces is meticulous and rigorously written. Logically structured? Check. Namespaced to avoid scope collisions? Check. Thoroughly commented? Linted? Minimized for production? Check, check and check.
The use of the term “craft”—as well as its variants “hand crafted” and “craftsman”— arose in the collective consciousness of the web developer community perhaps 5 years ago as a synonym for “high quality”. Of course, I strive to produce the highest quality work I can in both my personal and my client’s projects, so I started to apply the word “craft” and its variants to my own work. I must admit that I hadn’t considered all the implications of what the word actually means.
I recently came across some posts1 which take critical views on the term and this particular application of it. They are The problems with ‘crafting’ code by Harry Roberts and I’m not a Craftsman by Mark Boulton. Together, they’ve made me consider more deeply the term which I’ve chosen as a convenient handle to represent the level of work I do and the pride with which I do it. Am I really accurately representing myself by calling myself a “craftsman”?
Among web development folks, in addition to denoting “quality”, I think the word “craft” and its variants also connote some gauzy, romanic notions of spending hours in a cozy workshop, whittling away at code to produce this perfect little, artisanal, one-of-a-kind handcrafted thing. Now that I consider the word in this light, it strikes me as sounding self-congratulatory, twee, and not really appropriate for the realities of the work we developers produce.
Most of my work day is spent doing contract development for clients. My clients expect that I deliver code that is efficient, fast, solid, robust, and scalable. They expect that I can turn their requirements into a functional product that adheres to those standards and do it reasonably quickly. While I’m fortunate to typically have a lot of latitude in my projects in which I can inject my own approaches methods and tastes, my clients couldn’t give a toss whether or not I “craft” my code. They only care that my code is clear, maintainable, and bulletproof.
While I’m not yet sure what the appropriate alternative to “craftsman” should be to describe development work of a certain quality, I do like the terminology used by Thomas Moser to describe himself and the people who work for his company.
…designers and builders of fine, solid wood furniture…
It’s earnest, unfussy and thoroughly appropriate for what they do. By using the adjectives fine and solid, it also connotes an easy, mature confidence in the idea that when you buy a piece of Thos. Moser furniture, you’ll enjoy using it, you’ll enjoy looking at it, and it will last you a lifetime.
So what is the most appropriate analogue to connote those ideas as they apply to development work? Am I a “designer and builder of fine, solid user interfaces”? Using the same adjectives is too facile and rings with a bit too much pretense to my ear. How about a “designer and builder of robust user interfaces”? Perhaps, but perhaps I should simply call myself a “designer and builder”, code the highest quality work that I can muster, and let the quality speak for itself.