Monday, November 26, 2018

The human side of SQA - Recruiting software testers


I want to start and say that I am far away from being an expert recruiter or anything that come near to it. But, after 12 years in the software industry and after I recruit few candidates that developed to be quality testers, I can say that I learned a few tricks that should be useful during the recruitment process. 

Recruiting the right staff is probably one of the hardest challenges that manager has during his career, just think that the people you hire today are the ones that determine the factors of success or failure in the long term, both for the team and the recruiter. 

Now, along with the trivial difficulties of the regular recruitment process, we can add a few berries that relevant specifically to the Quality Assurance field that makes it even harder to succeed, in the recruitment process: 

  • The testing field is still new in the software industry.
  • The number of true software testing professionals is still low.
  • The career opportunities for someone who involved in the software creation such as developers/Database engineers are much more attractive than the once that as for testers.
  • The salary of testers is simply lower when comparing against the developer’s salary.
  • Most people still think that software testing is not attractive enough.
  • The field testing is still behind when talking about a formal education (The ISTQB certification is simply not good enough).

Now, the real question that I want to answer is “How can we create an effective process that will raise the % to find the right people..?” the once that we expect from them to make a real change and fit to the organizational DNA…?

Along the process of answering that question, I will try to cover some basic steps of the recruitment process. While doing so, I will suggest a few thinking points that will supply the best answer based on my perspective. 

Stage 1–The recruitment triggers 

Well, it’s basic, you recruit new employees when you need to answer a specific need/problem that should be resolved, that’s basic and well known, but what are those triggers that start the process..? The following list is used to answer that question with the basic triggers that relevant and used in the software industry:
  • The testing team becomes the company “Bottlenecks” due to multiple projects.
  • Fast company growth that naturally causes two additional recruitments in the testing team.
  • AD-Hoc projects that need testers with specific sets of skills.
  • The testing teams should support Automation tools and as a result, they need a tester that oriented with programming languages.
  • The need for experienced testers that can add their fast impact.
  • Retirement or dismissal of existing employees.
  • The need with low-cost testers that performed the simple tasks that can free the senior testers to handle the complex tasks.
  • Underachievement testing team that needs new employees that can share new ideas and abilities.
  • You need to remember that every tester on the testing team has its own set of technical skills and knowledge, sometimes we need to recruit testers that have experience on a new technology that our product needs to support, the simplest example is a product that can run on WinOS and now available for a UNIX platform, as a result, we need a Unix expert that has basic testing skills. 

Stage 2 – Define the position profile and role inside the testing team

In the first stage, we talked about the triggers that could ignite the recruitment process, but what we cannot make random recruitment without the definition of the future position. Now, let’s give few examples those root positions
  • Quality Assurance Manager.
  • Quality Control Senior/junior Tester
  • Quality Assurance Automation engineer.
  • Quality Assurance Manual Tester.
  • Quality assurance test analyst.

The list is trivial and relevant for most testing teams, but we must understand that each Root position may be different depends on the testing requirements and testing complexity.

To demonstrate my point I want to take one example from the root list and show how the profile for this position may reflect differently per testing team that has different challenges and testing requirements:

Root position:  
Manual Tester

The manual tester is a position that relevant for 99% of the testing teams, as such, the same position may have multiple profiles that could be relevant depends on the company needs. Now, the profile is different because each company has different requirements from their testers, therefore the testers should have a specific set of skills and abilities that allow them to accomplish the testing challenges that will raise after they recruit to the company testing team.

To demonstrate my point about “Skills and Abilities” I want to define a “grocery” list that the recruiter should consider when creating the relevant profile, after reading this list I hope that you get the idea about the difficulties that the recruiter has when he needs to search the most suitable candidate that can fit the predefined profile that determines specifically to the company needs and testing challenges.

Grocery items:

Item no’1: Technical Skills

The Software supported platforms:

Every platform has its own challenges and relevant set of skills that you expect from your tester to have when designing the profile, you should be familiar with the challenges and what are the specific set of skills to overcome them, the main platform is:

  • Web-based application.
  • Client based Server application.
  • Mobile based application.
  • Cloud-based application.

The software technology/System challenges:

An additional aspect that should take into consideration when designing the position profile is off-course the supported technologies that used by the software uses. It’s easy to understand that the set of skills is completely different between one technology/System and another.

Few basic examples: 
  • Software that supports wireless technology.
  • Software that supports different types of storages (Isilon, NTAP-CM...).
  • Software that supports different types of Networking (LAN, WAN, Bluetooth...).
  • Software that supports different types of Operating systems (Win, UNIX...).

The Actual testing requirements

I’m familiar with more than 100 testing types that each one of them demands specific skills and knowledge from the tester. Therefore, when designing the profile, the recruiter should understand what the relevant skills that each testing type demands are, great and simple example is the set of skills that the tester need to know when performing nonfunctional tests (Performance, Load, Benchmark..) that demands a specific set of skills that are different from the functional testing types that relevant for most testers (GUI, Functionality, Boundary..)

Additional examples:
  • Manual tester for Component, Integration and System testing.
  • Manual tester for regression testing.
  • Manual tester for White/Black box testing.
  • Manual tester for Alpha/Beta testing.
  • Manual tester for Acceptance testing.
  • Manual tester for sanity testing.
  • Manual tester for compatibility testing.
  • Manual tester for exploratory testing. 

Item no’2:  The tasks that need to be done

The second item in my “grocery” list is all about the recruiter's understanding of the actual tasks that the new profile should handle after the arrival of the testing team. When talking about those “tasks” I want to be clear and say that a great recruiter will be familiar with the tasks that the candidate should handle in the near and also with the one that will be in the far future.
And way this familiarity is so important?

The answer is very simple, when you recruit a candidate to your testing team you probably do it for the long term (I don’t want to waste time on AD-HOC recruitments), therefore you need to understand the upcoming tasks and recruit the person who can handle them, from the other hand and based on my personal experience, if you recruit a candidate based on the near tasks and ignore the future tasks the recruitment is set to be a failure from the beginning.

The familiarity with the upcoming tasks allows you to design better requirements from the position profile because you always can to compare between the tasks you need to be done and the actual capabilities that you expect from the candidate.

In addition, I want to raise an additional point that I always love to mention when recruiting a new person to my team and that point is “Training”, sometimes your profile design based on the simple fact that you recruit someone with great learning capabilities that cannot be helpful in the short term but can do the change after few months of training(based on my experience the best software testers that I used to work with are the ones that trained after the recruitment process although they didn’t perfectly match to the position profile).

Item no’3:  The role inside the testing team

This item is slightly different from the other once that located in our list, why? Because all the other item is relevant directly to the personal side of the recruitment, in simple words, we build the position profile that will be relevant to the job that needs to be done. 
The current item is speaking about the candidate's position in the testing team, let me explain, when you define the position profile you also need to understand the strategic role that the candidate should accomplish in both the near and far future, the reason for that is that you need to define the specific requirements from the position profile when you understand the changes that this role will have in the following years/months to come.

The following table contains a few examples that demonstrate my point of view:

Demands for the near future
Demands for the long-term
Manual Tester                       
Sanity  testing
Manual Tester                       
Regression testing
Technical leader of the product
Manual Tester                       
Performance testing
Team Leader
Manual Tester                       
GUI testing
Automation Tester
Manual Tester                       
Usability tester
QA analyst

From the five examples above you can see that each case will affect the demands from the position profile, it’s very simple to see that the position demands are different when a manual tester that responsibility to make the regression test of the team (Near future) will become the team technical leader (Far Future).

Item no’4: The profile Characteristics

Continuing the previous item, after the role is determined and the recruiter understands the expected tasks that need to be accomplished by the new candidate, he now can move into the next level and determine the relevant characteristics that the position required. To do so, I created the following table that contains the main characteristics that each recruiter can use when he tried to configure the set of characteristics that will most fit the for the position profile. But wait… I have a few guidelines that will help you to get the most from this table:
  • The table contains both individual and public characteristics, you always need to bathe.
  • To be successful, you need to find the most relevant set of characteristics for a specific profile, only then you’ll be able to find the best candidate to fit your requirements.
  • Some characteristics that I mention are NOT recommended, I think that you need, both aspects when designing the future profile.
  • Never try to find all characteristics in one profile (I promise you that you cannot, remember that each position requires different characteristics that will help him to succeed).   
  • The table contains some other aspects of the personal characteristics (personal abilities, specific skills and a set of required abilities that allow him to make the job done).
My Short comment
I think that the ability to adapt to new challenges that we have in the fast and dynamic world of testing is a great advantage, the person that can adapt to changes will most likely to be with better skills and capabilities.

You probably know that the software world is a very dynamic place, great applications that used to be great become irrelevant after a few months and new once take their place, as a result the agility of your testers should be high in a way that allows the company to provide high quality for their products while reducing the testing time, therefore a tester that holds this characteristic will work fast without reducing the quality of the product (Agile Testing anyone..?)

Attention to small details
I think that every tester should hold this one… the small details are the one that separates between success and failure.

Analytical problem solver
Find the problem->Understand it -> Solve it!
Great char’ when you want the person who can speak loud when he wants to move things and gather the team to promote is ideas.
I don’t believe in such certification, for me, it’s only helped when you are new in the testing field and you want to understand the basics, but in some companies, the certification is a mandatory requirement when they recruit testers.

From Wiki :
“Collaboration is working with each other to do a task and to achieve shared goals”.

I hope that you understand the importance of a good collaboration and the benefits you gain when you recruit people that want to work in a collaborated environment.


It’s basic, you want to recruit the persons who will be committed to their work when analyzing this characteristic we can mention a few aspects  that relevant:
-     Commitment to the organization.
-     Commitment to the tasks.
-     Commitment to the other persons in the testing team.
-     Commitment to the end quality of the product.

The ability to communicate with other persons is crucial, you need to remember that in QA we need to communicate well with multiple personalities that located under different departments, each one of those personalities may help us to perform our job with greater efficiency and  in some cases we simply cannot perform our job without their help, Examples:
  • Communicate with product managers.
  • Communicate with the Developers.
  • Communicate with clients.
  • Communicate with Other testers.
  • Communicate with technical writers.

In addition, remember that we have different communication levels, Examples:
  • Tester <-> another tester (Same Level).
  • Tester <->team Manager.
  • Tester <-> Department manager.
  • Group manager <-> Department manager.

During my many years in the software industry I saw different types of testers, the one who willing to take responsibilities and as a result, they willing to be criticized and the once who afraid to be in the position that allows them to show their real skills because they afraid that their ideas will cover them to criticize.

I like that one, if I gave 10 testers one object and asked them to create an STD I promise you that 90% of the test will be the same, the other 10% is the creative side of the tester, when the tester has high creativity, he can design high-end tests that put the software in situations that other tester will fail to test.

Believe me, when I say, Credibility is everything. You cannot create a great force of testers when some of them failed to have this basic characteristic.

It’s basic, you cannot make any tests without the curiosity about the results of your actions, the most talented testers that I know are the one that wants to put the system in situations that the documentation failed to address the expected outcome, those testers are the one who can put the system in situations that it’s doesn’t designed to handle.

Well, here we have two different sides, the positive and negative:

The positive perspective: 
The personnel knows how to get the criticism that other personals and tunnel it to positive directions (How a good criticism can make me a better person and how this criticism can help him to improve himself as a tester).

The Negative perspective: 
A person who see real criticism as a personal attack and become defensive without a real cause. 

Decision Maker
When testing a software we need to consider 1B aspects, a good person is the one who can make a decision and take the responsibility for that, the classic example is when a tester need to perform a “Risk Management” that he needs to take hundreds of decisions or when he needs to set priorities to his tests that he never have the time to test but each one of them can be important to the end quality.

This person takes is decisions and stick with them without any deviation to the sides and until they accomplished.

He knows how to handle a different kind of people that belong to different departments, he knows how to convey others with is the way, he knows how to remove the barriers that he has in the project timelines, and most importantly he knows how to encourage people to work harder in a way that the end quality will be higher.

Remember that you work with humans and not with machines, empathetic is a mandatory chore’ for all of us no matter the profile we search for, think about the many daily situations when you want someone that can listen and supply the one respondent that make you feel better with yourself, I think that you need to find those people and exclude the one that uses a cold shoulder.

You always need the one person in your team that has the ability to provide the extra boost both in the personal side and for the entire team, I think that every company should aim for such people that use their boost to raise the company productivity.

The software world is a very dynamic place, a person should have the drive to explore if he wants to stay relevant, and every other option will lead the person to stay behind.

I love to work with people that can change their way of thinking to handle different situations that we have in the software world, flexibility can be very handy when you need to handle different test types, multiple projects, and Ad-has issues that occur on a daily basis. 

From the other hand, I’m familiar with many persons that failed to be flexible, in a way that really affects the project, those people can handle one task at the time and cannot handle multi-tasking assignments.

Goal Setting
My goal is to be an astronaut… yes, every person can create a set of goals that he wants to achieve, but that’s not the case here, a person with this characteristic will set his goals based skillful  decisions that involve the following variables:
-     Realistic (The goal is something that should be accomplished by the individual/team).
-     Timelines (The goal should be accomplished in a reasonable timeline framework).
-     The goal is understood to all participates.
-     The goal has a real prepuce.
-     The goal set only after that all the barriers come into calculations.
-     The goal should be created with success and failure parameters.
-     The goal is well explained.
-     The goal progress can be tested along the way with detailed approval points.

This person will have the ability to overcome a problem by himself and without the need to involve other propels that take the responsibility.

To provide the best quality you must be a great investigator, in my opinion, you cannot succeed unless you did a detailed investigation about the software that is going to be tested by you. 

When I’m speaking about the investigation, I want to be clear and say that a good investigator will success to gain all the information both from humans and written data, that allow him to learn everything that can be useful both in the static/dynamic testing that coming ahead. 

In addition, you need to know that sometimes the knowledge should be distributed to others, therefore the investigation result should be of a quality that other person can use and learn from. Few examples:
  • Investigate developers about their code.
  • An investigation that related to the static side of testing.
  • Investigate about the client.
  • Investigate other teammates that have more experience in some areas.
  • Investigate new platforms and 3rd party software that relevant to the tested software.
  • Investigate new areas that promote him to be a better tester.

It’s basic for all of us, but I still don't find the way that allows me to inspect this characteristic in a person.

A good interviewer can get all the data he needs to overcome a problem.

Know how to get rejections
Very simply, some personally know how to use a rejection to find better ideas and some person will take the rejection as a personal issue and become depressed about it. I’m sure that you figure it out that the first case is the recommended…

Bill gates provide the following quote:
“I choose a lazy person to do a hard job. Because a lazy person will find an easy way to do it.”

Great sentence and even funny… but I really don’t think that lazy people are the one that you want to recruit…

A leader is a person who has the personality to lead a group of people to accomplish a predefined goal. The effectiveness of the organization is most likely depends on a strong leader. In my personal opinion a great leader should be examined by a few simple criteria:
  • A great leader has a vision.
  • A great leader has a policy on how he wants to accomplish his targets.
  • The team motivation to accomplish the latter target.
  • The team participates in the road to accomplish the target.
  • The greatest leader is the one who succeeds to accomplish is targeting.
  • How he can cause his team to perform their tasks from a cooperative way and not by autorotation.
  • In many cases (not all) the leader should be an expert in his working field.
  • The effectiveness that the latter use is resourced to accomplish the target.
  • The leader should be a person that can use as an example for the rest of the team.

A mentor is a person with a large knowledge base (usually an experienced person that familiar with the product/technology) that can guide other persons to get the missing information they need to do their job.

Very simple, you must have the capability to manage multiple tasks simultaneously, if a person cannot do it, he simply becomes not relevant to the current software world.

In today's working environment, the employee should manage a Hugh amount of information, an organized person can manage this data in a way that allows him to perform its job efficiently and without forgetting one task or another.

I think that passion is one of the main keys for success, a passionate tester will love is work and probably use is the passion to learn new ways to perform better than other unpassionate teammates.

A persistent person will want to success, although he has some challenges along the way, I think that you prefer those people in your team against the people that will give up on the first major challenge they confront.

Sometimes you just need to be Persuasive in different situations when you believe that your way is the most efficient to accomplice the task, I love people that have different ideas than I do, but I got annoyed when those people failed to be Persuasive about their idea and as a result a great solution to a problem vanishes without a real cause.

You cannot be relevant in the software industry without the ability to plan your steps, in the daily work I have 1000 tasks that I cannot achieve without a great plan, simple as that.

Problem Solver
You want a person who can solve the problems he faces, simple as that.

Project management
Basic for every position that involves ownership of projects or a group of people.

Programming capabilities
I can write 10 pages about this characteristic, but in this chapter, I will say that in my personal opinion a great Quality person should be familiar with the different coding languages, the benefits are Hugh:
  • Understand the code behind the tested software.
  • Design a more efficient test case.
  • Create a detailed design documented that explains how the software is working, this doc is great when you want to design your test based on the software flow.
  • Writing automatic tools and scripts that save time and money.
  • Perform a “White Box” testing.
  • Perform a much more efficient “Risk Analysis”.  

A person who understands the limits and know that at sometimes he cannot win it all.

It’s really not recommended to have a reckless tester, in some situations it can be devastating, always look at this characteristic and make sure that your testers have the recommended balance.

You want people that responsible for their actions, responsibility is one of the major factors that lead to greater trust between people.

The classic for static testing, the person who has this ability will be able to review printed documentation and provide is input in a short time, this issue will save time and unneeded effort from the company engineers.
  • SRS/Spec reviews.
  • Release notes and user guidelines documentation.
  • SDD (Software Detailed Design) review.
  • STD review.

In addition, you need to know that a good review will give is input in a way that other people can understand and use the information to improve themselves and their quality assurance capabilities (reviewer that scent is input as criticism will fail to get the wanted response).

Risk assessments
In QA the risk factor is a major success factor in every project, the person that has the ability to understand it and perform it with success will provide a greater % for high quality.

I love personals who can learn quickly and effectively, in our field you need to ask 1B questions, but the self-learner will first learn the materials and the design the relevant questions that will promote its holdings in the tested software.

From the second side of the coin, we can find the one who needs to ask 1B questions without the simple idea for what they really want to achieve, in that way the company will lose an expensive amount of time of two workers without a real cause.  My suggestion is that always search for the one who can learn new things and ask the relevant questions.

Sense of humor
Nothing else to say besides that a good sense of humor can help to raise the individual and team morale.

Sophisticated persons can find great ways to overcome complex problems.

Team builder
Basic for every manager that need to build a new team or adjust a current one.

The basic characteristic of all peoples that work in the software industry.

Want to be familiar with the company customers
To be a good tester you need to know your customers, the basic questions that need to be answered :
  •  How the product provides a solution to the customer problem?
  • What are the customer expectations from the software?
  • How the customer is going to use the software?
  • What is the Customer environment? And how can it affect the computability, performance, and integration between the software and the customer site?
  • What is the importance of the customer to the company?

Work Ethic
Do I really need to describe the importance of this char’…?

My Presentations