Why this matters
Users rarely leave because one thing is hard. They leave because many small costs add up to more than the value they expect. Teams usually feel this but cannot say which step costs the most, so arguments about the signup form become opinion against opinion.
A friction score turns those arguments into arithmetic. You walk the flow as a new user, count every unit of effort, weight it by cost and get one number per step. Then you remove the heaviest items first and check whether drop-off falls.
The stakes are real. Baymard Institute reports an average documented cart abandonment rate of 70.22% across 50 studies, and finds that US checkouts show 23.48 form elements by default. In Spool’s well-known case study, removing one forced decision at checkout was worth hundreds of millions of dollars a year. Your flows will not all be worth that, but the method scales down to any signup, onboarding or checkout.
The framework
Friction comes in four types. Each has a default weight that reflects its typical cost to the user. Calibrate the weights with your own drop-off data after a few audits.
| Friction type | What counts | Default weight |
|---|---|---|
| Field | Each input the user must fill. Optional fields score half. Sensitive or hard-to-recall fields (PAN, GSTIN, card, full address) score double. | 1 |
| Decision | Each choice the user must make without an obvious default: plan, role, template, shipping speed, create account or not. | 2 |
| Wait | Each pause the user cannot skip: OTP, page load over 3 seconds, processing, approval. | 3 |
| Context switch | Each time the user must leave the flow: check email, find a document, ask a colleague, switch app or device. | 5 |
Progressive profiling is the companion idea. Instead of asking for everything up front, you collect profile data in small pieces at moments where the answer immediately improves the experience. The rule of thumb: if you will not use an answer in the next 7 days, do not ask for it yet.
There are three ways to get data without a form field:
- Infer it. Country from IP, currency from locale, company from work email domain, city and state from pin code.
- Observe it. Use cases from the templates people open, team size from invites sent, product preferences from browsing.
- Ask in context. “Which industry are you in? We will show you benchmarks for it” placed on the reports page, not on the signup form.
Step-by-step playbook
-
Pick the flow and the finish line. Signup to first value, onboarding to activation, or cart to order placed. Use the same finish line you use for step-level analytics.
-
Walk it as a new user on a phone. Use a fresh account, a mid-range Android phone and mobile data. Record the screen. Count what you actually had to do, not what the design file says.
-
Score every step. Fill the template below. Count fields, decisions, waits and context switches. Note any hidden friction such as error messages, password rules or OTPs that did not arrive.
-
Pair the score with drop-off. Pull the completion rate for each step from analytics. A high score with a high drop-off is your first target. A high score with low drop-off can wait.
-
Apply the removal ladder to each high-weight item, in this order: delete it, defer it, infer it, default it, then simplify it. Deleting beats simplifying every time.
-
Move questions into progressive profiling. For each deferred field, write down when it will be asked and what the user gets for answering.
-
Test and re-score. Ship the change behind an A/B test, compare step completion and end-to-end conversion, and re-score the flow. Calibrate weights if a removed item moved drop-off much more or less than its weight predicted.
Worked example
Say an Indian D2C haircare brand audits its mobile checkout. The scoring table looks like this.
| Step | Fields | Decisions | Waits | Context switches | Score |
|---|---|---|---|---|---|
| Cart | 0 | 1 (apply coupon?) | 0 | 0 | 2 |
| Login or register | 3 (email, password, confirm) | 1 (login, register or guest?) | 0 | 1 (verify email) | 3 + 2 + 5 = 10 |
| Address | 9 (name, phone, line 1, line 2, landmark, city, state, pin, email) | 0 | 0 | 0 | 9 |
| Delivery option | 0 | 1 (standard or express) | 0 | 0 | 2 |
| Payment | 0 | 1 (UPI, card, COD, wallet) | 1 (UPI app approval) | 1 (switch to UPI app) | 2 + 3 + 5 = 10 |
| Total | 33 |
The two heaviest steps score 10 each. Analytics shows the login step loses 28% of users and the payment step loses 15%.
The team makes three changes:
- Guest checkout with phone OTP. Removes 3 fields, the login decision and the email context switch. Adds 1 field (phone, already needed for delivery) and 1 wait (OTP). New score: 1 + 3 = 4, down from 10.
- Pin-code autofill. City and state fill from the pin code, and email becomes optional. Address fields: 6 required plus 1 optional at 0.5 = 6.5, down from 9.
- Default delivery. Standard is pre-selected with express as an upsell. Decision removed. Score 0, down from 2.
New total: 2 + 4 + 6.5 + 0 + 10 = 22.5, a 32% reduction from 33 (10.5 ÷ 33). The payment step stays at 10 because UPI app switching is part of how Indian shoppers pay. The team keeps it but adds UPI intent buttons for the shopper’s installed apps.
In an A/B test on 20,000 checkout starts per arm, order completion moves from 38.0% to 42.5%. That is 900 extra orders per 20,000 starts (20,000 × 4.5%). At an average order value of ₹899, that is about ₹8.1 lakh of extra revenue per 20,000 starts. The team then reads the step data: login drop-off fell from 28% to 12%, which confirms most of the gain came from the highest-weighted change.
B2B SaaS vs D2C: what changes
Each flow has different heavy hitters. Use the tabs to compare.
Where friction hides
Typical heavy items: email verification before entry (context switch), password rules (errors), long qualification forms (fields), plan choice before trying (decision).
- Allow Google or Microsoft sign-in to remove password fields
- Let users in first, verify email before sensitive actions
- Enrich company and size from the email domain instead of asking
- Ask one personalising question at most, such as role or main goal
Typical heavy items: connect integration (context switch to another tool and often an admin), import data (wait), invite team (decision plus finding emails).
- Offer sample data so the first session works before the integration exists
- Let users forward the setup task to an admin with one click
- Ask for industry or team size only when it unlocks a template or benchmark
- Track profile completeness as a metric, not a gate
Typical heavy items: forced account creation, long address forms, surprise shipping cost (decision at the last step), payment app switching.
- Offer guest checkout with phone OTP
- Autofill city and state from pin code
- Show delivery cost and date on the product page, not at the end
- Offer local payment methods and a clear COD option with any fee shown early
- Ask for birthday, skin type or preferences after the order, in exchange for personalised recommendations
B2B products can often afford a little more friction if it qualifies leads for sales, but that should be a deliberate trade measured in pipeline, not a default. D2C checkouts should be as close to zero-decision as possible: every extra choice at the payment step competes with the shopper’s doubt about whether to buy at all.
How to measure it
- Friction score per flow and per step, re-scored after every release that touches the flow.
- Step completion for the same period and segment as the audit. Mobile and desktop separately.
- Time on step (median), because waits and context switches show up as time even when completion looks fine.
- Error rate per field. A field with a 15% validation error rate deserves a higher weight.
- Progressive profiling yield: share of users who answer each deferred question within 30 days, and whether answering correlates with better retention.
- Window and cohort: compare the same weekday mix and traffic sources before and after. Use an A/B test whenever traffic allows.
Templates
Friction scoring table (copy into a sheet; one row per step):
| Step | Fields (×1) | Optional (×0.5) | Sensitive (×2) | Decisions (×2) | Waits (×3) | Context switches (×5) | Step score | Step drop-off % | Action |
|---|---|---|---|---|---|---|---|---|---|
| Delete / defer / infer / default / simplify |
Progressive profiling plan (one row per question you moved out of signup):
| Question | Why we need it | Can we infer it? | When we ask | What the user gets for answering |
|---|---|---|---|---|
| Industry | Benchmarks, routing | Partly, from domain | First time they open reports | Industry benchmark on their dashboard |
| Team size | Pricing, sales routing | Partly, from enrichment | When they invite a teammate | Suggested plan and seat count |
| Skin or hair type | Recommendations | No | After first order | Personalised routine and refill reminder |