This article and the next are my response to the Ministry of Testing’s latest blog challenge: What three things have helped you in your testing career? As I’m not a tester, I’m choosing to re-word this as: What three things have helped you in the quality aspects of your career as a programmer?
It was going to be one article, but then I realised it was too big. I’ve put two related parts together in this article, and then there’s another with the third part:
- Culture and people
- Thinking about feedback loops
I consider myself very fortunate to have worked for a good chunk of my career, starting quite early on, at a company that had what I consider was a culture that encouraged quality. It wasn’t perfect – we still had bugs, people still disagreed with each other etc. – but hindsight has helped me realise how good it was.
Culture is weird. It’s hard to pin down, measure, describe, or change. I’m not an expert, for instance a sociologist or ethnographer, so please excuse my clumsy attempts to talk about it. For me, it’s about the actual experience of working in an organisation, rather than the experience some might predict you should have based on official things like org charts, job descriptions and company handbooks.
It’s weird because it’s tied to other messy things like identity. Culture and identity can both be from many sources at once, overlapping and combining. In an orchestra, the violinists consider themselves different from the viola and cello players (and might have slightly different ways of doing things) until the trombonists appear, when suddenly their shared identity and culture as string players assert themselves in contrast to brass players. Then when there’s also a soloist singer, suddenly it’s all orchestra members together in contrast to the singer, and so on.
It’s also weird because it both emerges from a group of people, and then flows back to people to influence their behaviour. It’s a contributing factor to important questions like:
- What is normal? What are the expectations on me?
- Do I feel like I belong?
- Do I feel like my contributions and I are valued and important?
- What am I actually allowed to get away with?
- What options do people tend to consider when making decisions, and which options do people tend to pick?
The decisions can include important ones like:
- Who gets promoted?
- Who gets involved in what decisions?
- What work gets done and what is its priority relative to other work?
In case this is all sounding unhelpfully general, vague and nebulous, here are some concrete examples of how I think culture affected things for the better.
A lot of us worked for a long time on a project where we turned our code from a big standalone executable, to a set of libraries such that it could integrate with code from a partner. I realised that we wouldn’t be able to run this version of our code to test it, as it was no longer a complete executable. So I suggested to my manager that we write a test harness, to take the place of the partner’s code and host our libraries.
Even though it would take a fair amount of effort, and wouldn’t directly contribute to what our partner or customers would value, the response from all relevant managers was “Of course we need that, we’ll add it to the plan”. I didn’t need to convince anyone to spend the time on it, because there was the general expectation across the whole group that we would need to test our code adequately before releasing it to our partner.
Everything was reviewed – there were no exemptions for kinds of thing or seniority of author. Things weren’t considered finished until they were reviewed. For larger bits of work, there could often be five or more reviewers spending a lot of time reviewing it. The attitude was professional but supportive. We weren’t trying to bring each other down in a review (scoring points off each other, for instance). Instead, it was more like taking your car to the garage for a thorough service – you might get unwelcome news, but things would be better in the end.
We didn’t practice TDD, but the expectation was that there would be good automated unit tests and integration tests for everything. This meant that when you were about to start work on some code, you could get the latest version of the code and tests, compile them, and then run the tests before you started work to gain confidence that you had a sound starting point for your work.
How can you help to nudge the culture around you in a better direction? Don’t expect radical changes overnight, but how can your actions and attitudes rub off onto other people? How can you learn from and amplify the good practice of others in your organisation, to help that achieve a wider reach?
I have been helped greatly by many people in my career. Some of these were role models – people I learned from by watching and listening as they worked alongside me. Others were teachers – people I learned from by being mentored by them, reading their books or blogs, listening to their podcasts or watching their videos.
Because quality is such an all-pervasive and all-encompassing thing, I’ve learned from many kinds of people. Programmers, managers, user experience people, testers, customer support people, documentation authors, data specialists, technical support people, administrators, professional service staff, my friends and family etc.
I could try to list the individuals I’ve learned from, but this would almost certainly mean a long list that would still miss people out by accident. Instead, I invite you to pause. Is there a blog you’ve been meaning to write for ages, or a video or podcast you’ve been thinking about recording on your phone? It could be that you’re the teacher that someone else needs, so why not make that thing you’ve been sitting on? Do the people who have been teachers or role models to you realise how they’ve helped you? Would you consider sending them a message to let them know?