Bell Statistics

What is concurrent testing?

Concurrent testing runs several experiments on the same users at the same time, each randomised independently. It does not bias the individual results, and it does mean no experiment observes what happens when its change ships alongside the others.

Also called
parallel testing, overlapping experiments, simultaneous experiments, test collisions
Allon Korem

Written by Allon Korem

Chief Executive Officer

Last updated

In plain English

Any organisation running experimentation at scale runs many tests at once on overlapping users. The instinct that this must contaminate the results is understandable and mostly wrong. Provided each experiment randomises independently, the second test's variants are spread evenly across the first test's arms, so its effect appears as noise in both — which inflates variance slightly and does not bias the estimate.

The word doing the work there is independently. If assignment is computed by hashing the user id alone, without the experiment id, every user lands in the same relative position in every test, and the tests share populations rather than crossing them. Then one experiment's treatment is systematically present in another's treatment arm, and the effects genuinely are confounded. This is a bucketing failure rather than a property of concurrency, and it is the one thing that must be right before overlap is safe.

What concurrency genuinely cannot give you is the combined effect. Each experiment measures its change averaged over whatever the other experiments were doing, so two tests that each report a win tell you nothing about what happens when both ship. If they touch the same surface they may well conflict — an interaction effect — and the roadmap's assumption that gains add up is exactly the assumption concurrency leaves untested.

The practical response is proportionate rather than absolute. Most pairs of experiments are unrelated: a checkout change and an email subject line do not interact, and treating every overlap as a hazard would reduce an experimentation programme to a queue. What deserves attention is overlap on the same surface or the same decision point, which is both where interactions are plausible and where two teams are most likely to be working simultaneously without noticing.

So the useful discipline is a register rather than a serialisation policy: record what is running where, make overlaps on a shared surface visible, and sequence those deliberately or test them together as a factorial. And when a shipped combination underperforms the sum of its parts, treat that as the interaction evidence it is — that gap usually arrives after the fact, and it is the main way an organisation learns which of its surfaces are crowded.

The formula

Two facts: what independent concurrency costs, which is little, and what it leaves unmeasured, which is the interaction.

Why it does not bias
E[ other treatments | arm A ] = E[ other treatments | arm B ]

Independent randomisation spreads every other experiment evenly across your arms, so it cancels in the difference.

What it costs
variance rises slightly; the estimate does not move

Other experiments add noise. With many concurrent tests the effect on power is real but modest.

What it cannot measure
effect(A and B together) ≠ effect(A) + effect(B)

Neither test observes the combination — see interaction effect.

The prerequisite
hash( unit_id + experiment_id )

Without the experiment id, concurrent tests share populations and genuinely confound — see the chi-square calculator for the checks.

Worked example

A team runs six concurrent experiments across the same user base. Two of them — a trust-badge row and an urgency banner — both change the product page above the fold. The other four touch email, search ranking, the mobile navigation and a billing screen. All six report significant wins and all six ship in the same release.

Concurrent experiments
6
Assignment
independent, experiment id in the hash
Sum of reported conversion gains
+1.34 pp
Measured after all six shipped
+0.91 pp
Shortfall
0.43 pp
Follow-up 2 × 2 on the two page changes
interaction −0.39 pp

Five of the six combined as expected. The two competing for the same space above the fold accounted for almost the entire shortfall.

This is concurrency working as designed and being misread at the reporting stage. The individual experiments were all correctly randomised and correctly analysed — none was contaminated, and the four unrelated ones summed cleanly. The shortfall traces almost entirely to the pair sharing a surface, which the follow-up factorial confirms at −0.39 of the 0.43. The lesson is not to stop running tests in parallel; it is that the register should have flagged two experiments on the same region of the same page, and those two should have been sequenced or run as a factorial from the start. Worth noting how cheap the diagnosis was after the fact: knowing which pair to suspect made it a single 2 × 2 rather than an audit of all fifteen possible pairings. That is the practical value of recording what is running where.

Common misconceptions

Running several experiments on the same users contaminates all of them.
Not when each is randomised independently, because the other experiments' variants spread evenly across your arms and cancel in the difference. What they add is a little variance. The real limitation is different: no experiment observes the combination, so the results say nothing about shipping them together.
Concurrent tests should be serialised to be safe.
That trades a small, well-understood variance cost for an enormous reduction in throughput. Most pairs of experiments touch unrelated surfaces and cannot plausibly interact. Serialise the specific overlaps that share a surface or a decision point, and run everything else in parallel.
If all our tests were significant wins, the release will deliver their sum.
Only if the changes are additive, which concurrency does not test. Changes competing for the same attention routinely deliver less than either alone. The gap between the predicted sum and the measured aggregate is the main signal available, and it arrives only if someone measures the aggregate.

Frequently asked questions

Is it safe to run experiments in parallel on the same users?
Yes, provided assignment is independent across experiments — which means hashing the user id together with the experiment id rather than the user id alone. Independent randomisation makes other experiments behave as noise rather than as confounders. The residual limitation is that no test measures the combined effect of changes shipping together.
When should overlapping experiments be sequenced instead?
When they touch the same surface, the same funnel step or the same user decision — two modules competing for space above the fold, two prompts at the same moment, two changes to one checkout step. Those are the pairs where an interaction is plausible. For everything else, sequencing costs throughput and buys very little.
How do I detect that two experiments collided?
Compare the aggregate movement after a release against the sum of the individual reported effects. A persistent shortfall points at interactions, and a register of what was running where usually identifies the suspect pair immediately. Confirming it takes a 2 × 2 factorial on those two changes, which is affordable when you know which pair to test rather than auditing every combination.

Related terms

  • Bucketing

    Three properties assignment must have — random, deterministic, independent — and what breaks when each one fails.

  • Experimentation platform

    Assignment, exposure, analysis and the guardrails — and the last of those is what separates a platform from a flag service.

  • Interaction effect

    When two changes stop being independent — the reason concurrent tests can both read as wins and lose money together.

  • Multiple comparisons

    Test enough things and something will look significant — the arithmetic, and the four fixes.

Calculate it

  • One-way ANOVA

    Three or more independent groups on one continuous outcome — size it, then run the F test.

  • A/B test sample size

    Size a two-proportion experiment before you launch, then read the lift and its interval once it lands.

Knowing the term is the easy part

Applying it to a live measurement problem is the part that goes wrong. If you are designing an experiment, reading a result you do not trust, or trying to work out what your marketing actually caused, that is the work we do.