Experiments are isolated — one active experiment per contact at a time, or interaction effects are handled
Why it matters
When a contact is simultaneously enrolled in a subject-line test and a send-time test that both use open rate as the outcome metric, the results of each experiment are contaminated by the other. You cannot isolate the effect of the subject line from the effect of the send time. Reported lifts from both experiments are artifacts of the interaction, not the individual treatments. In practice this leads to shipping changes that performed well in a contaminated test but have no effect or a negative effect in production. The data-integrity failure is structural: the experiment framework appears to produce results, but those results are not attributable to the variable being tested.
Severity rationale
Medium because interaction contamination degrades experiment validity incrementally — results are not entirely wrong but cannot be trusted for the shared metric, leading to compounding misattribution across multiple experiment cycles.
Remediation
Implement exclusion groups so contacts enrolled in one experiment sharing a metric are blocked from enrollment in another. Check at assignment time, not at analysis time:
async function canEnrollContact(
contactId: string,
experimentId: string
): Promise<boolean> {
const experiment = await db.experiments.findUnique({ where: { id: experimentId } })
if (!experiment.exclusion_group) return true
const conflict = await db.experimentAssignments.findFirst({
where: {
contact_id: contactId,
experiment: {
exclusion_group: experiment.exclusion_group,
status: 'active',
id: { not: experimentId }
}
}
})
return conflict === null
}
Tag every experiment with an exclusion_group string ('open-rate', 'click-rate', etc.) at creation time. Experiments testing independent levers (e.g., subject line vs. footer copy) can share a group if they share the primary outcome metric.
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the Campaign Analytics & Attribution Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
External references
- iso-25010:2011 · functional-suitability — Functional suitability — functional correctness
Taxons
History
- 2026-04-18·v1.0.0·Initial import from campaign-analytics-attribution·automated