Testing Craftsmanship

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.

Setting Goals

As with many companies, my company has a performance review program in place. As part of this program we have to work with our managers to set goals for the year ahead.  This seems like a good idea in theory, but sometimes the way it worked in practice didn’t seem to be adding value.  In trying to make it more valuable for myself I have worked towards setting SMART goals. Here’s the problem though.  It didn’t work.

I would struggle to come up with specific, measurable, attainable, relevant and timely goals and after all the work put into coming up with them, I would still find they didn’t really help me.  Things would change too quickly and the goal would become irrelevant, or I just wouldn’t have a connection to the goal and so would be forcing myself to try and work towards it without any motivation, which works when your willpower is high, but not when it is low.  All in all, it just wasn’t working, and so I have been thinking about how to make better goals.

Originally the goal setting process for me was task related.  I would have goals that said something like, “spend x percentage of my time doing exploratory testing.”  That didn’t really feel like a goal at all. It was just a record of what I would be doing with my time, so I tried to re-write those as SMART goals into something like: “research and use at least 5 new exploratory testing techniques within 3 months.”  That seems like it would be a lot better, but it still didn’t work for me.  I had to really force myself to do it and I ended up giving lip service to it rather than really engaging with what I was doing.  Part of what was missing here was the intention behind the goal.  Why am I even doing this anyways?

But now what? If SMART goals aren’t working for me and if I want to try and get something useful out of the goal setting I need to do, what kind of goals should I set?  I could try another goal setting paradigm – perhaps HARD goals or BHAGs or something else – or I could try to come up with my own way of setting goals.

At this point it doesn’t seem worth it to me to go research and figure out a new goal setting method, and in some ways it feels like trying to find a magic bullet solution that will tell me how to make good goals (and by implication how to improve).  Rather than spending too much time and energy creating and polishing and measuring and tracking different goals, I will just create goals that put down in paper what I am trying to do in a way that I can refer to and use to help drive myself to change.  So to revisit the exploratory testing goal I could phrase it something like: “I want to become better at exploratory testing”  and leave it at that.  Sure it’s vague.  Sure it’s hard to measure.  Sure there are no time frames to do this in. I think I’m ok with that.  It might not be as ‘helpful’ as a more specific goal, but if it actually drives me to change something and do something and learn something it will really end up being much more helpful.  And on top of that it will be far less expensive.  I don’t have to put thought and effort into measuring and tracking it.  I can use whichever subjective experience I want to use (Am I less bored when doing it?  Do I find better bugs?  Do I find more bugs? – whatever things ‘works’) to track it.  It also took me about 5 seconds to come up with and so doing goals like this could save me a lot of time and energy to focus on – I don’t know – actually improving, instead of writing down things that might help me improve.  

Maybe SMART goals (or one of those other goal setting systems) works well for you.  If it does, wonderful!  I guess I just need something different.  Something that works well for me.  I’ll keep experimenting and maybe someday goal setting will be a time of the year I look forward too.