Quality engineering and test automation consulting

A test suite is only valuable if a failure means something. Most suites reach a point where failures are routinely re-run rather than investigated, and from then on they cost more than they protect. We are engaged to design suites that stay trustworthy.

Business challenges

Quality engagements are commissioned when releases have become events rather than routine.

Failures are re-run rather than investigated

The suite has enough intermittent failures that a red result no longer means anything. At that point it costs maintenance and provides no signal.

Releases are events

Each release requires a manual regression pass that takes days, so releases are batched, which makes each one larger and riskier than the last.

Coverage is measured but not meaningful

A high percentage is reported while the paths that actually carry business risk are exercised by nothing, because coverage counted lines rather than behaviour.

The suite is slower than the feedback it provides

A run takes long enough that developers stop waiting for it, so defects are found after the context in which they were introduced has been lost.

Test data is the bottleneck

Setting up a scenario takes longer than testing it, so tests share state, become order-dependent and fail for reasons unrelated to the code.

Defects are found late and cost most

Testing sits at the end of delivery, which is the point at which a design problem is most expensive to correct and most likely to be worked around.

Business outcomes

What changes when testing is designed rather than accumulated.

  • A failing test that means something, so failures are investigated rather than re-run
  • Releases that are routine because regression confidence is automated
  • Testing concentrated on the paths that carry business risk rather than spread evenly
  • Feedback fast enough that developers act on it within the change that caused it
  • Defects found at the stage where correcting them is still inexpensive

Why the suite you have may be costing more than it protects

Trust is the property that makes a test suite valuable, and it is fragile.

A suite accumulates. Tests are added against defects, against features and against audit requirements, and each is reasonable in isolation. What accumulates alongside is duration, flakiness and maintenance cost.

There is a threshold past which a red result no longer prompts an investigation, because experience says re-running is faster. From that point the suite provides no signal while still consuming maintenance, and the organisation is paying for confidence it does not have.

Recovering from that state is rarely a matter of adding tests. It usually means removing them: identifying the small set that genuinely detects regression, making that set fast and reliable, and deleting the rest.

Our consulting approach

Four commitments that shape every quality engagement.

  1. Risk-weighted, not evenly spread

    Testing concentrates where a defect would be most costly. Uniform coverage targets produce thorough testing of code nobody depends on.

    Focus
  2. Trust above coverage

    A smaller reliable suite is worth more than a large intermittent one. We will recommend deleting tests, which coverage-target thinking cannot.

    Signal
  3. Fast feedback by design

    Suite duration is a design constraint, not an outcome. Beyond a certain run time developers stop waiting, and the suite stops influencing behaviour.

    Speed
  4. Owned by the delivery team

    Tests maintained by a separate function drift from the code they cover. We design suites the people changing the code can keep working.

    Ownership

Test strategy

Strategy answers what is tested, at which level, and what evidence a release requires. Without it, tests are written at whichever level is most familiar, which is usually the most expensive one to maintain.

We work from business risk: which failures would be most costly, which paths carry them, and what would have to break for the failure to reach production. That determines where the testing effort goes.

  • Risk identified in business terms before test levels are chosen
  • Evidence a release requires stated, including for regulated contexts
  • Manual testing retained deliberately where automation is poor value
  • Exit criteria defined so a release decision is not a matter of opinion

Test automation architecture

Automation architecture determines maintenance cost, which is where most suites fail. A suite coupled to the user interface breaks on every visual change; a suite with duplicated setup requires the same fix in fifty places.

We design layering, abstraction and shared fixtures so a change to the application is a change in one place in the suite. That property is what makes a suite survivable past its second year.

  • Abstraction between tests and the interface they exercise
  • Shared setup and fixtures so an application change lands in one place
  • Independent tests: no shared state, no ordering assumptions
  • Parallel execution designed in rather than retrofitted

Choosing the right test level

The same defect can be caught by a unit test in milliseconds or by an end-to-end test in minutes. The level is an economic decision, and pushing everything to the highest level is the most common and most expensive error.

We place logic tests at unit level, integration boundaries at contract or component level, and reserve end-to-end tests for the small number of journeys where the value is in the journey itself.

Flakiness and suite reliability

Flakiness is the single largest threat to a suite's value, because it converts a signal into noise and the conversion is irreversible once the team has learned to re-run.

We treat an intermittent test as a defect in the test, not as an inconvenience: quarantined, diagnosed and either fixed or deleted. The common causes are timing assumptions, shared state and dependence on external systems, and each has a structural fix.

  • Intermittent tests quarantined immediately rather than tolerated
  • Waiting made explicit and conditional rather than time-based
  • External dependencies stubbed at a defined boundary
  • A test that cannot be made reliable is deleted rather than re-run

Test data management

Test data is the usual reason tests share state and become order-dependent. Where creating a scenario is slow, engineers reuse fixtures, and the suite acquires coupling that produces failures unrelated to the code under test.

We design data creation to be cheap so each test can own its state, and we handle production-like data through masking or synthesis rather than copying, which is both a privacy and a stability problem.

Continuous integration and gating

Tests that do not run on every change are documentation. Which tests gate which stage is a deliberate design: fast checks on every commit, broader suites before merge, and the slowest before release.

Gate thresholds are set so a failure is actionable. A gate that is routinely overridden is worse than no gate, because it also produces false assurance. This runs alongside platform engineering.

  • Fast checks on every commit, broader suites at defined stages
  • Gate thresholds set so failures are actionable rather than routine
  • Results reported where the change author will see them
  • Suite duration monitored as a first-class metric

API and contract testing

Most integration defects are contract defects: a field changed meaning, an error case was handled differently than documented, or a version was assumed compatible.

Contract tests catch these at the boundary, quickly, without requiring both systems to be running. For estates with many services this is usually the highest-value automation available and the most commonly missing.

Performance and load testing

Performance testing is only meaningful against a stated objective. Testing at an arbitrary load produces a number with no interpretation.

We establish the load profile the business expects, test against it, and look for the point at which behaviour degrades — which is more useful than confirming the system handles a load that was chosen to be comfortable.

  • Load profile derived from expected business volume, not chosen for comfort
  • The degradation point identified rather than a pass mark confirmed
  • Results interpreted against the architecture that produced them
  • Repeatable, so a regression in performance is detectable

Accessibility testing

Automated accessibility checking detects a meaningful but limited portion of WCAG failures. Reporting it as full conformance is a claim the tooling does not support.

We integrate automated checks into the pipeline for the failures they reliably catch, and define the manual assessment — keyboard operation, focus order, screen reader behaviour — that covers the remainder. Both are necessary, and we are explicit about what each provides.

Security testing in the pipeline

Static analysis, dependency scanning and secret detection belong in the pipeline where they apply to every change. Their value depends entirely on threshold tuning: a scanner reporting everything it recognises produces a queue nobody triages.

We configure them to fail on what is genuinely actionable and report the rest. Broader assessment is cybersecurity consulting.

Recovering an untrusted suite

The most common engagement is not building a suite but recovering one. The instinct is to fix every failing test, which is expensive and frequently misdirected.

We start by establishing which tests have ever caught a real defect. Suites typically contain a large proportion that have never failed for a genuine reason and a smaller set doing all the work. Making that set fast and reliable — and deleting a great deal — usually restores trust faster than repair.

  • Tests assessed on whether they have ever detected a real defect
  • The reliable, valuable subset made fast first
  • Deletion treated as a legitimate and frequently correct outcome
  • Coverage rebuilt deliberately where the assessment shows a genuine gap

Quality ownership in the delivery team

Where quality is a separate function, it becomes a stage that delivery passes through and defects become someone else's finding. Where it belongs to the delivery team, testing informs design.

We design suites the delivery team can maintain and establish the practices that keep them maintained: tests written with the change, flakiness treated as a defect, and suite duration owned by someone.

What you receive

Strategy, automation architecture and a working reference implementation your team extends.

  • Test strategy tied to business risk, with release evidence and exit criteria defined
  • Automation architecture with layering, fixtures and parallel execution designed in
  • A working reference implementation your team extends rather than a document
  • CI integration with gate placement and thresholds set to be actionable
  • Flakiness diagnosis with quarantine, fix or deletion decisions recorded
  • Test data approach that lets each test own its state
  • An assessment of the existing suite: what to keep, what to make fast, what to delete

Engagement models

  1. Initial project design

    Engaged before significant code exists, when structural decisions are still cheap to change. Produces the target-state architecture, the technology selection rationale, and a sequencing plan the delivery team can execute.

    Best value at the start
  2. Mid-project assistance

    Engaged when delivery has slowed, costs are rising, or a design that fitted the original problem no longer fits the current one. Diagnostic first: we establish what is actually causing the drag before recommending change.

    Diagnostic, then corrective
  3. Ongoing support

    A named architect available as the system evolves, covering design review, technology decisions and course correction. Delivered under a subscription rather than a fixed project scope.

    Continuous involvement

Enterprise delivery

How a quality engagement runs.

  1. Free first consultation

    Your release process, current suite and where confidence is actually lacking.

    No cost
  2. Assessment

    Suite duration, flakiness rate, coverage of business-critical paths and which tests have ever caught a real defect.

    Weeks
  3. Strategy and architecture

    Risk-weighted strategy and automation architecture, with the maintenance cost of each choice stated.

    Written deliverables
  4. Reference implementation

    A representative slice automated end to end and running in CI, so the design is proven rather than described.

    Proof
  5. Extension with your team

    Your engineers extend the suite while we review, so the practice transfers rather than the deliverable alone.

    Collaborative
  6. Handover

    Documentation, conventions and the maintenance practices that keep the suite trustworthy.

    Exit by design

Technologies

Chosen against the application, the team and the maintenance cost of the resulting suite.

Unit and integration frameworks

The idiomatic framework for the language in use, because an unfamiliar one reduces the tests written.

Browser automation

Playwright, Selenium and equivalents, applied to the small number of journeys that warrant end-to-end cost.

Mobile test automation

Device and emulator automation for iOS and Android, including the fragmentation that drives real failures.

API and contract testing

Boundary verification without requiring both systems to run.

Performance testing

Load generation and analysis against a stated business volume.

Accessibility tooling

Automated WCAG checks in the pipeline, scoped honestly to what they detect.

Static and dependency analysis

Code and dependency scanning with thresholds tuned to be actionable.

Test data tooling

Generation, masking and synthesis so tests own their state.

CI platforms

GitHub Actions and equivalents, with gates placed by stage.

Reporting and analytics

Failure trend, duration and flakiness tracked over time rather than per run.

Why NG&NR

We will recommend deleting tests

Coverage-target thinking cannot produce that recommendation, and it is frequently the fastest route back to a suite the team trusts.

Maintenance cost stated upfront

Every automation choice carries a maintenance cost. We state it when the choice is made rather than letting it be discovered in year two.

Capability transferred, not retained

Your engineers extend the suite during the engagement while we review, so the practice stays after we leave.

Named accountability

A named lead owns the technical outcome and remains the point of contact for the engagement.

Frequently asked questions

Not by fixing every failure. Start by establishing which tests have ever caught a real defect — suites typically contain a large proportion that never have, and a smaller set doing all the work. Making that set fast and reliable and deleting a great deal usually restores trust faster than repair.

None. A percentage measures lines executed, not behaviour verified, and optimising for it produces thorough testing of code nobody depends on. The useful question is whether the paths carrying business risk are exercised, which is assessed rather than counted.

No. Automation has a maintenance cost that recurs for the life of the test. Exploratory testing, one-off validation and areas changing rapidly are frequently better done by a person. We are explicit about where automation is poor value.

Short enough that developers wait for it. Beyond roughly that threshold they stop, and the suite loses its influence on behaviour. Duration is a design constraint we work to rather than an outcome we report.

The delivery team. Tests maintained by a separate function drift from the code they cover, and defects become someone else's finding rather than an input to design. A specialist quality role is valuable for strategy and hard testing problems, not as a stage delivery passes through.

Usually yes, and usually we recommend it. Framework migration is expensive and rarely the actual constraint — the problems are typically architectural: coupling to the interface, shared state, and setup duplicated across the suite. Those are fixable without changing tooling.

No, and any tool claiming otherwise is overstating. Automated checks detect a meaningful but limited portion of failures. Keyboard operation, focus order and screen reader behaviour require manual assessment. We integrate both and are explicit about what each provides.

By making creation cheap enough that each test owns its state, which removes the shared fixtures that cause order dependence. Production-like data is masked or synthesised rather than copied — copying is both a privacy exposure and a source of instability when the source changes.

It verifies that two systems agree on the interface between them, at the boundary, without requiring both to be running. If you operate several services and most integration defects are found late, it is usually the highest-value automation available and the most commonly missing.

That is generally the point. Where regression confidence is automated, releases stop needing a multi-day manual pass and stop being batched — and smaller releases are less risky than larger ones. The lengthening version of testing is the one applied as a stage at the end.

Software development builds the system and includes testing within it; this is a quality engagement for systems built elsewhere. Platform engineering owns the pipeline; this defines what it should run and where.

Typically a fixed-scope assessment and strategy, then a reference implementation, with optional ongoing support through a subscription while your team extends the suite. Pricing is transparent and includes GST. The first consultation is free.

Next step

Request a test suite assessment

A free first consultation covering your release process, your current suite and where confidence is actually lacking — followed by an assessment that says plainly what to keep, what to make fast and what to delete.

No cost, no obligation. Pricing is transparent and includes GST.