Drift is invisible one page at a time. A button with a radius two pixels off is nothing. The same button rendered four different ways across one signup flow is a system problem, and the only way to see it is for somebody to walk the whole thing.
Nobody walks the whole thing. It's tedious, it's never the most urgent task, and by the time you'd notice, three releases have shipped on top of it.
Walk the real pages, in the states that break
Strawberry works in the browser, so it can move through the live product the way a user does and inspect what's actually rendered rather than what a spec says should be. That distinction is the whole point: the drift you're looking for exists precisely because the build and the definition disagree.
It checks the states that get skipped in review, across the breakpoints and themes you care about:
- Spacing off the scale, and type outside the ramp.
- Colors that are nearly a token but not the token, and text failing contrast against its real background rather than its intended one.
- The same component built three ways, or a variant doing a job it wasn't made for.
- Focus that isn't visible, hover that changes nothing, disabled that doesn't read as disabled.
- Empty and error states, where drift concentrates because they get built last and reviewed least.
Ask your Strawberry companion: “Walk these pages and show me where the built interface has drifted from our design system. Cover the states and breakpoints, and group the findings by cause.”
Find where the interface has drifted
Walk these pages and show me where we have drifted from our design system.
Findings grouped by cause, not by page
A list of forty inconsistencies ordered by URL is a document nobody opens twice. Twelve instances of one wrong token is a single fix and should read like one, which changes it from a backlog into an afternoon.
Ordering follows what actually matters. Accessibility failures first, then anything sitting on a primary flow, then visible inconsistency, then cosmetic drift. And you're told which surfaces were walked and which weren't, so a bounded audit doesn't get read as full coverage.
Not every difference is a defect
A deliberate exception, a legacy surface already scheduled for replacement, and a genuine mistake look identical from the outside. An audit that files all three as bugs gets ignored, and deservedly.
So findings that look intentional get raised as questions rather than defects. You know which of them were decisions.
Keep it from coming back
Drift returns. It's the by-product of shipping quickly rather than of anyone being careless, which is also why a one-off cleanup buys you about a quarter.
Once an audit is set up the way you want it, the system it checks against, the surfaces it covers, and the states it inspects can be saved. After that it can run as a Routine that re-walks the agreed surfaces once a release lands and tells you only what's newly broken.