# Experiment Velocity Planner The [Experiment Velocity Planner](https://notambourine.com/experiment-velocity) compares an existing experimentation process with a measured-velocity policy. It runs entirely in the browser, needs no account, and stores scenario state only in the URL fragment when a user copies a link. ## Model Measured velocity asks whether a variation is unlikely to be worse than control by more than an agreed loss. A safe result is not a win; it supports release within that loss boundary. Set two controls and the planner calculates the third: | Control | Meaning | | ------------------ | ----------------------------------------------------- | | Decision duration | P80 time to a decision, with a 14-day reporting floor | | Evidence threshold | Probability required for a safe decision | | Acceptable loss | Largest permitted decline in the chosen metric | Defaults are 90% evidence, 5% relative acceptable loss, purchase conversion, and calculated duration. They are starting assumptions, not recommendations. The annual view gives both policies the same deterministic stream of test-ready changes. It models capacity, test coverage, decision time, untested work, winners, losers, and proxy-to-purchase linkage. Policy deltas are calculated within each paired run before percentiles are taken. ## Metrics Only one metric controls a decision. Metrics closer to purchase carry more business meaning but usually need more traffic. | id | Metric | Baseline | Answers | Limitation | | ---------- | ------------------- | -------- | ------------------- | ------------------------- | | `bounce` | Bounce rate | 38% | Initial engagement | Farthest from purchase | | `pdp` | PDP view rate | 56% | Product discovery | Views do not prove orders | | `atc` | Add-to-cart rate | 8.5% | Cart intent | Intent can fail later | | `checkout` | Begin-checkout rate | 4.7% | Checkout intent | Starts are not orders | | `purchase` | Purchase conversion | 2.9% | Completed purchases | Rare events need time | ## Scenario links Encode a JSON object as base64url and place it after `#scenario=`: ```js const state = { sessions: 250000, aov: 85, surface: 'homepage', selectedMetric: 'atc', calculated: 'duration', evidence: 90, loss: 5, }; const hash = btoa(JSON.stringify(state)).replaceAll('+', '-').replaceAll('/', '_').replaceAll('=', ''); const url = `https://notambourine.com/experiment-velocity#scenario=${hash}`; ``` Unknown or omitted values fall back to defaults. Numeric values are clamped to these ranges: | Key | Min | Max | Default | | ----------------- | --: | --------: | ------: | | `sessions` | 1 | 100000000 | 250000 | | `aov` | 0 | 1000000 | 85 | | `eligibleTraffic` | 10 | 100 | 80 | | `effectiveSample` | 40 | 100 | 90 | | `duration` | 7 | 120 | 22 | | `evidence` | 70 | 99 | 90 | | `loss` | 1 | 30 | 5 | | `currentCoverage` | 0 | 100 | 70 | | `currentDays` | 14 | 120 | 60 | | `changesMonth` | 1 | 12 | 4 | | `testCapacity` | 1 | 5 | 1 | | `winnerShare` | 0 | 8 | 2 | | `loserShare` | 0 | 8 | 3 | | `winnerLift` | 1 | 20 | 5 | | `loserLoss` | 1 | 25 | 7 | | `proxyLink` | 20 | 100 | 70 | Supported enums: - `surface`: `homepage`, `pdp`, `cart`, `checkout`, `sitewide` - `selectedMetric`: `bounce`, `pdp`, `atc`, `checkout`, `purchase` - `calculated`: `duration`, `evidence`, `loss` - `currentPreset`: `winner`, `limited`, `capacity` - `currentUntested`: `hold`, `ship` - `readiness`: array of exactly 6 booleans ## Limits The planner cannot validate production instrumentation, prove that an upstream metric causes purchases, or guarantee that a safe variation is profitable. Faster statistics do not repair unstable assignment, missing exposure logs, inconsistent metric definitions, or bad traffic allocation. - [NoTambourine agent reference](https://notambourine.com/AGENTS.md) - [Markdown index](https://notambourine.com/llms.txt)