Have you ever looked back at the code you or your team wrote for your automated tests? I don't mean reviewing them a day or even a week after building the test—I mean digging back into the archives and checking out something someone did months or even years ago. If you're like most developers and testers, your reaction will fall somewhere between "What was I possibly thinking when I wrote that code?" and "I don't even know if this is working or even in use right now."
Developers and testers have plenty of reasons to go back to automated tests they haven't looked at in seemingly forever. Sometimes you want to upgrade the underlying libraries or architecture of the app and need to clean things up to modern standards. Other times there's a change that forces you to modify your testing strategy. Whatever the reason, remembering what you did and why can be rough and time-consuming, especially if you haven't gone back in a long while.
Why most teams let their test automation decay over time
These days, most software development shops are under enormous pressure to implement things as fast as possible. Unfortunately, this rapid pace often leads to team members taking frequent shortcuts with their test automation. When the day comes to touch those forgotten areas, the time spent to get back to speed overshadows the time they would have saved if they hadn't taken the shortcuts in the first place. Almost any tester who's done work with test automation has experienced this at some point in their career.
I've seen it repeatedly across multiple testing teams, yet most organizations let these bad habits slide even when the team struggles to move forward. Since there's a lack of immediate consequences, no one bothers to fix the problem until it becomes a complete showstopper. Only when the test suite breaks down is when organizations begin to pay attention to the long-term health of their efforts. By then, your team will have more problems on their hands than just a bad test suite.
The only long-term solution for a stable test automation suite is maintenance
The cure to avoid your testing work slowing to a crawl and affecting the entire team is to find the time to maintain your tests at frequent intervals.
Think of your test automation as a car—if you fail to provide essential maintenance like oil changes or brake inspections, the vehicle will eventually stop working. The same can happen with your test automation strategy. A few flaky tests begin appearing, and the test suite begins taking too long to complete. Issues continue to pile up, and before you know it, the team considers shutting down all test automation because it's hindering progress instead of helping.
With consistent maintenance to your automated test suite, you and your team can trim useless tests, improve existing ones, and keep your entire software development workflow running smoothly. For any rapidly-evolving software product, maintenance of the automated test suite is the only way to keep everything running well for the long haul. There's no way around it and no shortcuts to keep things stable.
Admittedly, having the space and ability for frequent maintenance is easier said than done. As mentioned above, most companies want to move quickly and deploy new features to their customers as soon as the team can crank them out. Automated testing is one of the areas that gets neglected when a time crunch happens. Most companies often won't have the capacity to manage their test suite, let alone fix and clean things up.
Establishing a solid test automation strategy is crucial to the success of any organization trying to get their products out the door efficiently with minimal problems. A vital part of that strategy is ensuring the tests will work smoothly with minimal issues. If you're working on a team that doesn't take the time to provide frequent maintenance to your automated test suite, here are a few reasons to consider making it part of your regular schedule.
Make it easy to onboard new team members
In an effort to release new projects and updates quickly, companies will eventually hire new team members. One of the most significant pain points with rapidly-growing companies and startups is getting new employees up to speed with the work they need to do. For automation testers, the time and resources required for a new team member to grasp their work scales up with the size of the automated test suite. When you have lots of tests or code that's disorganized, inefficient, or useless, it will make that ramp-up time much longer and takes away the time of the rest of the team.
For example, a test suite might have some tests that don't serve a purpose anymore or some slow tests that need optimization. Senior members of the testing team might know those areas that need some cleaning up, but new team members won't because they lack the necessary context about the overall product early in their tenure. Sure, they might have documentation or look at the code repository's history to find that context, but let's be honest—most developers and testers aren't the best at leaving proper documentation or commit messages for their work.
Now let's imagine the same team has a well-established maintenance schedule for their test automation. The team will take care of removing those useless test cases from the codebase and spend time optimizing slow tests. When new testers come in, they won't have to spend time dealing with useless problems. It drastically reduces the friction of onboarding new testers and eliminates confusion, making them productive team members quicker. It also lessens the reliance on existing testers, giving them more time to complete their tasks. It's a win for everyone.
To help future team members become productive quicker, the current team must take the time needed to perform maintenance on their test suite. Remove old code and automated tests and spend time refactoring weak areas when time permits. This step is especially important and most effective after wrapping up a sprint with a tight deadline since it's when most poorly-written code slips in and is left unchecked.
Don't let your test execution speed become a boiling frog
You've likely heard the fable of the boiling frog. As the legend goes, if you want to boil a frog, you can't throw it directly into a pot of hot water because it'll notice it's in danger and will immediately jump out. However, if you place it in cool, comfortable water, the frog will remain inside. As you gradually heat the pot, the frog will stay in place, unaware of the rising temperature, until it's too late to escape.
The point of this story is that most of us tend to ignore the gradual changes that occur around us until it's too late to avoid any problems caused by them. When it comes to test automation, that's often what happens with the execution speed of our automated tests. Most automated test suites start speedy, running in mere seconds. As the test suite grows, those test execution times begin to increase. Then one day, someone on the team complains that the tests take too long to complete.
Like the boiling frog, you didn't realize the speed of running the automated tests went down slowly but steadily over time. Only when someone complained about it is when you realize the test execution time went from seconds to minutes. It becomes a pain to fix the issue with all the work that has transpired over weeks or months. Your company will have to throw plenty of time and resources into the matter—time and resources they won't likely have around for this.
With consistent and frequent maintenance, your testing times shouldn't become an issue. Of course, any automated test suite will slow down as more test cases get added. But maintenance will reduce the likelihood of poor code sneaking in unnoticed. As you work on your tests, keep an eye on test speed as time rolls on. Most continuous integration systems keep this information so you can track execution times over time, and many testing libraries can print out your slowest test cases. You can catch slowness with these tools under your belt before it becomes a more significant issue.
Elevate trust and reliability in your tests
One of the main reasons to implement a test automation strategy is to eliminate as many points of failure as possible. For most modern software projects, testers and developers can work together to implement different types of testing. Unit tests, end-to-end tests, performance tests, and other ways to automate testing on a project serve different purposes. However, you also have to be careful with what you're introducing to your overall testing strategy and how it interacts with the system in its entirety.
The more tests you have, the more likely you're adding potential points of failure that will affect the team down the road. A common situation that creates these issues in many organizations happens when setting up end-to-end tests. These tests can quickly become unstable and flaky due to all the activity performed throughout their execution. It's not uncommon for an end-to-end test suite to reach a point where your tests hurt the team's workflow instead of helping.
While dealing with flaky tests isn't fun, the real damage occurs when the rest of the team begins to lose trust in the test automation strategy. If left unchecked, these unreliable, slow, and unstable automated tests will cause your organization to stop caring about them. I've seen plenty of teams abandon their testing efforts because they didn't feel confident that it was helping them improve the quality of their projects.
Nothing will destroy your automation strategy quicker than unreliability and inconsistency when it comes to automated test execution. The only way to have a trustworthy automated test suite is by proper care and consistently providing maintenance over time. Fixing time-consuming test runs and overall flakiness will help reliability in the long run. In turn, it builds trust in your work on test automation and your project's quality for years to come.
Test automation isn't "set it and forget it", especially for rapidly-evolving software projects. Over time, you'll find yourself having to dig back into tests that you or someone else built seemingly forever ago. If someone hasn't taken the time to do any maintenance during that time, you're likely going to run into countless issues. Just like a car needs maintenance to keep running smoothly, your automated test suite also needs regular and timely care to perform as best as possible.
An inefficient test automation strategy can hinder your organization's process in multiple ways. Onboarding new employees becomes a difficult task since they'll need to spend more time getting up to speed with the current work. Slow test suites will hold back deployments and prevent the team from releasing new features quickly. Eventually, trust erodes over time for the automated tests and the overall quality of the product.
If it takes too long to commit small but consistent actions to address these problems early, it's unlikely your team will have the time and resources to deal with them effectively later when the issue is much larger. The only solution to keep your test automation performing at its best is to fix problems as soon as possible. Frequent maintenance will help you avoid any long-term problems, and doing a little at a time will go a long, long way for your entire organization.
Does your team spend enough time maintaining your automated tests? I'd love to hear how other organizations handle this—let me know by leaving a comment below!