Fixing bugs is the bane of many a software developer's existence. Not only can it be frustrating and time-consuming but, the further along in the development process that bugs are discovered, the higher the cost to fix.
Fixing software bugs when the code is fresh on developers' minds can be much more efficient and less time consuming than having to sift through 1000s of lines of complex production code to find and fix errors. The Cost of Poor Software Quality in the US: A 2020 Report estimated that companies would spend $607 billion in the US alone during 2020 up from $500 billion in 2018.
In addition to the enormous monetary costs associated with fixing bugs, The 2021 State of Software Code Report from Rollbar uncovered some interesting statistics about the psychological effects of bug fixing on developers. In the survey of over 950 developers , more than two-thirds of developers said they would rather do an unpleasant activity such as paying bills (26%), visiting the dentist (21%) or visiting with in-laws (20%) than fix bugs.
Perhaps even more revealing are the numbers about how time spent fixing software bugs directly affect developer's personal lives with 37% saying they would be able to spend more time with their family, 33% saying they would exercise more and 31% saying they would sleep better at night if they didn't have to spend so much time on fixing bugs.
At NearForm we are dedicated to producing the highest quality software in the shortest amount of time. For this reason, we advocate and use agile software testing in our projects to speed up time-to-market and reduce costs.
Imagine a world where testing the quality of the product is not an integral part of the process. What would the development look like and how would it affect the end-user?
Let’s suppose a company in the e-commerce space comes to the development team with a product and requirements. These eventually get fleshed out into user stories with the various user journeys through the system.
A developer creates the unit tests, codes the user stories and then the code goes to production. Everything is great…until the integration with the reporting tool breaks, making it impossible for the business to monitor the sale of items.
In this hypothetical case, there are a variety of ways this could impact the system, for example:
This issue might not get spotted straight away, and it’s likely to be something that the client ultimately picks up and escalates.
Once alerted to the issue the development team needs to work to resolve this but the resolution will likely take time as they will have to stop their current tranche of work to go back to older code.
In addition to the time it takes for the team to get back up to speed with this older code, they then have to hope that any changes they make retrospectively to fix things don’t create additional issues or negatively impact the system.
In this example, a simple unexpected user action has had an impact on both the client’s finances and reputation. While this is a very specific use case, the fact remains that by not specifically taking testing into consideration, the possibility for errors to enter the system increases and a greater amount of time then needs to ultimately be spent to rectify the issues.
Take the e-commerce example into consideration again - if an agile software tester had worked alongside the development team from the conception of the project, the unusual user interaction could have been picked up before the site was produced.
Not only would this have mitigated financial and reputational issues, but it would also have saved significant amounts of time.
Catching errors in the development cycle before deployment is just one valuable function of agile software testers. Testers can have a direct positive impact on the entire development lifecycle. One of the main areas where value can be added is in the process that a team uses. Whether the team prefers Scrum, Kanban or another methodology, there are always improvements that can be made.
A test engineer can also provide value by developing and championing both functional and end-to-end automated test suites, which, when written well, can provide a useful mechanism to catch regressions at an appropriate stage of the software development life cycle.
These automated test suites should be held to the same high standards as the production code - experienced testers will write these with care and diligence to ensure that they operate at maximum efficiency without notably increasing maintenance costs.
Another such area where agile software testing can also add tremendous value is that of a project migration. Due to the complex nature a system might have, when it is being rewritten, the development team might decide to break the system down into smaller pieces to make it manageable.
Having a tester create functional and end-to-end automated test suites will enable the development team to be confident in the changes they make to the entire system as a whole and not just the individual components. Building on this, if a tester sits across multiple development teams they can notice issues at a higher level than may be obvious to the individual development teams.
To help make sure you deliver a quality product, while also saving time and maximising resource efficiency, it’s important to have a skilled test resource integrated into the agile process.
The tester allows the developers to build quality products by ensuring that the code they develop meets the clients' requirements. They are able to do this because:
The testing is crucial to the outcome of a final product, and it has to be right. To ensure that testing meets the requirements of a project a skilled and experienced test engineer will write a test plan that provides clarity and direction for the team. This ensures that the testing undertaken rigorously interrogates the system and meets client requirements.
Testing is a skilled discipline and it takes a lot of effort to be successful, which is why having a dedicated team member to help drive this is of a huge benefit by ensuring edge cases are dealt with, collaborating with developers to understand the system more and providing a useful feedback mechanism.
In addition, an agile software tester can help improve all aspects of an agile project and enable the team to have confidence in the work they are developing. Using the testers' experience, they are able to weigh up the potential ramifications that a change may have and relay this back to the development team; therefore potentially reducing the need for a large scale regression cycle and delivering more atomic parts of the system quicker.
In summary, testers are a vital part of any agile team. They can inform the team of the best way to incorporate testing within a project, add value to the development process by reducing feedback loops, and ensure the development stays true to the clients' requirements. They can also help those running the project make hard decisions, reduce risk and deliver a better product for the client.
So if you’re planning a project and you want to create a high-quality end product while saving on time and resources, make sure you have an agile software tester on your team! They’re worth their weight in gold.