A reflection on Software Craftsmanship

Mashooq Badar, Sandro Mancuso

Mashooq Badar, Sandro Mancuso

See author's bio and posts

Many people inside and outside the Software Craftsmanship community refer to Craftsmanship as a “Metaphor” for Software Development. We ourselves often refer to Software Craftsmanship as a metaphor without thinking too much on what it means to us. Thinking deeper, and looking at our behaviours and values within the community, we don’t consider Craftsmanship as a metaphor for Software Development. Saying Craftsmanship is a metaphor for Software Development is saying that it is like a Craft but not literally a craft. That’s not our perspective - we think Software Development is a craft.

First of all let us look at the dictionary definition of Craftsmanship. In the Oxford English dictionary Craftsmanship is defined as, “Skill in a particular craft.”. That begs the question, “What is a Craft?”. The same dictionary defines Craft as “An activity involving skill in making things by hand.”. So we label Software Development as a Craft because we make software by hand? There is more to the phrase “making things by hand” than the immediately obvious.

“Making things by hand” is an innate part of how we work. It involves manipulation or shaping of a material with a type-form in our minds to achieve a certain result. There is constant sensory feedback, whether that is through touch, sight, feel, or a combination of those. It is about a constant evolution of the desired outcome, in our minds, according to our changing understanding of the material and the desired outcome. It is a constant connection between the hand, the senses, and the mind. It is an act of making. We would argue that software development is an act of making and thus can be labelled as a craft. That is not a metaphor, it is a label for people who see the act of making software through this perspective.

Once we take the view that Software Craftsmanship is not a metaphor we also break the restrictions that a metaphor imposes. The practices associated with software development do not need to be tied to other crafts throughout history. We can learn from those crafts and associated practices, adopt and adapt the ones that are relevant and ignore the ones that are not. We can come up with our own practices (e.g. Agile and XP practices) that are different because our craft is different from the others, just as other crafts are different from each other. In fact we take that view already and we are not blindly following the archaic practices of crafts from the past. However, we are learning lessons from that history to take our craft into the future.

To us, Software Craftsmanship is not about a hierarchy of master to journeyman to apprentice. Our apprentices do not have master craftsmen ordering them about. In fact we do not have master craftsmen. Our apprentices have mentors who are helping them in their journey to learn particular skills. We also acknowledge that mentors are not superior to our apprentices. In fact we see that we are all mentors in some aspects and apprentices in others. Our apprentices can teach a thing or two to the most senior people in our company. The reason we call them apprentices is because we feel, along with the apprentices, that the apprentices can benefit from a concentrated period of learning before we can be sure that they are ready to work with the diverse set of challenges that we face with our clients.

We learn from our history and understand that reaching for perfection vs getting the job done is a dilemma facing crafts throughout the ages. We value pragmatism and understand that the act of making software is about providing value to the business, the people directly impacted, and the environment within which our software will live and evolve. We understand that the act of making software is a social endeavour and not just a technical endeavour. In fact we know that without a cohesive team we can forget about making software in any meaningful way.

We understand that our craft is a young one but also very important to our future as humanity. We understand that we need to learn from each other and help each other advance our craft. We know that, like every other industry, certain groups are underrepresented in our craft. We as a community are fully committed to diversity and inclusivity. These are not just empty words. Our members are actively involved in nurturing, and encouraging, mentoring people from those groups to join our industry. We pride ourselves in being, friendly, helpful, open, and sensitive to everyone.

We understand the importance of community and inclusivity to ensure that our craft draws from the beautiful diversity that humanity offers us. We say this because we see it within the Software Craftsmanship communities that we’ve had the pleasure to be a part of. The spirit of that same community lives in our company. We are dedicated to teaching and learning, whether that is within our community or within our clients who are invariably drawn to our community once they experience it first hand.

Our craft is young but we like to think that we are making a difference towards its better future.