The Eight Habits of Highly Effective Software Testers

In many casual conversations with senior level software engineers at Microsoft recently, I have heard the same message repeated over and over: finding really good software testers has always been difficult, but recently finding great testers has become almost impossible. I have also heard this message from Microsoft and Volt recruiters. In particular, I was asked several times last week, "What makes a great software tester?" Microsoft alone consistently has over 400 openings for software testers on a daily basis. Volt has roughly 100 opening for contract testers on any given day. Taking a cue from the title of a well-known management book written by Stephen Covey, "The Seven Habits of Highly Effective People", I decided to sit down and list the characteristics or habits that I’d look for in a great software tester. I put myself in the position of a hiring manager whose product and company depended upon the quality of some hypothetical software system under development. My list ended up having eight attributes, rather than seven as in Covey’s book, but I didn’t set out with a predetermined number of characteristics in mind. Here is my list of the eight attributes of a great software tester, roughly listed in order of importance although I think all eight are must-have skills.
1. Passion for analysis and testing.
2. Technical skill.
3. Raw intellectual ability.
4. Ability to prioritize and organize.
5. Ability to adapt and learn.
6. Ability to work without direct supervision.
7. Ability to communicate.
8. Ability to understand business strategy.
1. Passion for analysis and testing. The key to success in any job is having an honest passion for what you do. Software testing is primarily about analyzing the work of others. A great software tester will get a greater thrill in writing some test automation which exercises a software application than in writing the application itself. This characteristic is often associated with people who have college degrees in a quantitative field other than Computer Science, such as Mathematics or Economics. To a large extent I believe a passion for analysis is primarily an innate, rather than learned, characteristic.
2. Technical skill. A great software tester must have significant coding skills. Testers may not need skills on par with systems developers, but a great tester must have good coding skills in order to understand the system under test, communicate with developers, and write test automation. Most technical skills can be learned through education (formal college or self-taught) or experience. In either case I believe that at least four years of skill acquisition is a necessary prerequisite for a great software tester.
3. Raw intellectual ability. A great software tester has to be smart. And by that I mean he must have exceptionally strong analytical and logical ability. Software development is essentially an exercise in logic, and to operate at a high level in this environment a software tester has to simply be smart. Interestingly, intelligence often correlates well with sense of humor, and vice versa.
4. Ability to prioritize and organize. The ability to prioritize and organize are generic required skills needed for just about any job but these skills are critically important for software testers. Software development and testing is a highly dynamic and fluid activity where the key variables can change weekly, or even daily. The ability to recognize, interpret, and organize around these frequently changing job environment variables is an essential ability in a great software tester.
5. Ability to adapt and learn. The software engineering field is relatively new (compared with most other forms of engineering) and new technologies appear with a speed that would astonish those not familiar with software. For example, the appearance of C# and the .NET Framework in early 2003 completely revolutionized software application development. Great software testers must have an ingrained propensity to be ongoing learners and consistently spend part of every week, and maybe even part of every day, dedicated to upgrading their skill sets. I performed some research a couple years ago that suggested that a software engineer’s "skill set half-life" is about 18 months — meaning that without a significant upgrade in skills, an engineer will be obsolete and not hirable (for leading edge systems development activities) in 36 months.
6. Ability to work without direct supervision. The ability to work effectively without direct supervision is another generic job skill but is a skill that is particularly important for software testers. The requirement for taking independent action — quickly recognizing a technical or business need related to the software testing effort, and the ability to know what steps to take without the need of managerial approval (and also the ability to know when not to forge ahead without a management OK) are essential skills.
7. Ability to communicate. A great software tester must have strong written and verbal communication skills. A great tester must be able to read and analyze product documentation, write test plans, write clear bug reports, write coherent status reports to management (both formal report and ad hoc e-mail reports), and have the ability to listen critically and speak rationally in person-to-person meetings.
8. Ability to understand business strategy. The characteristics of great software testers I’ve listed so far are primarily tactical in nature. The final characteristic of a great software tester on my list is the ability to see the larger picture of a company’s overall business strategy. The ability to see the big picture enables a great software tester to actively participate at a level higher than just an individual contributor — instead of merely finding a Priority 2 / Severity 2 bug, a great software tester can identify strategic strengths and weaknesses of a software system that can ultimately lead to a business competitive advantage.
This entry was posted in Software Test Automation. Bookmark the permalink.

4 Responses to The Eight Habits of Highly Effective Software Testers

  1. shrini Kulkarni says:

    The title of the post is about "Habit"s (as in "The Eight Habits of Highly Effective Software Testers") and later in the post you talk about "skills" (as in "although I think all eight are must-have skills") – Are not they different?
    Habit : a pattern of behavior acquired through frequent repetitionSkill : A skill is an ability, usually learned and acquired through training, to perform actions which achieve a desired outcome.
    Skill is more concious and explicit attribute where as habit is rather automatic and implicit. Are you saying that skill at its peak becomes habit ? A perfected skill is a habit?

  2. James says:

    You are quite right that although the terms "habits" and "skills" are related, they are different in the context of this discussion.  First of all I used the word "Habits" in the title of my blog entry mostly because it sounded good — mirroring the title of "The Seven Habits of Highly Effective People" which is very well-known. So I agree with you entirely that a good habit for a software tester is one which is more or less automatic. Take for example my "habit" #5, the ability to adapt and learn. Virtually all of the very best testers (and developers, managers, etc.) I know take training classes regularly. Most of the software testers that I consider weak, rarely take classes.  

  3. Guilherme says:

    It is a nice post. My two cents:
    "finding really good software testers has always been difficult, but recently finding great testers has become almost impossible"
    Recruiters should stop looking testers among people trying to be developers. I have been a developer for the last five years. In my last job I helped hiring new developers by choosing interview/dev questions. Another guy selected testing questions. I could\’nt answer the testing questions (I have a basic knowledge about testing, but definetelly I am not a tester).
    Now in the hiring process they offered a SDET position which I accepted. Do you see the funny thing: I would\’nt be hired as a tester in an interview process I was part of. I guess this is something like "Hire everyone you can and if we are lucky enough a few will be good testers!". Its no surprise its turn out that the majority are not testers at all.

  4. James says:

    Interesting comment and one which brings up several key issues about hiring great testers. One issue is the lack of a supply of testers: the number of computer science graduates in the U.S. is very small and virtually none of them receive formal classes on software testing. Another issue is the perception that software testing is a second-class activity compared to develoopment. Anyway, I agree with your opinion that hiring testers is haphazrad in the sense that you can\’t really identify great testers in an interview, and this in turn leads to a situation where many testers aren\’t very strong, which in turn leads to a general degrading of opinion of software testing, which leads to a smaller pool of testers, and on and on. It is a difficult problem with no easy solution.

Comments are closed.