Atmora Tech

Quality & Support

A flaky suite is worse
than no suite at all

Test suites decay in a predictable way: they grow, they slow, they flake, and then people start re-running the pipeline until it goes green. We build suites that stay fast enough to be trusted and honest enough that a red build stops the release.

Overview

A test suite you trust enough to deploy on, and small enough to run in eleven minutes.

The purpose of a test suite is to let someone deploy on a Thursday afternoon without checking who else is around. That requires two properties most suites lack: it must finish quickly enough that nobody skips it, and it must fail only when something is genuinely broken. Coverage percentage measures neither of them.

So we build the pyramid deliberately. Fast unit tests for logic, contract tests at service boundaries, a deliberately small set of browser journeys covering the paths that generate revenue, and load tests that run against production-shaped data rather than a fixture with forty rows. Flaky tests get quarantined within a day and fixed or deleted within a week.

Manual testing still has a role, and it is not regression. It is exploratory work by people who understand the domain, accessibility auditing with actual assistive technology, and the kind of judgement about whether a workflow makes sense that no assertion library will ever have. We staff that with testers, not with contractors clicking a script.

11 min
merge pipeline at Brightmoor Foods, down from 47 minutes
0.4%
flake rate sustained across 3,100 automated tests
68%
fewer defects escaping to production over two quarters

Capabilities

What this covers

Six areas we staff properly. If your problem sits outside them, the honest note at the foot of this page says so.

  • Test strategy and pyramid design

    An explicit decision about what is tested at which level, with a time budget per stage. If the pipeline exceeds it, tests move down the pyramid rather than the budget moving up.

  • Automation frameworks and CI integration

    Playwright, Cypress or Appium suites built with stable selectors, deterministic data setup and parallel execution, wired to block merges rather than to email a report nobody reads.

  • Performance and load engineering

    k6 and Gatling scenarios modelled on real production traffic shapes, including the ugly ones: the 09:00 login spike, the month-end batch, and the report a regional manager runs forty times.

  • Security and dependency testing

    SAST, dependency and secrets scanning in the pipeline with triage rules, plus targeted penetration testing on authentication, authorisation and multi-tenant data boundaries.

  • Accessibility auditing

    WCAG 2.2 AA conformance checked with automated tooling and then verified manually with screen readers and keyboard-only navigation, because automated tools catch under half of real barriers.

  • Test data and environment management

    Anonymised production-shaped data sets with referential integrity preserved, and ephemeral environments per pull request so tests stop failing over shared-state collisions.

Deliverables

What you get

  • Test strategy document with per-stage time budgets and ownership
  • Automated regression suite integrated as a merge gate
  • Performance test scenarios with baselines and alerting thresholds
  • Accessibility audit report mapped to WCAG 2.2 AA criteria
  • Anonymised test data generators and ephemeral environment tooling
  • Flake dashboard with quarantine policy and weekly burn-down

Stack

What we build it with

  • Playwright
  • Cypress
  • Vitest
  • JUnit 5
  • pytest
  • Appium
  • k6
  • Gatling
  • Pact
  • axe-core
  • Testcontainers
  • GitHub Actions

Process

How the engagement runs

Two-week increments against a written definition of done. You can stop at any increment boundary and keep everything built so far.

  1. Baseline the current state

    Pipeline duration, flake rate, escaped defect count and coverage of the revenue-critical paths measured before anything is written or deleted.

  2. Strategy and budget

    Agreement on what is tested where, how long each stage may take, and which journeys are important enough to justify a browser test.

  3. Build the harness

    Data factories, ephemeral environments and stable selectors go in before test volume grows, because retrofitting determinism into a large suite rarely succeeds.

  4. Automate and gate

    Suites are written against prioritised risk, then made blocking one stage at a time so teams adapt to the gate rather than routing around it.

  5. Maintain and prune

    Quarterly review deletes tests that have never failed usefully, and the flake dashboard drives fixes weekly rather than accumulating a backlog.

When this is the wrong engagement

If you are still finding product-market fit and rewriting core flows monthly, a full regression suite will be deleted before it ever catches anything.

FAQ

Questions we get asked

What coverage percentage should we target?

None in particular. Coverage tells you which lines were executed, not whether the assertions were meaningful, and teams chasing a number write tests against getters. We track escaped defects, pipeline duration and flake rate instead, because those three actually change behaviour.

Should we automate everything?

No. Browser tests are the most expensive to write and maintain, so we automate the journeys that carry revenue or regulatory risk and leave rarely-used admin screens to exploratory testing. A suite of 900 UI tests almost always contains 700 that nobody trusts.

Can you work with our existing test suite?

Yes, and the first task is usually triage rather than expansion. We measure which tests have ever caught a real defect, quarantine the flakiest ten per cent, and delete duplicates. Suites typically shrink by a quarter before we add anything new to them.

Do you provide testers or build the capability?

Both, depending on where you are. Embedded test engineers work inside your delivery teams for a period, but the engagement is written to end with your developers owning the suite; a separate QA department that owns quality on everyone else's behalf reliably becomes a queue.

Start a project

Tell us what is
breaking.

We reply within one working day, and the first call is with an engineer who would actually work on it — not an account manager. If we are not the right studio for the problem, we will say so on that call.

Start a project