Do you know about the “Do It Yourself” method? It refers to the craftsmanship of building, modifying or repairing things by yourself, helped only by your bare hands and motivation.
I enjoy this practice as often as I can. I like origami, dress making, painting, working with hama beads… the truth is that turning an idea into a tangible product is very satisfying. However crafting can also help us learn new abilities, meet people that share the same enthusiasm, or even create something useful that make our life easier, while having fun.
Craftsmanship can become a hobby, or even a way to make a living. And I’m stating this from my own experience. That’s right! I’m a professional crafter. A professional software crafter!
Considering software as a craft is an idea that has been growing since 1999, when “The Pragmatic Programmer” was published. This book reflects on the definition of professionalism: What means to be a “professional”? What is our responsibility over the product we deliver? How do we communicate? Should we be multidisciplinary? Do we use our critical thinking properly?
Software is not an artifact that comes in pieces and is assembled. Coding is, overall, a creative and empathic process.
Think about it: How does the software development cycle start? It all starts with a blank canvas, and a need. The client presents an abstract situation, and we have to extract a concrete need from that abstraction.
Imagine our client explains that she wants a painting. This description is not very specific though. If we were to act like robots, we’d probably paint some random stuff on a canvas and delivered it. But we are not robots, we are crafters.
We want to create useful solutions, that fulfill a real need. Therefore, we have to use emotional intelligence to empathize with the client and understand what she really needs. After a lot of conversations, hangouts, emails… we can discover that she wants a painting related to acting and women, and so understand that what she really needs is the portrait of an actress for her exhibition about cinema.
This is the key of software development: Understand a requirement and design a solution for it. The job is not about typing, but about thinking.
Everyday, from dawn to sunset, we’re surrounded by problems we don’t have to face, because someone has already worried about empathizing and designing a solution for them: we don’t need a rooster crowing to wake us up, we (generally) know the days when we should carry an umbrella, we can make a coffee in 10 seconds, we can listen to music, we can communicate through writing like this. We could even use the technology to create a beautiful artwork! (well, I can’t, but there are people that do).
But being useful is not enough. You can use adhesive tape to prevent remote control batteries from falling out: this works and is useful. But it is not an artwork. Neither is it professional.
It becomes an artwork when it includes an artistic component. Therefore, another part of our job is the beauty.
But, how can we create such beauty? Let’s think it in another way: We finally understood that what our client wants is the portrait of an actress. Once we’ve identified this requirement, we can start painting.
Have you ever tried to draw? I did, while preparing this post. I tried to draw the portrait of an actress, let’s say Penélope Cruz. Here’s the result:
This drawing confirms that craftsmanship is not just ‘creating from an idea’. If we want to create something beautiful, it is not enough to be creative, but also to be trained.
In the software craftsmanship paradigm, there’s no place for programmers who once they’ve finished the university, expect to settle into a monotonous job. A professional crafter is concerned about her own evolution, and hence she will invest her time and money buying books, attending to events and, in general, practicing.
Thanks to this continuous learning, she may identify potential improvements and require changes. She will never agree with “it has always been done like this” or “if it works, don’t touch it” mentalities.
We do not invest our effort and resources altruistically. We invest them in order to learn how to code better. To learn how to make the portrait of an actress like Kelly Arrontes does. Once we’ve learned how to code like talented professionals, obviously we will never code like rookies again.
As software crafters, we want to deliver useful but also beautiful code, and we will devote to practice to learn how to create such code.
Another argument to defend software development as a craft, is that of the guild. I like the medieval conception that Mancuso presents as a metaphor. He uses it as a way of describing the community, but I’d like to use it more precisely because a guild establishes how work is performed, and how much it costs.
I get a lot of job offers in which recruiters highlight the income that the company or its clients make, the (huge) number of employees that it holds, its ‘leadership’ on the market. Honestly, this doesn’t have any value for me. I don’t care at all about any of these.
A person that considers herself a crafter or a crafter apprentice feels usually more attracted by jobs that provide value for her professional development. And by ‘professional development’ I’m not talking about being promoted. The company has to respect her professionalism and autonomy, expect and embrace change (actually, how could we ever make business in tech while thinking “it has always been done this way”? New technologies change radically for one year to another), create a ‘crafter’ culture that encourages her to keep learning, support her training expenses (why not?) and, of course, pay her a competent salary.
This convention is relevant. But the true core of a guild resides in the idea of shared knowledge. In a guild, both abilities and philosophy are shared among masters and apprentices. We all share what we have learned, and get a new learning at the same time, making that evolution become possible. This has an exceptional value and it’s the reason why, from the crafter communities, we strive to teach our conception to all the developers out there.
Crafter communities are groups of people that organise courses and workshops, go together to events, discuss in book clubs, etc. They are usually open to everyone interested in joining. And they exist in almost all the countries around the world.
I seriously encourage you to go and get in touch with the communities around you. You may be able to find them through Meetup. You can always create your own community as well!
Software crafters care about the quality and purpose of the solutions we deliver, and try to become better professionals through practice, in the bosom of the software craftsmanship guild.