Blog

A latency budget for your checkout: six steps, 600 milliseconds, no excuses

Checkouts don't die of one big delay — they bleed out through six small ones. Here is the per-step budget we use, how to measure yours with nothing but DevTools, and where the milliseconds hide.

Nobody abandons a checkout because of one catastrophic delay. They abandon it the way you leave a slow queue: after the third small wait, each individually forgivable. A tap that thinks for 400 ms. A shipping calculation that spins. A payment form that assembles itself in stages. None of it crashes; all of it accumulates into a feeling — this shop is struggling — and feelings are what carts die of.

The fix is not “make it faster”, which is a wish. The fix is a budget: a named number for every step, measured on real phones, enforced like a spending limit. Here is the one we use, and how to hold a checkout to it.

The budget

Total ceremony across six steps: roughly 600 ms of perceived waiting beyond reading and typing. Ambitious? We hold our own store's server responses under 100 ms, and the constraint is engineering discipline, not exotic infrastructure.

Measuring with zero tooling budget

Chrome DevTools, mobile emulation, “Fast 4G” throttling — walk the checkout while recording a performance trace. Every budget line appears as a labeled span if you look: long tasks, network waterfalls, the layout shift when the payment iframe lands. Do it quarterly, on the cheapest Android you can borrow, because that is where your customers live. The trace does not argue and has no favorite vendor.

Where the milliseconds hide

Make it a contract clause

A budget nobody enforces is a mood board. Put the six numbers into the definition of done, verify them in CI against the built app, and treat regressions like failing tests — because that is what they are. Our own pipeline refuses to deploy when smoke checks fail; the checkout budget deserves the same rank as correctness. To the customer, slow and broken are the same emotion at different volumes.