[KongchangAI]
· 4 min read· 2,191 words

Stop Automating Everything: Modern Software Testing Requires Balanced Quality Engineering

Stop Automating Everything: Modern Software Testing Requires Balanced Quality Engineering

More automation ≠ better quality: build reliable software with layered API, exploratory, and AI-assisted testing.

The core argument: more automated tests don't automatically equal higher software quality — passing tests don't guarantee a good user experience. The article advocates shifting from "test automation" to "quality engineering," combining unit tests, API tests, UI automation, exploratory testing, UX/accessibility checks, and AI-assisted testing in layers, each answering different quality questions. Key recommendations include prioritizing automation for high-risk, predictable scenarios; testing business logic directly via API rather than through the UI; using exploratory testing to find defects predefined cases miss; and treating AI assistance carefully — useful for accelerating test generation and failure diagnosis, but human accountability must remain for final quality judgments.

More automated tests do not equal better software quality. This article explores how to combine automated testing, API testing, exploratory testing, and AI-assisted quality engineering to build truly reliable software.

Software teams face constant pressure: ship features faster, reduce regression defects, and deliver smooth user experiences. Automated testing seems like the obvious answer — more automation means faster releases, broader coverage, and less repetitive work. But here's the problem: more automation doesn't automatically translate into higher software quality.

An application can pass its entire regression test suite and still leave users confused — through disorienting navigation, inaccessible controls, duplicate transaction submissions, or unexpected behavior in real-world scenarios. The issue isn't automation itself; it's treating automation as the entirety of a testing strategy.

Stop Automating Everything

When Tests Pass But the Product Still Falls Short

Imagine an e-commerce application preparing for a major release. The automated checkout tests confirm that users can add items to a cart, complete payment, and receive an order confirmation. The pipeline is green, and the release is approved.

Yet mobile users encounter a cryptic payment error. Another user accidentally submits a payment twice because the UI responds too slowly. A third user can't complete checkout using only a keyboard. The automated suite may never have caught any of these issues — because it only validated the expected workflow.

This reveals an important distinction: functional correctness is just one dimension of software quality. A reliable product must also be usable, accessible, secure, resilient, and predictable under unexpected conditions. The goal shouldn't be to automate every possible interaction, but to find the most valuable testing approach for each category of risk.

From Test Automation to Quality Engineering

Traditional testing often focuses on finding defects after development. Quality Engineering (QE) takes a broader view, embedding quality checks throughout the software development lifecycle.

Rather than relying entirely on pre-release end-to-end tests, teams can distribute verification across multiple layers:

  • Unit tests: Validate individual functions and components in isolation.
  • API tests: Verify business rules, service responses, permissions, and data contracts.
  • UI automation: Check critical user journeys and prevent regressions.
  • Exploratory testing: Investigate unexpected behaviors and scenarios that predefined tests might miss.
  • UX and accessibility testing: Evaluate whether people can actually use the product effectively.
  • AI-assisted testing: Accelerate test creation, failure analysis, and maintenance — while engineers remain accountable for decisions.

Each layer answers a different question: unit tests ask whether a small piece of logic works, API tests verify that services behave correctly, UI tests confirm that important journeys run end-to-end, and human testers judge whether the overall experience makes sense. Together, these approaches paint a more complete picture of product quality.

Quality Engineering (QE) is an evolution from traditional QA (Quality Assurance). Traditional QA typically acts as a "gatekeeper" at the end of development, catching defects before release. Quality Engineering emphasizes shifting quality activities left — embedding testing, verification, and risk assessment earlier into requirements analysis, architectural design, and development. The core rationale: the later a defect is found, the more expensive it is to fix. Research suggests that fixing a defect in production can cost dozens of times more than fixing it during development. Quality engineers don't just write tests — they participate in requirements reviews, design observability solutions, establish testability standards, and share responsibility for product quality with development teams. This transforms "quality" from the responsibility of a separate team into an inherent property of the entire development process.

Only Automate the Tests That Deliver the Most Value

Not every test case deserves the same level of automation investment. The best candidates are scenarios that are repeatable, deterministic, run frequently, and tied to significant business risk.

Take a banking application: authentication, account access, transaction validation, and permission checks are strong automation candidates because failures in these areas affect security, customer trust, and financial operations. By contrast, evaluating whether a redesigned dashboard is "intuitive" typically requires human judgment and observation.

A pragmatic automation strategy starts with three questions:

  1. How frequently does this scenario need to be tested?
  2. What is the business impact if this scenario fails?
  3. Can the expected outcome be reliably defined and verified?

If a scenario is high-risk, repetitive, and predictable, automation is likely to deliver significant value. If it involves subjective judgment, unfamiliar workflows, or unpredictable interactions, exploratory testing may be more effective. The goal is meaningful risk coverage — not arbitrarily targeting "100% automation."

Test Business Logic Through APIs, Not the UI

One common source of unnecessary complexity is testing every business rule through the user interface.

Suppose an application exposes an order creation API. The team doesn't need to navigate from the product page through the cart and complete the entire checkout flow every time they want to verify that an order is created correctly. Core business behavior can be tested directly through the API.

Using Playwright's API testing capabilities as an example:

const response = await request.post("/api/orders", {
  data: {
    productId: 123,
    quantity: 2
  }
});

expect(response.status()).toBe(201);

const body = await response.json();

expect(body.quantity).toBe(2);
expect(body.status).toBe("created");

The actual assertions should reflect the application's API contract. The benefit is clearer separation of concerns: API tests validate business rules and service behavior, while UI tests focus on whether users can complete important journeys. This reduces redundant test work and keeps end-to-end suites focused on what actually matters at the interface level.

Why Exploratory Testing Still Matters

Automation excels at repeating known checks. Exploratory testing helps discover problems that no one thought to write into a test case.

A tester investigating an online payment flow might deliberately try: submitting the payment form twice in rapid succession, navigating backward mid-checkout, continuing after a session expires, using the flow on a narrow mobile screen, dropping the network connection mid-transaction, or entering unexpected but valid value combinations.

These experiments can surface defects that standard "happy path" tests will never reach. Submitting payment twice might create duplicate orders — an application might pass all normal checkout tests yet fail badly under rapid repeated interactions.

Exploratory testing isn't random clicking. It's structured investigation guided by product risk, user behavior, system boundaries, and past testing observations. It complements automation: once a reproducible defect is found, engineers can add a regression test to prevent recurrence.

Exploratory Testing was introduced by testing pioneer Cem Kaner in the 1980s. Its essence is performing test design and test execution simultaneously — testers learn as they explore, adjusting their direction in real time based on what they discover. Unlike scripted testing (where steps are written in advance and executed one by one), exploratory testing relies on the tester's understanding of the product, user behavior, and system risk to drive decisions. In practice, "Session-Based Test Management" is commonly used to organize exploratory activities: each exploration session is bounded by a fixed time window (e.g., 90 minutes), guided by a clear test charter describing the investigation goal, with findings, coverage, and issues documented afterward. This structure keeps exploratory testing both flexible and trackable, preventing it from devolving into "random clicking."

A Green Pipeline Doesn't Mean a Good Experience

Automated tests generally evaluate predefined expectations. They can't independently judge whether every design decision is easy to understand, or whether a workflow feels natural to users.

A button may technically work yet be impossible to find. An error message may appear exactly as expected yet fail to tell the customer how to recover. A form may submit successfully yet be completely inaccessible to someone using assistive technology. These issues require a broader definition of quality.

Teams should incorporate usability reviews, accessibility checks, representative user journeys, and device-specific validation into their testing strategy. The right combination depends on the product, the audience, and the consequences of failure. For customer-facing products, these checks are especially important — even technically correct behavior can cause friction, abandonment, and loss of trust.

Use AI to Accelerate Testing, Not to Replace Engineering Judgment

AI-assisted testing opens new opportunities to improve productivity. Tools can help generate test scenarios, summarize execution traces, analyze screenshots, identify suspicious patterns in logs, and suggest probable causes of failures.

For example, when a Playwright test fails, an AI-assisted workflow can examine the trace, DOM snapshot, console output, network errors, and historical results, then hypothesize whether the failure relates to the application, test code, environment, or test data. But this diagnosis remains a hypothesis until an engineer validates it.

AI-generated tests may contain incorrect assumptions, overlook important business rules, or duplicate existing coverage without addressing new risks. Similarly, automatically modifying tests to make a failing pipeline pass can mask real application defects. The responsible approach is to use AI to accelerate investigation while preserving deterministic assertions, code reviews, and human accountability. The core principle is simple: use AI to reduce repetitive work, but don't hand off the final definition of "acceptable quality" to an unverified model.

Measure Quality, Not Test Count

A constantly growing test suite creates the illusion of progress. Teams may add hundreds of automated tests while defect escapes, maintenance overhead, and release delays continue to climb.

Better metrics reveal whether testing is actually improving outcomes:

  • Defect escape rate: How many defects slipped past early testing stages?
  • Flaky test rate: How often do tests fail intermittently without a consistent underlying defect?
  • Execution time: How long does the testing process take to provide actionable feedback?
  • Maintenance cost: How much engineering time goes into fixing and updating tests?
  • Defect detection: Which testing approaches are finding unique, meaningful defects?
  • Investigation time: How long does it take to identify the cause of a failure?

These metrics should be interpreted together. For example, shorter execution time is only valuable if the team is still catching important defects. A low flaky test rate is useful, but it doesn't prove the application is defect-free. Teams can start by measuring a fixed set of important workflows, comparing the contribution of different testing approaches, and then optimizing their strategy accordingly.

Flaky tests are a particularly concerning problem in automated test suites. They produce inconsistent results — passing sometimes and failing others — without any change to the code. Common causes include: async operations that aren't properly awaited, shared state pollution between tests, network instability from external service dependencies, and time- or timezone-sensitive assertions. High flaky test rates seriously erode team trust in the test suite. When engineers habitually "re-run to see" without investigating root causes, the suite loses its value as a quality signal. Google has publicly shared internal data showing that even a 1.1% flaky test rate causes engineers to start ignoring test failures. Including flaky test rate as a quality metric — and regularly cleaning up or quarantining flaky tests — is essential work for maintaining pipeline credibility.

Integrating Balanced Testing into CI/CD

A balanced quality engineering model fits naturally into continuous integration and continuous delivery pipelines. A typical workflow might look like:

  1. Run unit tests to validate isolated logic.
  2. Execute API and integration tests to verify business behavior and service interactions.
  3. Run focused UI smoke tests on critical user journeys.
  4. Execute broader regression suites at appropriate stages.
  5. Use AI-assisted analysis to help investigate failures.
  6. Conduct exploratory, usability, and accessibility testing based on product risk.
  7. Apply clear quality gates before release.

Not every test needs to run at every stage. Fast, deterministic checks provide early feedback, while broader regression and exploratory activities run when they deliver the most value. Automation should also be treated like production-grade code — clear assertions, reliable synchronization, maintainable test architecture, code reviews, and regular cleanup all help teams continue trusting their results.

For example, waiting for actual application state is generally more reliable than inserting fixed delays:

await expect(
  page.locator('[data-testid="order-confirmation"]')
).toBeVisible();

The test waits for the expected condition rather than assuming a fixed number of seconds will be sufficient.

Building a Balanced Quality Engineering Strategy

A successful strategy starts with the product's risk profile, not a preferred tool or framework. Teams should identify critical user journeys, map the business rules behind them, and determine where automation, API testing, human investigation, and AI assistance provide the most value.

The most useful strategies evolve as the product changes: new incidents should feed back into regression coverage, recurring maintenance issues should trigger test suite improvements, and production feedback should influence future testing priorities.

Conclusion: The Goal Is Better Software, Not More Automation

Automated testing remains essential in modern software delivery — but it works best as part of a broader quality engineering practice.

API testing provides efficient business rule validation. UI automation protects critical user journeys. Exploratory testing uncovers unexpected behavior. UX and accessibility checks cover dimensions that functional assertions can't fully capture. AI-assisted workflows accelerate repetitive tasks and failure investigation — provided engineers validate their suggestions.

The right balance depends on the product, its risks, and the needs of its users. The measure of a successful testing strategy isn't how much of the application has been automated, but how effectively the team can identify meaningful defects, provide reliable feedback, and protect the experience of the people who use the software.

#quality engineering#test automation#exploratory testing#API testing#AI-assisted testing#software quality#CI/CD testing#flaky tests#accessibility testing#Playwright
Share:

Related articles