Blogpost

Software Craftsmanship

I’m into craftsmanship for a while now. But what is craftsmanship exactly? And more specifically: Software Craftsmanship? It is one of those things one can’t gather in one definition. Go on Google and give it a try: you will find tons of opinions.

medieval craft I myself mainly agree with the model that existed in medieval Europe, just before the start of the industrial revolution (around 1750). In those days of crafts, there was a strict hierarchy that was controlled by the various guilds. The guilds checked the masters. These masters had absolute authority within their profession (their craft). Just below the masters were the journeymen. These were craftsmen who had not just been able to demonstrate that they are worthy the title of master. Journeyman usually traveled from city to city. They were the only way to spread new techniques and they also supervised the “newbies” or the apprentices. Apprentices usually worked for one master for several years until they reached the level of journeymen.

It all sounds nice, but of course it’s not that simple. In today’s society, such a system is practically not feasible and easy to misuse. People expect rules. But I am convinced that people in this model should mainly know and follow the “values” on which the system is built. If this is the case, they are perfectly capable of determining rules themselves and making adjustments when necessary. Agile, you know?

I can come up with a long list of values, a Software Crafter should have. Such as

  • Having a growth mindset
  • Be capable to change based on feedback
  • Be pragmatic, not dogmatic
  • Share your knowledge
  • Try new things and be proven wrong
  • (Internal) Locus of control
  • Be a team of individuals with each his strengths and weaknesses
  • Commitment of inclusiveness (absorb the best ideas of all worlds)
  • Be Skill-centric not process centric
  • Situated learning (expert in earshot)

… and there are certainly more.

I suggest to bring these values back to four anchor points:

  • Be a professional
  • Be committed
  • Be proud of your work
  • Build a team

Be a professional

Being a professional sounds obvious, but often people (also me) are not aware off our own unprofessional behaviour. Professionalism shows itself in the quality of our work, the way we handle things, the way we interact with others, the way we dress… almost everything we do or say, defines if we are a professional or not.
The hardness of professionalism is that it can be gone in a second.

It takes a only one tree to make a thousand matches. But it only takes one match to burn a thousand trees… (Stereophonics)

“It’s NOT the job you DO, It’s HOW you DO the job.”

Be committed

Probably this is one of the hardest values for most of us. First things first: commitment does not mean that you always have to work 25% above average, that it is not allowed to go on holiday and that you have to be available 24/7 for your projects. If that was the definition of commitment, it would be easy.
In my opinion, commitment means that you have to take responsability to get your work done. Maybe you have to do some overtime from time to time. And you should. But if overtime is happening frequently, commitment shows itself in solving the causes why overtime. happens so often.

I remember myself working in a (really) awesome team of java developers somewhere in 2003 or 2004. We were working on one of the largest Java projects of that time in a car manufacturing plant in the Netherlands. Java was pretty new those days and setting up the first WebSphere clustered environment was, let’s say, challenging… I remember us discovering a bug in the late afternoon that would cause the factory going down in the upcoming hours or days. There was no discussion that we worked on a fix until early in the morning so the factory could start up at 5:30am for the morning shift. We went home for a shower when the factory workers arrived. A few hours later we were back at our desk to create a final solution so it could not happen again. Maybe some of you consider working all night as commitment. It is. But being there the day after to solve the root cause, that is real commitment.

Be proud of your work

Being proud of your work is not just about “being happy about what you have accomplished’. There is much more to it. Being proud of your job means that you are very good in what you do. Way better than anyone else doing the same thing. You are proud because you did everything to accomplish your goal: you had a growth mindset and learned new skills to support yourself during your journey. You also tried things and failed. You learned from those failures and did way better next time. All things you did to accomplish your goal, the goal of the Team and the goal of the client, gives you a deep feeling of fullfilment.

In medieval Europe, a craftsman was proud of his work as a carpenter or a Blacksmith or any other craft he was an expert in. In most cases, the people around him had deep respect for the things that were created by his hands. Why should that be different in case of software development? All software crafters should raise the bar for software development, so they can be proud of their work and the clients will respect them. A real software craftsman is able to change the misconception about software being full of bugs and bad user experience.

All Software crafters should raise the bar for software development.

 Remember my previous example about the project in the car manufactoring plant: When we we were leaving the plant at 5:30am probably the predominant feeling was tiredness. But we also felt a certain pride when we saw the factory workers entering the building. Although they did not have a clue that we worked all night long to make sure they could start their workday.

Build a team

You can be as good as the best, but you are always better as a team! But only if you can work with people that are equally or better skilled as yourself. As a software crafter you have to build a team around you with people that challenge you. These people will make sure that you will always go for the next level.
You can’t be good in every aspect of Software development. If you really think you are, you are probably not a craftsman. Be a team of individuals with each his strengths and weaknesses. Learn from each other, share you knowledge and lift each other up to the next level.

“No one can whistle a symphony. It takes a whole orchestra to play it.”

What’s your opinion on software Craftsmanship? Let me know!

Bart Waterlot

Bart Waterlot

Chief Craftsman