Based on my work on Beautiful Delivery with autonomous cross-functional teams (for more details, see Use Beautiful Delivery to Speed Up Your Digital Transformation), I have set out to define the different roles in a bit more detail. This time I will focus on what I call the Tester.
The main responsibility of the Tester is to make sure that the end result has high quality. This means proactively work with everyone in the team to make sure that all work happens with quality. This is in contrast to the traditional role of the Tester, which was to find bugs. Now, the Tester should instead prevent them from happening in the first place. Therefore, the Tester works together with the other roles in finding ways to ensure high quality.
Like creating user stories together with the product owner and tasks together with the agile coach that are easier to implement and validate. It could be creating higher quality service interfaces and definitions of master data as well as defining a secure infrastructure and implementation together with the architect. It could also be improving the development practices together with the DevOper to ensure code with fewer possibilities for bugs, like a simple structure, clear naming, etc. It could even be working together with the designer to make sure that the user experience and the user interface is designed to minimize risks for problems.
Just like all the other roles in an autonomous team, the Tester has to be hands-on, so another task is to implement the automatic tests for the user interface, and integrate those tests into the continuous delivery pipeline. To achieve high quality, there is simply no way to do it manually, but instead as much as possible of the testing has to be automated. This is critical for the key user scenarios, like searching for products, create an order, and make a purchase. So there has to be automated regression tests for these scenarios, but the ambition is to automate as much as possible. This means that the Tester needs to know programming, which is also in contrast to the traditional role of the Tester. Common tools are test automation frameworks, like Selenium and Appium.
Despite test automation, it’s usually impossible to reach 100% coverage of all (edge) cases, and therefore the Tester also spend some time on manual, usually exploratory, testing. But even that is not sufficient, so the Tester makes sure that any issues found by real users are also captured, fixed, and learned from. The real users can be anyone using the app, from early adopters such as beta testers to all the normal users. Typical tools used for this is ways to capture crash logs and other analytics, as well as allowing users to enter feedback directly.
Finally, this new proactive role of the Tester, will make it a more attractive job, and someone that the other members of the team will appreciate more. It’s never fun to work with someone that only finds problems.