I recently had the privilege to present to a group of students who are engaged in a curriculum designed to teach them software testing skills in an effort to get them their first jobs in the testing field. During one of the Q&A sessions, a student asked if there were other skills they should be learning in order to better prepare them for a job in a particular sector. My co-presenter, Keith Klain, responded with an excellent answer about how important it was to build a foundation of skills that provide them with an understanding of how to approach software testing and could be transferable to any industry.
When the session was over and I was headed up the Merritt Parkway on my way back to Massachusetts, I found myself once again pondering that same question. I describe myself as a software professional who has been engaged in some part of software development for the better part of three decades. Thirty years in one industry is a long time and it sounds like a bit of a yawn, right? But the reality is that while I have been involved in some part of building software for that long, I've had the opportunity to learn about a lot of different industries in the process.
I’ve worked on software for small business finance, for Web developers, for technical writers, for freelance writers and publishers, for data storage etc. etc... So, while I’ve built expertise in building and testing sfotware, I’ve also had the opportunity to gain some knowledge of a wide variety of industries.
How does that happen?
Well, to start, my colleague is exactly right when he talks about transferable skills. If you are a good software tester or developer, you can build any kind of software at any company. But first, you need to build a strong foundation of skills that allows you to succeed no matter where you are. Since we were addressing a group of software testing students, he was referring to specific software testing skills, but included in those skills are what I like to call the Three C’s:
1. Critical Thinking
This is, perhaps, the essence of testing.
A skilled tester can dissect a product or a requirement through analysis and reflection. An extremely skilled tester is able to see the larger context of a feature while simultaneously understanding the pieces that comprise it. This is essential when it comes to building a deep-enough understanding of the product to focus on the right testing and assign appropriate priorities to defects.
Without true critical thinking, it would be difficult to design tests that exercise the code in a way that makes sense to the goals of the project. And a good critical thinker can also identify their own gaps in understanding, knowing when and how to ask for clarification. You can gain more respect from a colleague by admitting what you don’t know than bluffing your way through it.
Oh, yeah… a good portion of software testing is tedious data setup and repetition. Maybe that’s why we get all philosophical about it; so we can feel like the boredom is part of the lightening of our soul and contributing to the greater good. But there’s a secret pleasure that lucky testers get to experience in addition to that – and it’s probably why so many of us get addicted to testing software.
Before you start getting your data set up and running through your proscribed tests, it takes creativity to figure out how to test a feature, what is the right data to use, how many different paths do you need to traverse to cover all the scenarios. And, if you’re really lucky, there’s enough time in the project and support from management for the true creative testing – what I like to call "off-roading," where you let the software take you where it will.
It's important to walk a fine line here.
Testers need to be diplomats, technicians and politicians all in one. It’s one of the hardest skills to master (for anyone) – how to convey an issue clearly and concisely, in a constructive tone but one that also denotes the severity of the problem. It becomes even more complicated when you realize how different the audiences are for these communications – on the one hand, an issue needs to be well-defined technically for a developer to address it and, at the same time, described clearly enough for a non-technical stakeholder to make an appropriate decision about its impact to the project. And at times, testers need to tap into their powers of persuasion when they are advocating for a particular action. It’s a problem many testers wrestle with and, if done wrong, it can create lasting problems with the project team.
Of course, none of this is isolated to software testing or even software itself. I have held different roles in different industries and I have seen those skills make or break colleagues. And yet, these are the skills only a few training programs address even though they can be far more important than any technical knowledge you’ve picked up. Having these skills as your foundation will give you a better chance in succeeding in new territory. Say you're looking to hire someone to work on software for a banking company. Are you going to try to find someone with software experience and an extensive banking background, or someone who has a strong foundation with the three C's and teach them what they need to know about banking along the way? While the first person could be ideal, who knows if you'll ever find that perfect employee. The second person, however, is a secure option. A person with these traits will succeed.