Let’s just assume for a second that you have the luxury of planning and building software in a way so the result isn’t just a summary of rushed deadlines, but rather a product that you really want to succeed and that you care about. In this case, you would want it to deliver meaningful value, right? You’d want your software to be the best version of itself that it could possibly be. For that to happen, you’d obviously need lots of time to build, test, polish and repeat. I would say that right about now is when reality usually comes in play to slap you across the face with a reality check – you don’t have unlimited time. So, in real life you have to make cuts somewhere, right?
it’s not too uncommon that the testing phase ends up on the chopping block. But cutting down time or resources to test and validate the product to meet deadlines is counterintuitive on so many levels, it’s not even funny. All of the well-known benefits of testing like saving maintenance costs, a smoother user experience and overall greater quality lose their full potential if you neglect software testing – especially since testing is a component that greatly benefits from high frequency. Remember: the more you include testing in your development cycle, the bigger the impact of these core benefits. And by the way, this is a great argument for including practices from incremental software development if you didn’t already. You can find more on that here.
But these are just the basic benefits. How can software testing be beneficial beyond that? If you’re serious about investing into testing and going beyond bug reporting, then it can actually deliver great value for you and your approach to software development.
A sound approach to get the most out of testing is trying out multiple ways to adapt different perspectives about approaching software. A first step to try is talking to your colleagues about creative decisions you make during the day. There’s great value in holding discussions about how and why you engage with software the way you do. You can take this even further by trying out Pair Programming, a practice where one programmer is coding and the other is serving as a second pair of eyes.
Another approach to consider is extending your testing phases by doing more user oriented tests. While being more expensive and time consuming, your insight about user behaviour suddenly has much more room to grow. A relatively easy way to get this started is dogfooding your own software, if applicable. We recently talked about dogfooding and how we use our own app here and here if you wish to read more on that. There certainly are lots of tests to try out, but for now let’s just have a quick look at usability testing and user acceptance testing (UAT).
These tests generally try to measure how well and how easy a user can achieve a certain goal in a certain context. While often mistaken for UX or ease of use, usability is rather one part of the user experience (UX). Without getting too deep into it, usability looks at how pleasant and easy your system is to use while translating the user’s input into the user’s desired output. You can find further reading material here and here.
The basic idea of a UAT is like a final exam. Before you roll your eyes, this time it’s actually a good thing. Here, users decide whether your product successfully delivers the expected result or not. In contrast to usability testing, UAT is generally done in the final phases of a project. However, if you’re going pedal-to-the floor with extreme programming, performing a UAT at the end of user stories certainly makes sense too. For criteria examples and further insights into how this process looks like, have a look here and here.
Talking with your testers often gives you great insights into how people not that deep into the process approach software. Plus, it might shine light on perspectives you might have completely ignored up until then. Discussing problems and holding conversations with your testers not only makes them feel appreciated and valued, it also enables you to dig deeper into how you can build software that connects with users.