Quality Engineering

Quality engineering (QE) is a way of working in which quality is designed and built into a product and its delivery, instead of being checked mainly at the end by a separate test team. The team makes the system easy to test, automates the checks that must run on every change, and makes the running system show what it is doing. Testing does not disappear: it starts earlier and continues after release.

An example: a team adds "split the bill" to a food-ordering app. Traditionally, testers get the finished build and find a rounding defect days before release. With quality engineering, the rounding rule becomes acceptance criteria with examples in refinement, its unit and API tests run on every commit, and a log event shows any failed split payment in production. QE is an industry term that the ISTQB Foundation syllabus does not define, so its meaning varies between companies.

Why it matters

When quality is checked only at the end, feedback arrives late: a misunderstanding from week one is found in week four, after more work was built on it. Teams that release often, as in the lessons on DevOps and continuous delivery, cannot wait for a manual test phase each time, and some failures appear only in production, where users find them first if nobody is watching.

For you as a tester, effort moves from re-running scripted checks by hand to risk, test design, testability, automation and production signals. Success is not how many defects you found at the end, but how few escape and how fast the team learns when one does.

Traditional QA and quality engineering

In many organisations "QA" grew up as a separate team that tests a finished build before release; as the lesson on QA and QC explained, most of that work is quality control. Quality engineering keeps that work but changes when it happens and who takes part, and it treats quality as an engineering property that is designed in, like performance or security. Side by side:

Traditional QA tests a finished build at the end; quality engineering works on quality from refinement to production, with the whole team and feedback minutes after each change.

Traditional QA

A separate team tests a finished build before release

  1. 1Develop
  2. 2Hand over the build
  3. 3Test
  4. 4Report defects
  5. 5Release
When:
After development is “done”
Who:
A separate test team
Main output:
Bug reports and test execution reports
Feedback:
Days or weeks after the code was written
Guiding question:
“Did we find the defects?”

Quality engineering

The whole team builds quality in, from refinement to production

  1. 1Refine: testability and risk
  2. 2Build with automated checks
  3. 3Pipeline on every change
  4. 4Release
  5. 5Observe in production

Repeats: Back to step 1

When:
From refinement to production
Who:
The whole team, with quality engineers enabling and coaching
Main output:
Automated checks in the pipeline, testable designs, production signals, plus bug reports
Feedback:
Minutes after each change, and again from production
Guiding question:
“How do we make defects hard to introduce and quick to detect?”

Bug reports and exploratory testing stay in both; what changes is when quality work happens and who takes part.

  • When: after development is "done" (traditional QA), versus from refinement to production (quality engineering).
  • Who: a separate test team, versus the whole team, with quality engineers enabling and coaching.
  • Main output: bug reports and test execution reports, versus automated pipeline checks, testable designs and production signals, plus bug reports.
  • Feedback: days or weeks after the code was written, versus minutes after each change and again from production.
  • Guiding question: "Did we find the defects?" versus "How do we make defects hard to introduce and quick to detect?"

Building quality in: testability, automation, observability

Three engineering properties carry most of the work; quality engineering plans all three together, for every feature, before the code is written.

  • Testability. ISO/IEC 25010 lists testability under maintainability: how effectively and efficiently test criteria can be set and tests performed against them. Ask whether you can control it (reach an expired session through an API, set the clock), observe it (clear responses, log events, stable test ids) and isolate it (replace a payment provider with a test double).
  • Automation. Checks that must hold on every change run in the pipeline, at the lowest level that can catch the defect, so a regression shows up minutes after the change that caused it. Test code is software: without reviews and a flaky-test policy, nobody trusts it.
  • Observability. Understanding what a running system does from the signals it emits, usually logs, metrics and traces. For monitoring, watch the four golden signals from the shift-left and shift-right lesson: latency, traffic, errors and saturation. Good signals turn "checkout failed" into "the payment call timed out for this order".

Try it: Mock API Response Generator Try it: API Health Checker

Worked example: delivery slots with quality built in

This is the delivery-slot story from the exercise in the shift-left and shift-right lesson: customers pick a two-hour delivery slot at checkout; a slot can be booked until 3 hours before it starts and takes at most 20 orders. In refinement, the quality engineer, a developer and the product owner go through the three properties:

  • Testability: the service reads the time from a clock that tests can set; a test-only endpoint fills a slot with 19 bookings; the slot picker gets stable test ids.
  • Automation: unit tests for the cut-off at 3:00:01, 3:00:00 and 2:59:59 before the start (agreed: closed at exactly 3:00:00); API tests for the 20th booking (accepted) and the 21st (rejected with SLOT_FULL); one UI test for the happy path.
  • Observability: each rejected booking logs a structured event with its reason; a dashboard shows rejections per reason; an alert fires if bookings drop to zero during opening hours.
  • Still manual: exploring two customers taking the last place at the same moment, and slot times in Arabic.
  • After release, the dashboard shows SLOT_FULL rejections for slots that still list free places. The log event below carries the slot and order ids, so the tester reproduces the case within the hour: cancelled orders were still counted.
{
  "time": "2026-10-01T18:42:07Z",
  "level": "warn",
  "event": "slot_booking_rejected",
  "reason": "SLOT_FULL",
  "slot_id": "SLOT-7781",
  "booked_count": 20,
  "capacity": 20,
  "order_id": "ORD-58213",
  "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}

Try it: Acceptance Criteria Generator

What a quality engineer does

Titles vary — quality engineer, QA engineer, SDET — but a quality engineer is a tester first: risk analysis, test design and exploratory testing stay at the core. The ISTQB Foundation syllabus describes the whole-team approach, in which anyone with the necessary knowledge and skills can do any task and everyone is responsible for quality; the quality engineer makes that practical.

That does not mean writing all the tests alone, which only moves the bottleneck to one desk. A typical week includes:

  • Asking testability, risk and "how will we know?" questions in refinement.
  • Planning which checks run at unit, API and UI level, and what is left for exploration.
  • Writing and reviewing automated tests, and helping developers write better ones.
  • Keeping the pipeline trustworthy: meaningful quality gates, no ignored flaky tests.
  • Agreeing with developers and operations which signals to watch after a release.
  • Exploratory testing, defect reports with evidence, and learning from escaped defects.

Try it: Risk-Based Test Generator Try it: Regression Scenario Generator

Common mistakes

  • Renaming the QA team to QE while testing still happens only at the end.
  • Equating quality engineering with automation: scripting the old manual tests through the UI and dropping exploratory testing.
  • Letting the quality engineer write all the tests, so developers stop owning quality.
  • Raising testability needs only once automation is blocked, instead of in refinement.
  • Releasing without agreed production signals, so users report a failure before the team sees it.
  • Judging success by test counts or coverage percentages instead of by escaped defects and the time to detect them.

The QA perspective

Start at your next refinement. For each story ask: how will we know it works (which checks, at which level)? How can we test it (state, data, time)? How will we know it still works in production (which signal, which alert)? Record the answers in the acceptance criteria.

Work with developers on testability, with the product owner on risk, and with operations or SRE on signals and alerts. After each escaped defect, ask which of the three failed: was it untestable, unchecked or invisible? Bring the answer to the retrospective; that is the quality assurance side of the same work.

Practice exercise

Write a quality engineering plan for a password reset story

Your task

Read the story below and write a four-part plan: what to build so it is testable, which automated checks run at which level, which signals show that it works in production, and what stays manual. End with your questions for the product owner.

Material
Story: As a customer, I want to reset my password by e-mail
       so that I can sign in again.

AC1  The reset link is valid for 30 minutes.
AC2  A link can be used only once.
AC3  After 5 reset requests for one account within an hour, further requests
     are refused until the hour has passed.
AC4  The page shows the same message whether or not the e-mail address
     is registered.
Steps
  1. For each acceptance criterion, note what you must control, observe or isolate.
  2. Put each check at the lowest level that can catch the defect: unit, API or UI.
  3. Name the log events, one metric and one alert, and what must never be logged.
  4. List what still needs a person, and the open questions.
Show the model answer
Model answer

Testability: a clock that tests can set, to check expiry without waiting 30 minutes; a test inbox or fake e-mail service to read the link; a way to reset the rate-limit counter between tests; stable test ids.

Automation: unit tests for expiry just before, at and just after 30 minutes, for single use, and for the 5th and 6th request; API tests that registered and unregistered addresses get the same response and that a used link is refused; one UI test of the whole journey.

Observability: events for reset requested, e-mail sent, reset completed and reset rejected with a reason (expired, used, rate limited); a metric of completed versus requested resets; an alert when requests arrive but no reset e-mail is sent for an hour. Never log the token, the link or the new password.

Manual: the e-mail in Arabic and on a phone, and the link opened on another device. Questions: is the link valid at exactly 30:00? Does a new link cancel older ones? Does the hour in AC3 run from the first request or from the start of the clock hour? Does an AC3 refusal reveal that the account exists, which AC4 forbids?

Frequently asked questions

Is quality engineering the same as test automation?

No. Automation is one of its three pillars, next to testability and observability, and it rests on testing fundamentals: risk analysis, test design and exploratory testing. A team that automates its old end-of-cycle scripts but still tests only at the end has automation, not quality engineering.

Do I need to code to become a quality engineer?

Most quality engineer roles expect you to read and write test code and to work with pipelines, logs and APIs. Learn the testing foundations first, because automating a weak test design only repeats it faster; then add code step by step, starting with API checks and reading logs.

Does quality engineering replace manual and exploratory testing?

No. Automated checks confirm what someone anticipated; exploratory testing finds what nobody anticipated. The ISTQB Foundation syllabus makes the same point about DevOps: even with a high level of automated testing, manual testing, especially from the user's perspective, is still needed.

Is a quality engineer the same as an SDET?

The titles overlap and their meaning varies between companies. SDET (software development engineer in test) usually stresses building test code and tools; quality engineer usually covers the wider work on testability, automation, observability and process. Read the duties in the job description rather than the title.

References

Practise with Mutqan tools

Score features by likelihood and impact, then generate a prioritised risk-based test plan.

Test Design

Generate complete mock API responses (status, headers, JSON body) for success, list, detail, error and empty cases.

Mocking

Check several API health endpoints at once and get status, latency and a pass/fail summary.

API Testing

Go deeper

Your progress on this topic

Part of the QA Roadmap