Section 3 · OES Spec
Design and protocol
The intended experimental design — not just what happened to be measured.
This is the section where an open standard most improves trust. Tools usually preserve results, but rarely preserve the original design assumptions: the planned MDE, the multiple-testing policy, the peeking policy, the stopping rule. OES captures the protocol so future readers can judge how a result should be interpreted.
Fields
| Field | Type | Purpose |
|---|---|---|
| design.type | enum | One of: ab, abn, multivariate, factorial, holdout, switchback, bandit, quasi_experiment. |
| design.randomizationUnit | string | user, account, session, device, pageview, region, etc. |
| design.analysisUnit | string | Unit used in metric analysis — may differ from the randomization unit. |
| design.assignmentMethod | string | Hashing, random draw, deterministic allocation, external assignment, etc. |
| design.hashAttribute | string | Attribute used for bucketing — e.g. user ID, anonymous ID, org ID. |
| design.hashSalt | string | Salt or namespace identifier, if exportable. |
| design.namespace | string | Layer/namespace used to avoid collisions with other experiments. |
| design.population | string | Eligible users, accounts, or events. |
| design.targetingRules | object[] | Inclusion rules. |
| design.exclusionRules | object[] | Exclusion rules — bots, internal users, specific countries or browsers. |
| design.trafficAllocation | number (0–1) | Total percent of eligible population included. |
| design.variantAllocation | object | Allocation per variant. |
| design.startDate | string (date-time) | Actual or planned start. |
| design.endDate | string (date-time) | Actual or planned end. |
| design.exposureDefinition | string | What counts as exposure. |
| design.triggerDefinition | string | What qualifies a user for analysis. |
| design.rampSchedule | object[] | Traffic ramp history. |
| design.concurrentExperiments | string[] | Known overlapping experiments. |
| design.interferenceRisk | object | Low / medium / high plus rationale. |
| design.power | number (0–1) | Planned power. |
| design.minimumDetectableEffect | number | MDE. |
| design.alpha | number (0–1) | Significance threshold. |
| design.multipleTestingPolicy | enum | none, bonferroni, fdr, hierarchical, metric_family, custom. |
| design.peekingPolicy | enum | fixed_horizon, sequential, always_valid, bayesian_monitoring, informal. |
| design.stoppingRule | string | Predefined rule for stopping or ramping. |