Automated vs Manual Testing for Application Maintenance

A team is preparing a routine maintenance release.

The application has received a framework update, three bug fixes and a small change to its checkout form. Before release, one engineer runs hundreds of automated tests in less time than it would take a person to manually work through the application's major screens.

Everything passes.

During a short exploratory review, however, a tester notices something the automated suite never considered: on a smaller laptop screen, a new validation message pushes the Pay button below a fixed footer, making it almost impossible to click.

Now reverse the situation.

Imagine the team has no meaningful automation. Every maintenance release requires someone to open the application, log in with several account types, create test records, place orders, verify reports and work through the same checklist by hand. The release is safe only as long as someone has enough time to repeat the process carefully—and remembers every important scenario.

Neither approach is particularly strong on its own.

Automated testing is best at repeatedly checking known expectations. Manual testing is strongest when human observation, exploration and judgment are needed to discover problems that have not yet been turned into repeatable tests.

That distinction is especially important in application maintenance, where teams make frequent changes to software that already has a large body of existing behaviour to protect.

DORA's current Test Automation guidance explicitly recommends running both automated and manual testing throughout the software-delivery process. It identifies automation as essential for fast, reliable feedback while retaining manual activities such as exploratory, usability and acceptance testing where human judgment adds value.

For Levelworks, the objective is therefore not to choose between automated and manual testing. It is to use each where it provides the strongest evidence that the application remains Tested as it changes.

Automated and manual testing answer different questions

The easiest way to understand the difference is to look at the questions each approach handles well.

Automation is excellent at asking:

Does this known behaviour still produce the expected result?

Manual exploratory testing is better at asking:

What happens if I use this changed application in ways the test suite has not anticipated?

Consider a customer-registration workflow.

Automated tests might verify:

  • valid registration succeeds;
  • invalid email addresses are rejected;
  • duplicate accounts are prevented;
  • passwords follow required rules;
  • the API returns the correct status;
  • existing login behaviour still works.

A tester exploring the same change might notice that the password requirements are confusing, the mobile keyboard hides an important field, the validation sequence feels broken or an unusual navigation path leaves the form in an inconsistent state.

Both are quality problems.

They simply require different ways of finding them.

The ISTQB definition of exploratory testing captures this difference well: tests are dynamically designed and executed using the tester's knowledge, exploration of the product and information learned from previous results.

Automation executes predefined knowledge efficiently.

Exploration creates new knowledge.

What automated testing does particularly well in maintenance

Application maintenance involves repetition.

A dependency update may require checking behaviours that worked yesterday. A bug fix can inadvertently affect a neighbouring workflow, while a refactor is successful only if externally visible behaviour remains unchanged.

Repeated verification is where automation earns its place.

Useful automated maintenance checks commonly include:

  • unit tests for calculations and business rules;
  • API contract tests;
  • authorization checks;
  • database integration tests;
  • regression tests for previous bugs;
  • smoke tests after deployment;
  • selected end-to-end tests for critical journeys.

DORA identifies manual regression testing as slow and expensive when used as the primary verification mechanism, and recommends fast, reliable automated suites integrated into the delivery pipeline so developers receive feedback close to the change.

That speed changes maintenance economics.

If every dependency update requires two days of manual regression testing, teams naturally become reluctant to update frequently.

If most established behaviour can be checked automatically, smaller maintenance changes become easier to make and verify.

This is one way Tested supports Levelworks' Current & Updated and Seamlessly Updatable App Health dimensions: updating software becomes less risky when existing behaviour can be rechecked quickly.

[Internal Link: “Regression Testing: How to Update an App Without Breaking Existing Features”]

Automation is particularly valuable for bugs you already know about

Production defects should make the automated suite smarter.

Suppose an application once allowed two identical API requests to create duplicate subscriptions.

Engineering fixes the problem.

If the scenario is deterministic and important, it should generally become an automated regression test. The test preserves the lesson so future developers do not have to remember that the defect once existed.

This creates a useful maintenance loop:

Bug discovered → defect reproduced → fix implemented → regression test added → future changes automatically recheck the condition

DORA recommends exactly this kind of evolution: when exploratory testing or production reveals a bug, teams should consider adding automated coverage so the same defect can be caught earlier in future changes.

Automation is strongest when the expected behaviour is clear and likely to need repeated verification.

[Internal Link: “Why the Same Bugs Keep Coming Back and How to Stop Them”]

Manual testing becomes most valuable when the answer is not predetermined

Manual testing is sometimes described as though it simply means a person executing test cases that could have been automated.

That is only one form of it—and usually not the highest-value form.

For maintenance work, human testing becomes particularly useful when:

  • the change has substantial visual impact;
  • user experience matters;
  • the behaviour is difficult to express as a deterministic assertion;
  • the team is investigating an unfamiliar defect;
  • several changed elements interact in unpredictable ways;
  • the application is being used on unusual devices or workflows;
  • the tester wants to explore beyond documented requirements.

The Practical Test Pyramid argues strongly for automating repetitive checks while retaining exploratory and usability testing for quality characteristics that automated tests do not observe well.

A human can notice that something feels wrong without already knowing which assertion should fail.

That is valuable.

The tester might discover that a workflow technically succeeds but now requires twice as many steps, that an error message is misleading or that two individually correct interface changes interact badly.

These are difficult discoveries to obtain from a suite that only checks predefined outcomes.

Automation can tell you that the application behaved as expected—not always that the experience is good

Consider an automated test that verifies a modal opens after the user clicks a button.

The assertion passes.

Yet the modal covers the control the user needs next, has unreadable text on a particular viewport and cannot be dismissed using the keyboard.

Technically, the expected component appeared.

From a user's perspective, the feature may still be poor.

This is why automated testing should not be interpreted as proof that every aspect of an application is correct.

Automation can verify many functional expectations extremely well. Human observation is still useful for evaluating qualities such as:

  • clarity;
  • usability;
  • visual behaviour;
  • unexpected workflow friction;
  • confusing content;
  • unusual interaction patterns.

The testing strategy should match what you are trying to learn.

Do not automate a bad test just because you can

The ability to automate a test does not automatically make automation worthwhile.

Imagine a UI test that takes forty seconds, fails unpredictably whenever animation timing changes and requires frequent updates because designers regularly adjust the page structure.

If the behaviour it verifies could be checked through a fast, stable API or component test instead, keeping the fragile UI automation provides little value.

Martin Fowler's Test Pyramid recommends having many more lower-level automated tests than broad tests driven through the user interface, partly because UI tests tend to be slower and more costly to maintain.

Before automating a maintenance check, ask:

  • Will we run this repeatedly?
  • Is the expected result deterministic?
  • Is the behaviour important?
  • Can it be tested reliably?
  • What is the lowest useful level at which it can be verified?
  • Will maintaining the test cost less than repeating the check manually?

The purpose is not maximum automation.

It is useful automation.

Manual scripted regression should shrink as automation matures

There is an important difference between manual exploration and manual repetition.

A tester deliberately exploring a newly changed workflow can be highly valuable.

A tester manually entering the same addresses, placing the same orders and checking the same calculations after every release is doing work software can often perform more consistently.

DORA notes that people are poorly suited to repetitive regression checking and that long manual test phases create slow feedback loops. Its recommendation is not to eliminate testers, but to shift human attention toward higher-value activities while automating repeatable verification.

A mature maintenance strategy should therefore gradually convert stable, repeated manual checks into automated ones.

Human effort can then move toward:

  • new functionality;
  • changed areas;
  • exploratory testing;
  • usability;
  • unusual scenarios;
  • investigation of suspicious behaviour.

That produces a better division of labour than repeatedly making people imitate automated scripts.

Test data affects both approaches

Automated versus manual testing is sometimes discussed as though the test mechanism is the only important difference.

The data used can matter just as much.

A maintenance fix may work with newly created records but fail on accounts that have existed for five years.

A migration may pass with perfectly formatted test data but fail on older records containing unexpected null values.

DORA's Test Data Management guidance recommends realistic data that represents important user journeys, edge conditions and known defects, while warning against simply copying sensitive production information into lower environments.

Both automated and manual tests should therefore exercise meaningful states.

Good test data might represent:

  • current accounts;
  • older application states;
  • edge cases;
  • different roles;
  • previously problematic records;
  • realistic volumes where relevant.

A weak scenario remains weak whether a machine or a person executes it.

Use automation earlier and human exploration around uncertainty

For most maintenance changes, an effective testing flow is layered rather than competitive.

Imagine a dependency upgrade.

First: automated feedback

Unit, integration and API tests run as soon as the change is introduced.

Obvious incompatibilities appear quickly.

Then: targeted automated regression

Tests around functionality that depends heavily on the changed dependency receive particular attention.

Then: human exploration where risk justifies it

A tester explores affected workflows, especially where visual behaviour, unusual interactions or previous experience suggests risk.

Finally: release verification

A small set of automated or targeted checks confirms that the deployed application is functioning in its actual environment.

This pattern keeps expensive human attention focused on uncertainty while machines handle predictable repetition.

DORA's model similarly places automated testing throughout the delivery pipeline while retaining manual exploration, usability and acceptance activities as part of continuous testing rather than treating testing as one final phase.

Choose based on the maintenance change

Different maintenance work calls for a different balance.

Maintenance change

Automation value

Manual testing value

Business-rule bug fix

Very high

Targeted

Dependency update

High

Targeted around affected workflows

Large UI redesign

Moderate–high

Very high

API refactor

Very high

Usually lower

Browser-specific issue

Useful once reproduced

High during investigation

Database migration

High

Targeted validation

Accessibility/UI behaviour change

Useful for repeatable checks

High for human evaluation

Previous production regression

Very high

Useful during reproduction

The table is not a rulebook.

Its purpose is to make the testing decision follow the nature of the risk.

Watch for two unhealthy extremes

“Everything must be automated”

This often creates large, expensive suites full of fragile tests.

Teams start automating low-value visual interactions because automation coverage itself has become the target.

Tests become slow, failures become noisy and engineering spends significant time repairing the test suite rather than learning about the product.

DORA explicitly recommends continuously reviewing and improving automated suites, including pruning tests when a smaller reliable suite is more trustworthy than hundreds of expensive or unreliable tests.

“We test everything manually before release”

This may work while an application is small and releases are rare.

As the product grows, however, the amount of behaviour that needs rechecking increases while the available release time does not.

Eventually testing becomes selective—but implicitly. People skip steps because there is not enough time.

That is much less safe than deliberately deciding which repetitive checks should be automated and where human attention adds more value.

Measure confidence, not test counts

Having 8,000 automated tests is not automatically better than having 800.

Likewise, spending five days on manual QA does not prove that a release was thoroughly tested.

Better questions include:

  • Do failures in the automated suite usually indicate real problems?
  • How quickly do developers receive feedback?
  • Are important user journeys protected?
  • Do production bugs reveal repeated testing gaps?
  • Are flaky tests routinely ignored?
  • Is manual exploration finding useful issues?
  • Are testers spending most of their time discovering problems or repeating known scripts?
  • Does the team feel confident enough to maintain the application regularly?

Google's code-review guidance includes automated tests as one dimension of code quality, alongside functionality, design and complexity rather than treating raw test quantity as the objective. Google Engineering Practices

Testing should provide evidence for decisions.

Counting tests is only useful when that count tells you something meaningful about that evidence.

A practical decision framework

For any maintenance test, ask three questions.

1. Is the expected result already known?

If yes, automation may be appropriate.

If you are still trying to understand the application's behaviour, human exploration may produce more information first.

2. Will this check need to be repeated?

The more frequently a deterministic check needs to run, the stronger the case for automation.

A scenario executed after every release is a much better candidate than a one-off investigation.

3. Does correctness require human judgment?

If the question is whether total = 125.00, software can evaluate it easily.

If the question is whether a redesigned workflow is confusing or whether an interface remains usable under unusual conditions, human observation has much more value.

Those three questions usually produce a more useful testing decision than asking whether automation or manual testing is “better.”

Application maintenance needs both—but not in equal amounts

For a mature application, the bulk of predictable regression checking should generally become automated.

That gives teams rapid feedback when they patch dependencies, fix bugs, refactor code and make routine updates.

Human testing should then concentrate where people are strongest: exploration, usability, unusual combinations, newly changed behaviour and situations where the team does not yet know exactly what can go wrong.

[Internal Link: “CI/CD for App Maintenance: How Automated Releases Reduce Risk”]

For Levelworks, this balance is central to Tested App Health. It also affects Seamlessly Updatable because maintenance becomes easier when a reliable automated safety net can verify routine changes without eliminating the human investigation needed for less predictable risk.

The right question is therefore not:

“Should we automate our testing or keep testing manually?”

It is:

“Which checks are valuable because a machine can repeat them perfectly, and where do we still need a person to notice something we did not know to ask about?”

A strong maintenance strategy makes machines responsible for repetition and keeps human attention available for discovery.

‍

Continue Reading