Metrickle

Friction analytics: finding the moments your interface lets people down

Funnels tell you where people leave. Friction signals tell you what happened just before: the button that did nothing, the field that kept rejecting them, the page they bounced straight back from. This guide defines each signal, shows how to rank them so the list means something, and covers the false positives that waste a sprint.

Why people left Deliveryacme.com · sessions that dropped at this step
Dropped here3,410
Hit friction first41%
Converting sessions9%
Friction signals seen in sessions that dropped at the delivery step
Element and signalSessions
input#postcode Form error862
button "Find address" Rage click377
/delivery-info U-turn214

41% of the people who left Delivery hit friction first, against 9% of those who went on to pay. The postcode field rejects spaces.

Six signals, and what each usually means

Each signal is a small, observable moment of failure. None needs a survey or a recording to detect, so they can be counted on every session, including cookieless ones.

Rage click

Three or more clicks within a second, close together.

  • Usual cause: something slow, or something that looks like it should respond and doesn’t.
  • Check first: how long the thing clicked takes to respond.

Dead click

A click on something that looks clickable, then no change within a second.

  • Usual cause: controls that look enabled but aren’t, broken handlers, labels styled as links.
  • Check first: whether it’s meant to be interactive at all.

Error click

A click followed by a JavaScript error within a second.

  • Usual cause: a handler that throws, often on one browser or one shape of data.
  • Check first: the error message and the browser.

U-turn

Page A to page B and straight back, within seven seconds.

  • Usual cause: a link that promised something the page didn’t deliver.
  • Check first: the link text against the page heading.

Form error

A field fails validation or is marked aria-invalid.

  • Usual cause: rules people can’t guess: formats, lengths, characters.
  • Check first: the rule, and whether the message explains it.

Form abandonment

A form started and left without submitting.

  • Usual cause: too many fields, a surprise cost, a question people won’t answer.
  • Check first: the last field touched.

Count sessions, not clicks

Raw counts mislead in two ways. One frustrated person clicking twenty times outweighs nineteen people who gave up after one try. And busy pages always have the most of everything, so the list just repeats your traffic report.

Count sessions affected instead, and divide by the page’s sessions to get a friction rate. Now a quiet page where a third of visitors struggle ranks above a busy page where almost nobody does.

  • Sessions affected for prioritising hotspots.
  • Friction rate per page for comparing pages fairly.
  • Friction in non-converting sessions against converting ones, to find the friction that actually costs you.
Volume or rate?acme.com · last 30 days
Rage clicks by count, sessions on each page and the friction rate
PageRage clicksSessionsFriction rate
/products/*9,42061,3003%
/checkout2,1806,48029%
/account3102,7308%

Product pages have four times the rage clicks and one tenth of the rate: it’s an image carousel. Checkout is the real problem.

False positives, and how to spot them

Every friction report has noise in it. These are the patterns worth recognising before you file a ticket.

Steppers and carousels

Clicking “+” five times to order five, or “next” through a gallery, looks like rage. If the page converts normally and the element is a stepper, it’s working as designed.

Slow but working

Rage clicks on a button that does eventually work are still friction, just a different fix. Look at response time, not the handler. A loading state often solves it.

Errors from someone else

Browser extensions and third-party scripts throw errors too. An error click is only yours if the error comes from your code. Group by error message before you look.

U-turns by design

Opening a size guide and coming straight back is the point of a size guide. A u-turn is a problem when the page was the next step, not a reference.

The quickest filter: compare converting and non-converting sessions. Friction that shows up equally in both is usually noise or a minor annoyance. Friction that shows up mainly in sessions that left is what to fix.

Friction doesn’t fall evenly

The same interface creates different friction for different people. Large text pushes a button under a sticky banner, and people rage-click the banner. Zoomed-in users lose the navigation and u-turn more.

Keyboard users are the subtle case. A clickable div with no focus can’t be clicked from a keyboard at all, so it never shows up as a dead click from them. It shows up as abandonment. Split friction by accessibility setting, and look at which signal changes, not just how much there is.

Top signal by settingacme.com · /checkout
Friction rate and most common signal for each accessibility setting at checkout
SettingFrictionTop signal
None11%Form error
Large text22%Rage click
Zoomed19%U-turn
Keyboard37%Form abandonment

Keyboard users don’t rage-click the coupon button. They can’t reach it. Their friction shows up as abandoned forms instead.

From hotspot to verified fix

  1. Rank

    Sort hotspots by sessions affected, filtered to sessions that didn’t convert.

  2. Check who

    Split by device, browser, app version and accessibility setting. A hotspot that hits one group hard is a different bug from one that hits everyone a little.

  3. See it

    Watch a few consented replays of sessions that hit it, and read what people said in surveys or feedback on that page.

  4. Fix and measure

    Ship the fix, then compare the share of sessions hitting that element before and after. If the rate doesn’t fall, the fix didn’t work, whatever the ticket says.

Friction in mobile apps

Taps don’t carry CSS selectors, and screens aren’t pages, but most of the signals translate.

  • Rage taps: three taps within a second in a small area. Identify widgets and views with accessibility identifiers so the report can name them.
  • U-turns: screen A to B and back within seven seconds.
  • Form errors: call a helper from your validation code with the field and reason.
  • Dead and error taps are harder to detect reliably in native apps. Metrickle captures them on the web today.

Flutter friction, in detail

Friction without reading what people type

Friction analytics doesn’t need form values. A form error records the field and the kind of failure, never what was typed. Metrickle never reads field values, keeps only selectors and short visible labels, and drops an element’s text entirely when it carries data-mk-mask.

Common questions

What is friction analytics?

Detecting and counting small moments where an interface fails people, such as clicks that do nothing, repeated clicks, errors, quick back-and-forth navigation and rejected form fields, then ranking them by how many sessions they affect.

What’s the difference between a rage click and a dead click?

A rage click is several fast clicks in one spot, usually because something is slow or unresponsive. A dead click is a single click on something that looks clickable, after which nothing changes. Dead clicks often find broken controls people only try once.

What’s a good friction rate?

There’s no universal benchmark: it depends on the page and how signals are defined. Compare pages within your own product, compare converting with non-converting sessions, and compare before and after a release.

Do I need session replay for friction analytics?

No. Signals are detected in the browser or app and sent as events, so they work without recordings and in cookieless mode. Replay helps you see a hotspot happen, but it needs consent and isn’t required.

Aren’t heatmaps enough?

Heatmaps show where people click in aggregate, which is useful for layout. They don’t say whether a click worked. Friction signals do, and they can be tied to funnels, conversions and accessibility settings.

Find the friction that’s costing you conversions

Six signals captured automatically from one script tag, ranked by sessions affected. Free to start.

Start free