Earlier this week, I had a fun discussion with Dave Donaldson of Max Foundry about software craftsmanship.

I think it’s worth reading the quick Twitter discussion, but I want to be clear that I mention Dave because the respect him as a developer, and he was being a bit facetious in his comments.

Bottom line, Twitter’s not the point of this post – it’s simply setting the stage.

I’ve written before about WordPress Craftsmanship which generally covers my thoughts on the entire process, but I don’t think I’ve ever mentioned my thoughts on software craftsmanship as a whole and why I think it matters in WordPress.

As such, I thought this may be a good opportunity to do so.

On Software Craftsmanship

Though I covered a bit of this in my WordPress Craftsmanship post, it’s worth re-iterating that a craftsman is defined as:

A person who is skilled in a particular craft or art.

And that I personally believe that all softwares craftsmen are developers, but not all developers are craftsmen.

Software Craftsman

A traditional stand-up meeting by classical software developers.

Historically, the order of rank that people followed were as follows:

  • Apprentice
  • Journeyman
  • Craftsman

Now, Bob Martin has been one person who has been championing this in the software development industry for sometime, and seeing as how writing code for WordPress is a subset of that particular industry, I don’t know see why the labels can’t be adopted.

Don’t read me wrong: I don’t see us setting up guilds or anything to do this, but I do think that we could do a bit better than using a combination of copying and pasting code from a Google or Codex search to introduce developers into WordPress programming.

I think that this would go a long way into solving many of the problems that we have with theme and plugins conflict, but I digress on this point. For now.

Why Does This Matter?

The reason that I’m particularly interested in software craftsmanship is because I believe that building software should be treated as building anything else tangible in the real world.

After all, we’re working with a set of interconnected, moving parts all of which have to be able to communicate with one another, but also work in tandem and/or in sync with one another in order to ensure that the program works as expected despite a variety of external conditions.

The problem is that we’ve gotten lazy.

Lazy Programmer

Lazy programmer de-queuing jQuery for his own favorite version.

Because software can afford the luxury of generating bug reports, and get away with “just working” regardless of how poorly constructed the code is, many developers take the path of least resistance in order to ship something.

When we do that, we end up sending ourselves not only to maintenance hell, but we make it difficult for the code to operate within the greater context of the WordPress application (let alone the WordPress economy), and we throw any type of engineer principles that have been developed for the past decades to the wind.

And for what? To ship something quickly.

But the way I see it, companies that ship well-respected hardware and or software take their time to fine tune their product that maintain for more complex issues than many of us ever face.

Yet, we consider it good enough to ship themes that don’t work in a number of browsers or that break compatibility with WordPress, or ship plugins that might work for some but break others (or break other plugins).

We can do better than this. And this is where craftsmanship comes in.

But How?

In terms of a practical application, I’m don’t have a particular approach but I know that we’re beginning to experiment with this a little bit at 8BIT with our newest intern.

Specifically, we’re going to be having him work on some development and we’re going to aim to treat this is as a true software apprentice process.

Bad Cratsmanship

Well-crafted WordPress software should not equate to this.

Sure, apprenticeships could be equated with internships, but there’s a problem with doing that: Our culture looks at interns as paper pushers, and I’d rather treat the people that I’m working with who genuinely want to level-up their development skills with a title that’s more descriptive of their role.

At any rate, I don’t think software craftsmanship can be completely disregarded. Sure, it’s easier to talk about, but it’s a challenge to follow through on, but that’s what I want to do.

So in the next few months, we’ll see how this goes.


Join the conversation! 13 Comments

  1. I think this is only starting to become a serious discussion in WordPress as it gets used more like an application framework. I have a background in frontend Rails work (from a few years back now) and I remember moving development communities and getting ‘blasted’ by current community leaders for brining up useless topics. Topics where I was trying to strive to bring some more craftsmanship to my code, and see what others in the WordPress community were doing.

    Since I’ve just kept my head down. So I’m loving that we have others talking about this.

    I think the closest thing we have, right now, to really showing your level of coding skill is being a VIP approved developer. I’d love to see some more training out there (and I may just be working on a book series and training) that went through the 3 levels of building.

    Of course with any training, what you get out of it, and what you produce after is something that is on the individual.

    • I’ve followed somewhat of a similar process as you in that I went from .NET and Rails to Rails and WordPress and now exclusively WordPress, though I am surprised that you ended up getting ‘basted’ by community leaders for trying to improve coding.

      That sucks.

      The Craftsmanship movement that I most closely identify with – that is, if there are more than one – is lead by Bob Martin.

      He’s all about the stuff, is language agnostic about it, and tries to work many of the principles into his books. In fact, I dig his books so much that I’ve actually read some that use different languages and often focus on more enterprise-y topics, but the principle he shares are that good.

      • Meh, others in the WordPress community found me shortly after and I realized that there are a few people to just ignore most of the time. So that’s what I do now. And it was years ago now, I don’t worry about it anymore.

        Uncle Bob is awesome for sure.

        I still find that there is much deeper talk in the Rails community than we have in WordPress. One of my favourite podcasts on software is Ruby Rogues, simply because it entirely relevant to building software of any fashion. One of my favourite episodes is with Dan Kubb where he talks in depth about testing and all of his coding practices. I’ve gone back to listen a few times since I can use more of what he says every time.

  2. Good post Tom. Just to be clear, my issue with the term “software craftsman” is that it’s taken on an elitist connotation by many people, and that bothers me. It also bothers me that there is some correlation between people who spout “software craftsmanship” but don’t actually ship anything. I have no patience for people who only talk about writing code instead of actually putting code into customers hands.

    Make no mistake, I’m not at all suggesting you just sling a bunch of barely working code together and release it. A developer should still take great care and and pride in their code to make it clean and maintainable.

    But the label of being a “software craftsman” should stop. Stop putting it on resumes and stop putting it in your Twitter bio. Every time I see that it’s an automatic eye roll.

    • I could get behind that, kind of like being a Rockstar or Ninja. I think that as a community we need to work towards writing better code and talking about how to write better code all the time.

      We just need to make sure we keep our heads out of….

    • I know you and I had a bit of back and forth on Twitter (it was all banter, as far as I’m concerned ;), but I definitely get where you’re coming from.

      Years ago, the same thing was happening with Software Architects. So much so that Joel Spolsky wrote an entire article about Architecture Astronauts. That is, people just do a lot more talking and a lot less shipping.

      Hopefully, there’s a core group of us that are striking that balance. Case in point: I talk a lot about things on how I’d love my code to be, but if you peek inside my plugins or themes, you’ll see areas where I’ve done some nice refactoring, and some that need it.

      Everything is iterative – I try to practice what I preach :).

  3. I have been looking into an Apprentice.

    Love the idea. To take someone in and say
    “With in 2 years you are going to have the skills to make 60k+ a year,
    Your going to work hard and learn a lot.”

    I also think it should be free work for the first 6 months,
    Then move to minim wage, tell their work starts to turn a profit.

    Back in the old days the apprentice family would pay the craftsman
    for skills they would teach there son or daughter.

    Love the Idea.

    • You definitely bring up some interesting points.

      Back in the day, so to speak, you’d get room and board while you work. Nowadays, the closest thing I think we have is when universities offer a stipend to students.

      As far as work is concerned, I think it’s difficult to say exactly what may work. For example, right now – at least where I live – I’m not sure a person could literally survive on minimum wage (of course, I’m not trying to start a political discussion!).

      Secondly, I think that you’d have to differentiate between turning a product. Some companies are agencies who are more service based, whereas other companies are product based, so the idea of turning a profit for each company is a bit different.

      Regardless, I think you’ve got a neat idea. Would be cool to see it implemented in some way.

    • I’ve been toying with the idea of mentoring a beginner. My big issue is that I live at least an hour from Vancouver BC (with no traffic) and there are few coders out here. Getting face time with someone would be hard and I think that it would be a good thing for someone starting out.

      Maybe coworking once a week would be good?

  4. Love the article Tom. Really like the idea of putting more pride and craftsmanship into our work.

    Love the idea of an apprenticeship as well – like you said current interns are typically a joke of a job without any real formal training or ability to have a mentor to help you learn the ropes.

  5. I have been looking for a term to identify with and I really like the structure of: apprentice, journeyman, and craftsman. These designations seem very fitting given, for the most part, we as developers / designers are making things with our own hands.

    The only caveat I would suggest to using these terms is that we do not convey them on ourselves. As I see it, a craftsman or craftswoman is one who consistently produces quality meeting a certain high level of expectation in their chosen trade; and, as such, the trades persons or some other recognized body should be the one conveying the title on the individual.

    Rock Star, Ninja, Architect, etc. have always seemed to be self-appointed titles and with that impression I have never really thought too much about them having any connotative or qualitative value.

Leave a Reply