Coding and Wood Working

A little comparison between writing code and making furniture

Some people say coding is a craft, others say is a trade.
These are some wise words from someone respected by both sides.


I like working with wood. I did a course some years ago and I really enjoyed the feeling of touching and following the grains in the wood. Especially working with manual tools like chisels, planes and saw gives me really pleasure.

After a recent discussion about programming and craftsmanship, it came to me that we can draw four levels of furniture making:

DIY: Flat-pack mounting
Trade: Softwood shelves
Craft: Hardwood joinery
Art: Thomas Chippendale

Note that the distinction is blurry and somehow arbitrary, but these are different people using different tools: for example one of the traders main tool is the circular saw, but you don’t need one for DIY work and for joinery you need a more precise table saw.

Traders rarely speak of their job as a vocation or need to spend time practising to improve their skills, while it’s quite common for craftsmen repeat a dovetail joint over and over again until it’s perfect.

Please note that there is no judgemental here. At each level there is commitment and effort.

I still remember all the pain it took me to mount all Ikea stuff in my house. Traders also have to work with great cure to fit cabinets and make sure doors open and stay nice. I don’t think I need to elaborate on care needed for the last two levels.

There is also a need for jobs of all levels according to everybody budget and purposes. It all depends on the quality you need and how much the work is worth for you.

Still even if effort is the same, there is clearly a difference in skill sets and learning curve. The whole point of DIY is that it’s something you can learn yourself very quickly, a trade requires a period of apprenticeships while joinery is something that takes a life to master.

This metaphor falls short when we consider that nice furniture has (almost) only an aesthetic value: Ikea chairs can be more practical than Chippendale ones. Instead in the software world is critical how well it works and how easily we can change it.

Still I hope you can bear with me that the process of design/building programs is somehow similar to design/building furniture.

Said that, we can start our little comparison.

For sure there is a lot of code around in the DIY category. Which is not a bad thing per se but it can be a problem if we need it to be reliable and easy to change. On the other side, if we are validating ideas and exploring new markets, using ready-to-assemble pieces of code could be the only solution fast enough available to us.

Most of the “professionally written” code around is probably in the Trade category, with some notable exceptions which are more similar to Craft.

I don’t think I ever seen code so beautiful to be called “art”.

Now the astute reader can now see where I am aiming to. We need all three types of programmers.

It is laudable for programmer to learn how to craft beautiful code, but we definitely also need faster flat-pack assemblers and hard working traders to build all the kind of interesting projects out there.

Sneering at the other categories (both ways) or pretending they are not “real programmers” is missing completely this point.

Spending time to honing our coding skills alone or with a community is definitely a great thing, but let’s accept that is not for everybody and it is not necessary for every programmer.

Final note for recruiters and hiring managers: you cannot look for craftsmen and then ask them to mount shelves on the wall.

Similarly you cannot group a bunch of weekend DIYs and ask them to produce Chippendale chairs…