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.