Full stack of pancakes

You've heard of full-stack developers. Now meet the full-stack QA tester

There’s a perception that QA engineers are far less technical than developers, engaged primarily with manual testing of whatever the developer happens to hand over to them. This myth paints testers as being primarily reactive, looking for bugs in work that has been finished by the developers, rather than proactively looking for defects throughout the planning, design and development stages as well.

There may have been some truth in this when we were doing most of our development in waterfall style, but in today’s agile and DevOps organization, this is an outdated and inaccurate view. In today’s organization, you’re pretty much guaranteed to work with full-stack QA engineers. Let me explain.

A developer who masters each layer of an application, and the technologies employed all the way through from the back-end to the front-end, is called a full-stack developer.  Similarly, a QA engineer working on all aspects of quality and using different testing methods to test their application, is called a full-stack QA engineer. A full-stack QA engineer will be comfortable working across all of the application’s layers, and will be familiar with large parts of its functionality. They will think about the many different aspects of product quality, such as functionality, usability, performance, security, globalization and so on.  They will be familiar with test automation strategies and technologies. The full-stack QA engineer has a rich mix of domain knowledge, technical skills and testing expertise, all from a user-oriented perspective.

Gartner Magic Quadrant for Software Test Automation

Why we need full-stack QA engineers

The primary motivation for full-stack QA is the adoption of agile product development processes. As software updates are delivered more frequently, QA engineers have less time to complete all the testing. There's not much time towards the end of a sprint, and it’s certainly too late to do it months after the feature’s development is ‘complete’ (can it really be complete if you’ve not finished testing?!) 

So to achieve the goal of fast delivery, testing activities must be integrated with the agile process and tasks for the sprint. In other words, testing is not something we do once before release; it’s done during every sprint. The QA engineer needs to think up-front about all aspects of quality and how to test, from the start of the sprint’s planning phase.

The QA engineer must grow their skills to match the new technologies, testing techniques and methodologies currently in vogue. A respected QA engineer with a range of skills can command a higher salary, enjoy job satisfaction and a successful career.

What full-stack QA engineers do

A full-stack QA engineer needs to know the product well and understand how to test it from the user’s point of view.  They should be involved in the early stages of the feature’s development, so that they can share their advice and experience from a testing and user-perspective. Fewer defects are introduced by developers if the QA engineer is involved from the start, which includes defining the feature’s requirements.  

A feature-level perspective is critical – just because none of the user stories have defects, it doesn’t mean that the feature as a whole works well. At the beginning of the feature, QA should be involved in feature elaboration to understand and influence the end-to-end flow, and come up with the usage scenarios that will be supported by the feature. After the user stories and features are complete, the full-stack QA engineer will test them, and ensure the flow is correct.

The full-stack QA engineer needs to understand how users use the product, and is concerned with its usability. Security testing is important too – it’s not only relevant for applications that maintain sensitive or private data, it is also concerned with the availability of the application. The application’s services must be ready for us and available to authorized users as and when they need it, which requires the QA engineer to examine the software from a security perspective.  Similarly, the full-stack engineer will be a competent performance tester, since many of today’s applications are high-end web apps that are accessed concurrently by potentially millions of users who expect a flawless user experience.

The full-stack QA engineer will work with the developers to understand a feature’s architecture, how it’s implemented, and the technologies used. This will help them determine how best to test the feature.  Consider, for example, auto-complete on a selection list. The QA engineer will consider issues such as: the time delay to refresh the selection after typing a single letter; how to test the event that triggers a REST call to the backend service; how the UI layer behaves if the backend service is broken; etc. The full-stack engineer doesn’t need to know the actual code of the application, but a deep knowledge of the implementation can raise some very useful technical questions. This helps the team as a whole to think more carefully when implementing the feature, and prevent defects from reaching the end user.  Testing is treated more as defect prevention than defect detection.

Full-stack QA engineers must think about test efficiency. Investing in automation is critical to repeatable testing. The tests themselves can and should be automated, but so should data or environment preparation, which is time-consuming and error-prone when done manually. The engineer will use their understanding of the feature’s architecture to design effective test cases that maximize coverage.  For example, a new feature on a typical Model-View-Controller web application might have a browser-based user interface, and a REST-based API to access the back-end. 

The QA engineer can test the API layer before it’s integrated with the user interface. Similarly, testing an application through its API is more resilient and efficient than testing it through its user interface – resilient because APIs tend to change  less frequently than the user interface; and efficient because testing through the API is quicker than testing through the user interface, and it’s easier to validate the data it returns. Some user interface automation will still be performed, but the full-stack QA engineer will consider the best strategy for automation.  

Software development organizations must nurture and grow full-stack QA engineers. As a tester acquires the skills of a full-stack QA engineer, their influence on the product’s direction and quality will increase. An experienced full-stack QA engineer is also a product expert, quality advisor, and risk analyst.

Building a full-stack QA team

Becoming a full-stack QA engineer requires mastering a lot of skills which may be difficult for many QA team members to acquire in a short time. My suggestion is to start with building a full-stack QA team first, where not everyone in the team is a full-stack QA engineer, but collectively, the team has the capabilities to handle any task, such as automation, end-to-end functional testing, performance testing, security testing, and so on.

The team should include a specialist in each testing aspect. For example, one engineer might have excellent product knowledge, and focus on writing extensive end-to-end test cases. Another might be an automation expert, writing code to test the API and user interface layers.  Yet another might be an expert at testing security and privacy aspects. Collectively, this is as full-stack QA team. Every member of the team contributes to the overall capabilities of the team while sharing knowledge and learning from each other. This type of team can take on just about any testing task.

Each full-stack QA team member might even be on a different scrum team. Nevertheless, they can share their capabilities and knowledge across these different teams, educating and advising the teams how best to approach their testing.

Let the QA team lead the way

Quality is essential for our products and business, and many organizations underestimate the value of QA. In theory, QA should be involved in the project development lifecycle right from the start, but in practice, it doesn’t happen often enough. A full-stack QA team which grows and enables full-stack QA engineers, will help make it happen.

The road from "tester" to "full-stack QA engineer" is a long and challenging one, for individuals and managers.  But a full stack QA engineer will find that there are more career opportunities available, and they will have the opportunity to have a much greater influence on the product, which will reach the end-user at a higher level of quality than ever before.

Have your say: Are you looking at becoming a full-stack QA engineer? What do you see as a challenge to the role upgrade?

Gartner Magic Quadrant for Software Test Automation
Topics: Dev & Test