This is a question that came up yesterday during our latest meetup with our local French Riviera Software Craftsmanship Community (note: a very nice round table session on the beach of Juan Les Pins ). This post is my answer to this question.
What Software Craftsmanship is not
It’s not an elitist club of people who think to hold the truth of how to write the perfect code. This is an important aspect because it is related to how much inclusive or exclusive a group of people is (and also to how much nice people are). I’ve been following the international Software Craftsmanship movement since some time now and I met some of them during SoCraTes UK and I learned how much important are things like kindness, mentorship and empathy for a Software Crafts(wo)man. Software development is not only techniques and programming: it’s also relationship and communication with your peers.
It’s not a certification of one’s capabilities to write good software (assuming it does exist really). A person yesterday was doubtful whether he could call himself a software craftsman or not because he is not working in TDD or applying all the time the SOLID principles. These are technicalities, very important ones, but they are just tools that a person who cares about what he does can use or not in his daily job. It’s not in conflict with the Agile movement. Software Craftsmanship is focused a lot more on technical practices and writing quality software, but the goal is always the same: deliver values for the customer. The only difference is that Software Craftsmanship is more focused on you as a person. For a Software Crafts(wo)man adding value for the customer passes through a constant personal improvement and a willing to help the team to improve as well. Agile and Craftsmanship share the same focus on the importance of communication, collaboration, relationship and empathy. They are two sides of the same coin (unfortunately they are still being perceived as mutually-exclusive, while they’re not. But it’s changing1).
What Software Craftsmanship is
It is a set of values that you embrace and you decide to follow for the rest of your life, not only your professional career. I remember when I first read the book The Software Craftsman, by Sandro Mancuso, and I saw one of his talks, and I said:
“Wow, that’s it! This is what I was looking for. This is the path I want to follow. ”
What are these values that make you a Software Crafts(wo)man? I will try to list what I think they are the most important for me.
It’s not because a Software Crafts(wo)man is a geek and so he/she has the need to try the latest technologies. It’s rather because he/she wants to pragmatically find new ways to add value to what he/she does every day. And the only way is to improve our skills by practicing, reading books, meeting people, going to conferences etc. Improving means also to learn and to be open to technologies and techniques in order to evaluate them with rationality, pragmatism and no prejudice.
I always make the link between continuous improvement and the second value of the Software Craftsmanship Manifesto:
Not only responding to change, but also steadily adding value
Maybe the best metaphor to describe continuous improvement is the journey towards mastery. A Software Crafts(wo)man is a journey man, he/she’s not the master who is arrived at destination (is there one, by the way?). The journey is something that everybody can take, regardless of how fast he/she can walk.
The idea of Professionalism
It was illuminating to me to start to think of my employer as my client. This can sound so trivial for self-employed people, but it’s not so for those who have been hired by a company. Professionalism means that you always strive to be better because you want to add value to what you do and to constantly deliver quality, pragmatically. This includes continuous improvement.
Mentorship: help others to improve
A Software Crafts(wo)man not only improves himself, but also he love to help others to improve their skills, both technical and soft ones.
Social aspects of Software Development
A Software Crafts(wo)man cares about the team and his/her peers. The social aspects of software development are being maybe the most important ones during SoCraTes UK. How to motivate people, how to be inclusive and not exclusive at a personal level and at team level, how to help a team or a colleague to unleash its potential .. these are things that a Software Crafts(wo)man cares about.
As you see I didn’t talk about technologies. I didn’t talk about Test-Driven Development neither Docker, nor the latest programming languages. Technologies and techniques are tools that a Software Crafts(wo)man needs to know and practice, but they are not the only things and it’s not important to be Bill Gates or Mark Zuckerberg to be a Software Crafts(wo)man. It’s not about how good you are, it’s all about values, willing to improve yourself and help others. It’s about taking your journey towards mastery and start to walk at your own speed. If you believe and if you want to embrace the values I mentioned in this post, or if you are already following them, you are already a Software Crafts(wo)man. Or whatever other definition you like to use.