ALMOST

A weekend of work, and real gaps remain.

Website testing: change a page without deploying, split the traffic, and read which version converted better — with heatmaps and session recordings beside the results.

Promptfree, for everyone, and the only version there is
Build the A/B testing I actually need instead of VWO — and know the two halves that make this ALMOST.

**The statistics**, which produce a confident wrong answer when done badly, and **the flicker**, which is the thing that quietly invalidates client-side tests and that nobody mentions.

STACK
- Node 20+ with Fastify for the control plane
- SQLite through better-sqlite3 for definitions and assignments
- Your existing warehouse or database for the metrics
- A tiny script, or no script at all — read the next section first
- Caddy in front

DECIDE WHERE THE TEST RUNS, BEFORE ANYTHING ELSE
- **Server-side is better in every way that matters.** The variant is chosen before the HTML is built, so there is nothing to flash, no layout shift, and no script blocking the render. If the page is server-rendered, do this and skip the rest of this section
- Client-side means the original paints first and is then rewritten. That flash is visible, it changes behaviour, and it biases the test towards the control — which is the version people saw first
- If you must do it client-side: an anti-flicker block hides the content until the variant applies, with a timeout that reveals it anyway. That timeout is a real cost paid by every visitor including the ones not in the test, and it is why this approach is worse

THE DATA MODEL
- experiments: id, key, hypothesis, variants_json, traffic_percent, unit_kind, started_at, stopped_at, decision, decision_note
- assignments: id, experiment_id, unit_id, variant, at — append-only, and the record everything is computed from. Record it from the first minute; it cannot be reconstructed
- exposures: id, assignment_id, at — assigned is not the same as saw it, and analysing on assignment dilutes the effect with people who never reached the page
- metrics: id, name, kind, query_sql, is_guardrail, direction, minimum_effect
- results: id, experiment_id, metric_id, computed_at, stats_json, method, verdict

ASSIGNMENT
- Deterministic: hash the unit identifier with the experiment key and a salt. The same person always gets the same variant, on the server and in the browser, with no coordination
- Stable when the traffic percentage changes: somebody in the first ten per cent stays in when it becomes twenty
- One experiment per surface, enforced by layers, or two tests change the same button and neither result means anything

THE STATISTICS, WHICH IS THE PART THAT GOES WRONG SILENTLY
- Use a published method valid under continuous monitoring — a sequential test, or a Bayesian approach with a stated prior
- **Never a fixed-horizon test looked at every day.** That combination calls a neutral change a winner roughly a third of the time, and it is the single most common error in this field
- Compute the required sample size before starting, from the baseline rate and the smallest effect worth acting on, and show progress towards it
- Report an interval, never a point estimate, with the method named beside it
- **A sample-ratio mismatch check every day.** If the split is significantly off, the test is broken and the numbers mean nothing. This catches more real bugs than any statistical refinement
- Cap extreme per-unit values at a stated percentile before analysis, or one enormous order decides your experiment

AND THE HONEST PART
- Most tests on most sites are underpowered: the traffic is not there to detect the effect being looked for, and running one anyway produces noise that gets shipped. Compute the sample size first and, if the answer is six months, do not run the test — change the thing on judgement and say so

WHAT MATTERS MOST
Server-side assignment and a valid sequential method. The first removes the flicker problem entirely; the second is the difference between an experiment programme and an expensive way to confirm what somebody already believed.

What you lose

  • A visual editor that changes a live page without a deploy, which is why marketing adopts it
  • Sequential testing implemented correctly, so looking at the result daily does not invalidate it
  • A script that applies the variant before the page paints, avoiding the flicker that ruins a test
  • Segment reporting somebody who does not write SQL can read

If you would rather not build

  • A server-rendered split with the assignment in a cookie, which is twenty lines
  • Not running the test, when the sample size says six months

The escape hatch

open source · no votes, no paid placement

GrowthBook

$0

Open-source feature flags and experimentation with Bayesian and sequential methods.

growthbook/growthbookfree · open source

Unleash

$0

Feature flags with gradual rollout, self-hostable.

Unleash/unleashfree · open source

Why this verdict

our own opinion · changed only by a person

41/100

Verdict kinda at 41: assignment and reporting are ordinary, the statistics are a published method faithfully implemented, and the visual editor is the half you lose. The flicker point is the one most homemade versions never hear about.

History

tracked since 14 Aug 2026 · nothing is ever overwritten

Interest · last 30 days

Nothing recorded yet. This chart fills in once the page has visitors, votes or prompt copies — it will not draw a flat line to look busy.

Questions about VWO

answered from the record above

Is VWO free?

No — the plan we track is $356 a month. Growth from around $356/month billed annually, priced on monthly tracked users.

Can you replace VWO by building your own?

ALMOST. A weekend of work, and real gaps remain. Replacement score 41 out of 100, build time a weekend. Read what you lose before you decide.

How much does VWO cost?

$356 a month on Growth — $4,272 a year. Recorded 14 Aug 2026.

What do you lose by replacing VWO?

A visual editor that changes a live page without a deploy, which is why marketing adopts it; Sequential testing implemented correctly, so looking at the result daily does not invalidate it; A script that applies the variant before the page paints, avoiding the flicker that ruins a test; Segment reporting somebody who does not write SQL can read. If any of those carry weight for you, keep paying.

Is there an open-source alternative to VWO?

Yes: GrowthBook, Unleash. The prompt on this page is for when you want it your way instead.

Related entries

same category first, most replaced first

All 27 in Analytics

Not sending yet

Every week, something stops being worth paying for.

New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.

free forever · no tracking pixel · stored here, never passed to anyone

Esc