A Few Thoughts on WordPress Craftsmanship

One of the words that has begun to surface in the software development community in the last few years is craftsman. I attribute this to Uncle Bob Martin, his Clean Code book, and his whole Clean Coder movement (for lack of a better term).

I want to be clear: I love this idea. I’m a fan of Bob Martin and attribute much of the way that I approach software development to him (among a few others).

But a lot of his work is done in the context of the enterprise. That is, he speaks largely to people who are working on large-scale systems for large companies.

Good coding principles transcend their environment though, right?

On top of that, WordPress in an of itself could be considered an enterprise-level application not only considering how widely used it is, but how many large sites it actually powers.

With all of that said, I’ve been thinking a lot about WordPress craftsmanship as it relates to themes, plugins, and applications, and thought I’d share some of them here.

WordPress Craftsmanship

The amount of skill and attention to detail to do something by hand.

First and foremost, I want to be clear that I’m not necessarily trying to argue a point or that this particular post even has a bottom line. Instead, it’s a collection of thoughts that I’ve had on the topic.

Defining Craftsman

The definition of a craftsman is simple:

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

The thing is, our community seems to hold craftsmanship and developer in two different areas. It’s the rectangle / square relationship:

All craftsman are developers but not all developers are craftsman.

But what does it actually mean to be a craftsman? Before asking that, I think it’s import to actually define what a developer actually is.

What is a developer?

Boris Grishenko From Goldeneye. He’s a programmer and he is invincible.

In this day and age, I struggle with how often we through this word around. Anyone that has put together a couple of pages with markup and CSS then published it to the web can be considered a web developer.

After all, they’ve creating something using web-based technologies and then published it on the Internet. Therefore, they are a web developer, right?

Honestly, I’m not sure. I mean, we can pose the same question in other areas:

  • If a person writes a blog post, or even writes a few times a year, is he a blogger?
  • If a person goes for a jog once a month, is he a runner?
  • If a person cooks a few meals a couple of times a week, is he a chef?
  • When a person learns a few chords on the guitar, are they a guitarist?

I’ve had conversations about this with others and some say yes, some say no.

For whatever it’s worth, I think that being a developer entails two things:

  • A deep understanding of the technologies that were used to build whatever was released
  • The passion, drive, and ability to continue building new things or improving existing things with the understanding of said technology

Unfortunately, the web is a double-edged sword when it comes to stuff like this. Yes, we have an immense amount of information and knowledge available. It’s crazy how easy it is to pull up a page and begin working through a few tutorials on learning a new programming language.

I mean, I’ve done it for several frameworks.

But the very same thing that empowers us to begin learning new languages and technologies also empowers others to copy and paste their way into releasing something that lacks a deeper level of understanding.

As such, I think that it’s more about how you built and released something rather than that you released something.

Developers should have a deep understanding of what they are using to create and release their work. There’s an underlying level of problem-solving that must exist in order to truly develop something.

That is, I think that a person needs to be able to think abstractly about a problem and then formulate a concrete solution.

So what is a craftsman?

Bob Vila is the original craftsman.

The TL;DR version of my opinion on this is that a craftsman cares more about how he solves a problem in addition to simply solving the problem.

To go more in depth, I’d draw this distinction using the definition from above:

If a developer is someone who can think abstractly about a problem and formulate a concrete solution, a craftsman is someone who takes it one step further and constructs the solution in the most elegant, organized, and maintainable way possible.

Martin Fowler once said:

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

And I think that’s but one way to distinguish developers from craftsman. The latter aim for clear, easy-to-understand architectures and code rather than clever, obfuscated systems.

Furthermore, I think that developers – although they are providing a solution to a problem – may not be doing so in a way that goes further than the next release.

  • Perhaps the code doesn’t scale and has to be rewritten
  • Maybe there’s no logical coherence in how the code is organized
  • The degree of coupling could be too high, and the degree of cohesion could be too low
  • …and so on

Regardless of what the problem actually is, I’d argue that a craftsman provides a significantly more elegant solution to a problem.

This could consist of any or all of the following:

  • Well-documented code
  • A clear organizational strategy behind the project and its dependencies
  • The ability to provide automated testing around the project
  • Low coupling, high cohesion
  • …and so on

An Analogy

Then and Now

Decades ago (and still true today, though in fewer numbers, I think), craftsmen were known for their ability to work with their hands.

Yes, it took longer for them to make a product, but the quality of the materials, attention to detail, and the general personality and passion that went into building something was evident.

Now, we use quick-turnaround, mass distribution, and cheaper parts to produce the equivalent products as what craftsmen also build.

There’s an obvious difference in how something is built. And that’s where I think lies the difference in developing software and crafting software.

Bringing It Back To WordPress

So where or how does this relate to WordPress? Honestly, I don’t have a straight answer for that because we’re all doing something different with WordPress.

  • Some people are contributing to the core application
  • Others are building themes on top of WordPress
  • Some opt to build plugins to extend the functionality of WordPress
  • Others are looking to build applications on top of WordPress
  • …and on and on it goes.

Regardless, I think we – even if you aren’t a programmer – have experienced the problems with poorly written code: it usually negatively impacts the performance of your site in someway, interferes with others themes or plugins, or has a drastic affect on your experience with WordPress.

So what does it look like to be a WordPress craftsman? I don’t have a concrete answer and I’m afraid that anything I provide will be nothing more than what’s considered to be expected of all WordPress developers (which isn’t a bad thing!), but I wouldn’t expect anything groundbreaking.

With that said, I believe that WordPress craftsmanship includes (but is not limited to) the following:

  • Going above and beyond the WordPress coding standards
  • Keeping a logical, organized, consistent structure around your entire project, its dependencies, and its assets
  • Spending more time working to build quality into a single product rather than spending time shipping more of a product
  • Honoring and respecting the suggestions, rules, and conventions set forth by more experienced WordPress developers
  • Giving back to the community in someway through improving the core code, documentation, or other area of WordPress

Like I said at the beginning, there’s not really any bottom line or point to this – just a few thoughts on what I’ve been thinking about when it comes to software craftsmanship as it relates to WordPress.

But I know I’m not the only who’s given this some thought nor who has an opinion on this, so if you’ve something to offer and/or to include (even if it’s in opposition!) please do so in the comments.

14 Replies to “A Few Thoughts on WordPress Craftsmanship”

  1. Thanks for clarifying again why I’m NOT a developer. I like the idea of applying this thought to SEO craftsmanship as well. It helps to make a distinction between those who can manipulate things an those who are a driving force behind the industry.

    I think the last part of what you describe as a WordPress Craftsman – “Giving back to the community” – is what makes the distinction between someone who is a craftsman of their industry and someone who hacks at it.

    So here is my issue when talking with clients. What do you call yourself if you work with WordPress to develop website solutions for them but don’t consider yourself a craftsman or a true WP Developer? I find I alienate myself from my potential clients by trying to make that distinction.

    1. Craftsmanship definitely transcends industries; otherwise, we wouldn’t have them in woodworking, automotive, construction, etc.

      I’d argue a little bit that giving back to the community is not the only thing that makes someone a craftsman – it’s more of in how they do what they are doing along with the understanding that goes along with it.

      Giving back is definitely a by-product, though. That’s where apprentices come in :).

  2. Great article. Got me thinking a lot and motivates me to be better in what i do :)
    I do think that sometimes its hard for a common person to qualify whether one is a true craftsman because it takes certain knowledge to appreciate/recognize the work of a craftsman.

    1. Thanks – love trying to help motivate others (as others motive me, as well :)).

      I agree with you, too: It may be difficult to qualify oneself as a craftsman, but I think the knowledge and understanding that comes with how you approach solving the given problem is key in determining whether or not you truly or, or if you’re more of an implementor (not that there’s anything wrong with the latter!).

  3. Nice article and a lot of truth in it.

    I think the real difference between “people who get it” and “people who just do it” is that there’re those who understand what happens if they do it and those who just see the result and ignore the fact that it’s already rotten from inside at the very first day.

    1. Yes – I agree with you.

      For a certain type of developer, simply “just getting it working” is enough, but those who have the curiosity, passion, and drive that motivates them to take the extra step of building something with care all the while understanding what’s happening behind the scenes.

    1. Yeah, this is another one of those terms that’s abused.

      When it comes to engineering, I lean in the direction of believing that all engineers are developers, but not all developers are engineers.

      Engineers have an understanding of systems, are able to conceptualize the parts that make up the system, and even the design the system. They’ve got a solid grasp on architecture, design patterns, and all of the more software design lingo.

      I’d also expect a level of understanding of how they’re programming language works. For example, when you declare a new variable, what’s happening in terms of memory? What about garbage collection? All that jazz.

      I think that in order to be a craftsman, you must be an engineer, too; however, I’m not sure that all engineers are craftsmen.

      Good food for thought.

  4. I think that being a craftsman is a mentality of always striving for the next step towards perfection. Anyone I know that could be called a craftsman will tell you the 5 things that are wrong with whatever object you are looking at. They feel like there is another step towards perfection that they need to take.

    1. Yeah – that’s funny especially considering it’s an unattainable goal.

      The thing about building software is that there isn’t necessarily a single right solution for how to do something. There’s a plethora of options each of which has its own advantages and disadvantages.

      Whatever route taken, I think craftsmen approach their solution with serious understanding and care when implementing whatever solution they’ve opted to go for.

      …and then they try to make it perfect ;).

    1. Assuming that you’re asking for examples sites, off the top of my head there are:

      There should probably be a point of clarification and that is that a high volume of traffic doesn’t equate to an enterprise site (at least, not to me). Instead, an enterprise-grade site consists of:

      • A high level of traffic
      • A significant number of users inputting data into the system (whether or not they are distributed doesn’t matter)
      • The ability to scale not only in terms of traffic volume but work across a distributed system with tiers, load balancers, etc.

Leave a Reply