For years, mobile development teams have lacked the necessary tools and frameworks to make mobile testing an accelerant in the software development lifecycle.This has manifested in the inability for conventional mobile testing strategies to shift testing left. Web app development has been focusing on shifting left and compressing development cycle times with some impressive results.
- Faster release cycles because bugs caught earlier in the cycle are fixed faster
- Easy identification of what code changes caused a test failure
- The quality of the builds that go to your QA phase are far higher
- Fewer late cycle delays due to better testing on PRs and main branches
- Confidence that critical flows are tested constantly with test prioritization
Why are we not seeing the same gains in mobile app development. We believe the biggest factor is that testing stubbornly stays at the end. Further, this is not just a tool and automation problem, this is a priority and process problem. To this end, we believe in three core principles. A mindset shift from engineering teams and leadership is also necessary. We believe in three core principles that will unlock a continuous testing process for mobile development teams.
- Testing needs to be a shared responsibility
- Testing needs to be efficient
- Testing needs be transparent
Testing needs to be a shared responsibility
In too many organizations, there is a constant struggle between engineers and QA over who is responsible for creating and maintaining tests and catching bugs. Leaving all testing responsibilities to QA means feedback cycles will be long, prone to human error, and slower at scale. The reality is testing is a shared responsibility between engineers and developers. When you can efficiently test at the PR level, when a test fails, the developer knows immediately that their change created a bug. QA should not have to triage for hours and then assign a bug back to the developer that introduced it. The best time to catch a bug and create or update a test is during development, not after.
Consequently, some testing needs to be shifted left in the development cycle, which naturally becomes the engineers’ responsibility. By sharing the testing responsibility, engineers can drastically improve the quality of the builds that are sent to QA, who can then test edge cases and various user states.
Testing needs to be efficient
In a recent report, the number one thing engineers, both ICs and leadership, wish they could spend less time on was testing. This problem exists for three major reasons:
- Creating and maintaining tests is time consuming
- Running the whole suite every time slows down development
- Test creation and maintenance is faster as you build, not after
To implement an efficient testing process, technology is not enough. Development teams need to start implementing a testing strategy by breaking test suites down into different components. This way critical flows can be tested frequently and other tests can be run nightly or before releases. With this strategy, teams can make testing scalable and efficient while also ensuring test coverage across their application.
Testing needs be transparent
We believe that, like other parts of the development process, testing needs to be more visible throughout the team. Tools like Github, GitLab, BitBucket have displayed the power of bringing more transparency to product development. When testing is done earlier, there is more clarity over what code changes led to a failed test. By making it easy to share test results, teams are better able to work together to find and solve issues in their code early and often. This will give them more confidence as they ship new features and products.
The future of mobile testing is continuous. One where mobile development teams do not have to choose speed or quality. The first step to shift testing left is to challenge one's mindset. We believe it all starts with adhering to the principles of efficiency, transparency and sharing responsibility, teams are set up to succeed for their continuous mobile testing strategy.