I’ve been thinking lately about the idea of craftsmanship in our work. In the consumer driven society we live in, we have embraced the idea of planned obsolescence for our physical products and I think in some ways our cultural viewpoints come into play in software development as well. Software is made by people, and people bring their cultural views into everything they do. Perhaps this is part of the reason we see so many shoddy examples of software. If it sells for a while and isn’t sustainable, oh well. We’ll just make something new to sell you.
I think though, that there is a bit of a cultural change on the way. We have tried rampant consumerism as worldview for a few generations and found it wanting. Younger generations seem to want to see something change, to find some rootedness and depth in something. I think we are not yet sure what that is, but we are looking and trying to find the answers to the question of what we find our value in if it isn’t in being stuff accumulating, resource hogging, consumers. One of the things that we have started to see in response to this is a resurgence of the idea of craftsmanship. Hand crafted, custom made things are all the rage.
While there are things to be careful of here (I don’t think craftsmanship on its own can fill that need for meaning we are looking for), there is also something to consider here as well. What is the balance between long and short term value? And this isn’t just something to think about in the physical world. This is something to consider in the digital world as well. What is the balance we should have between quickly getting something out the door, and releasing something that has quality baked in from the start? Do we have a responsibility to create something that has inherent beauty and durability, or is our goal just to make sure company profits are maximized? I actually don’t mean these as rhetorical questions. I think we need to grapple with where on these continuums we fit. As employees we have responsibilities to our employers, but as ethical humans we also have responsibilities for how our behavior affects others as well.
As I think about it, I would like to be a craftsman. I don’t want to contribute to the cultural zeitgeist of a disposable, transient, ungrounded, consuming-as-meaning, society. I want to be a part of something that brings stability, groundedness, beauty and quality into our societies. Maybe as a software tester my dreams are too lofty, but there they are. That is what I would like to see. However, in thinking about this, I’ve been struck by one thing in particular. As a software tester, can I really be a craftsman? I don’t (usually) create things. I’m helping developers and others see where there might be quality issues and I’m helping to smooth out processes etc. so that we can see better quality products going out the door, but at the end of the day I don’t make things. So can I be a craftsman? What does it even mean to be a craftsman as a software tester?
I think the answer lies in the team. As a team of coders, testers, business analyst, writers, and others, we produce a product. Whether this products is a disposable throw-away product, or a high quality craftsman like product, is a reflection of the attitudes on the team. When I focus on changing myself and becoming a better tester without explicit reference to the team and how my growth in skills will fit into the team and change the team culture for the better, I’m missing out on what it really means to be a tester. If I want to be a testing craftsman, I need to let go of the identity of a tester to some degree and I need to embrace the idea of being a part of a team that works together as a team to achieve long lasting high quality software.
If you think about it, this has some pretty big practical applications. It means thinking of myself as more of an advocate on the team for cultural changes that help enhance code quality even at levels that are not customer visible. It means less of an emphasis on being only a bug finder and more of an emphasis on being an agent for cultural change on the team. It means helping others to see the importance of having clean code and a commitment to quality. It means pushing and advocating for things that might be expensive in the short term but with long term payoffs. It means leading and teaching, and not just nagging. It means working with developers and getting to know them. It means leaving my desk more and engaging with others on the team. It mean having hard conversation and fun conversations, and intense conversations. It means all this and so much more. It means refocusing and redirecting toward the team instead of towards myself.
With the size of most modern development projects, we can’t work as a lone craftsman in the workshop lovingly making beautiful products. But this doesn’t mean we need to become just a cog in the production process, a mindless worker on the assembly line. We can still embrace craftsmanship as part of a workshop. As part of a team that makes and produces beautiful, high quality, well crafted software. That is my goal as a testing craftsman.