Designing Trust

Testing GSM’s Biggest Bet with Its Smallest Feature

Year

'24

Company

GSM

Role

Senior Product Designer

Authentication

Authentication

From a Magazine to a Marketplace

GSM – inspired by GSMArena – has built 14 years of credibility as a mobile-tech media brand in Iran. It’s now expanding into marketplace, selling that credibility as a guarantee and turning readers into buyers. After redesigning PLP and PDP for marketplace, the final piece of the MVP was the purchase flow.

The Bet: Trust Is The Product

Working with the PM and engineers on the business model and operational constraints, I proposed an authentication-only flow: a user submits their name, phone number, and desired phone model (just like a checkout, minus payment) and GSM’s ops team closes the sale by phone within 30 minutes.

This is a concierge model, deliberately:

  • Volume is low and quality-controlled by design

  • The guarantee is the product being sold, not the transaction

  • Trust needs a human touchpoint at this stage — the 30-minute promise is the value proposition

Why Not Build the Full Vision First

The original ambition was closer to true O2O: browse on GSM, place a hold on a specific phone with a retail partner, inspect and pay in store. I recommended against building this first. It requires retail partnerships, hold logistics, and a deposit mechanism; all expensive, all slow, all in service of a demand we hadn’t yet validated.


O2O vs. Concierge Marketplace same entry point, different infrastructure cost O2O needs partnerships, holds, and deposits; Concierge needs only a phone line.

figure 01 - O2O vs. Concierge Marketplace - same entry point, different infrastructure cost. O2O needs partnerships, holds, and deposits; Concierge needs only a phone line.


Instead, I stripped the guarantee to its smallest testable unit: a verified phone number plus a 30-minute human handoff. No retailers, no reservations, no deposits. If demand holds up under this leaner version, it justifies the harder investment. If it doesn’t, we learn that without building a single retail integration.

What Would Prove the Bet

  • Purchase-request → completed-sale conversion
    the closest proxy for whether the guarantee closes deals

  • Trust persistence
    proxied through content engagement

  • Qualitative signal from ops calls
    a direct-listening channel a pure digital funnel doesn’t have

Why Authentication Is the Instrument

Collecting a verified phone number is the signal that triggers ops to start their process; so the authentication flow isn't just a gate, it's how a user expresses genuine intent to buy. Before we can prove the bet itself, we need to know that intent is actually getting through. If the flow leaks users who wanted to buy, we can't tell a real "no" from a broken step. That's why authentication's funnel health and error handling matter first:


figure 02 - authentication success flowchart


  • Authentication success rate: what % of attempts end in a successful session

  • Error signal quality

    • Retry-success rate: does the error message actually help the user recover?

    • Abandon rate: a high abandon rate after a specific error means the message or recovery path is broken

What the Test Read Back

I left GSM shortly after launch and lost access to the funnel dashboards, so the figures below are the ones I'd captured by then. On-site behavior matures in weeks; purchase-request → completed-sale conversion and trust persistence need cycles this MVP hadn't run yet. What follows is what the fast-maturing signals showed:

  • The guarantee closes mid-range phones and loses flagships.
    Our sales skewed low, and a competitor's annual report a month after launch explained why: installment plans dominate the high end. At flagship prices a buyer is solving a cash-flow problem, and a guarantee doesn't solve it, so the proposition needs either a financing partner or a deliberate narrowing to the range where it converts.

  • ~24% (n = 200, ±6pp) went looking for a profile page that didn’t exist.
    In a 200-order sample in Clarity, roughly one in four users went looking for an account or order area within ten minutes of submitting. Call transcripts gave the behavior a voice (the same return surfacing as "is this actually happening?") – a direct hit to the trust the whole model rests on. I flagged a lightweight order-status view as the top priority for the next iteration, ahead of full account infrastructure.

  • Farsi-numeral inputs broke phone validation.
    Users naturally typed phone numbers in Persian script; the validator couldn’t parse them, and the engineering fix wasn’t ready for launch. I designed a fail-state (logged in the error handbook) with copy guiding users to re-enter in Latin numerals, keeping the funnel alive until the real fix shipped.

Building the Instrument: Two-Phase Verification

Every SIM card in Iran is traceable to a unique ID, which makes validating a phone number at login the simplest form of identity verification available. I designed sign-up, sign-in, and authentication as a single shared flow, one system instead of three, which also meant engineering only had to build and maintain one path.

The flow has two phases:

  1. Capture and validate the phone number

  2. Dispatch, receive, and verify the OTP

figure 03 - WebApp Purchase Flow - anchoring on authentication

figure 03 - WebApp Purchase Flow - anchoring on authentication

Keeping the Reading Clean: 20 Failure States

Trust isn't won on the happy path. It's won in the moment something goes wrong and the system still tells the user the truth. And here it was structural as well as ethical: if a user who wanted to buy got stuck on a broken step, that drop-off would enter the data as a "no" – the one reading the whole test depended on. So before design handoff I worked with engineering to define every field constraint, its trigger, the exact user-facing message, and the system's behavior; 20 states across five failure domains:
format validation, OTP entry, expiry and rate-limiting, network failure, and accessibility

Five of them carried most of the judgment; three about what the system owes the user when something fails, two about what it's allowed to ask of them in return.

ID

Domain

What happens

Why it matters

EC-07

OTP entry

A 4-digit paste auto-distributes across boxes and submits

Removes friction from the single most common path

EC-10

Expiry + Rate-limiting

Code expires after 30 seconds, input boxes disabled, resend appears

Keeps the trust window short and explicit instead of letting an expired code fail silently later

EC-14

Expiry + Rate-limiting

After 5+ resend requests in 10 minutes, resend is hard-limited with a 10-minute wait message

Protects the SMS budget and the phone number from abuse while telling the user exactly when they can try again

EC-15

Network failure

A server error on verify doesn’t count as a wrong attempt

The system absorbs its own failures instead of penalizing the user for something that wasn’t their fault

EC-19

Accessibility

Each OTP box has an aria-label for its position; the countdown is announced every 15 seconds, not every second

Screen reader users get the same trust signal — a visible, ticking timer — without being overwhelmed by constant announcements

Trust isn't won on the happy path. It's won in the moment something goes wrong and the system still tells the user the truth. And here it was structural as well as ethical: if a user who wanted to buy got stuck on a broken step, that drop-off would enter the data as a "no" – the one reading the whole test depended on. So before design handoff I worked with engineering to define every field constraint, its trigger, the exact user-facing message, and the system's behavior; 20 states across five failure domains:
format validation, OTP entry, expiry and rate-limiting, network failure, and accessibility

Five of them carried most of the judgment; three about what the system owes the user when something fails, two about what it's allowed to ask of them in return.

ID

Domain

What happens

Why it matters

EC-07

OTP entry

A 4-digit paste auto-distributes across boxes and submits

Removes friction from the single most common path

EC-10

Expiry + Rate-limiting

Code expires after 30 seconds, input boxes disabled, resend appears

Keeps the trust window short and explicit instead of letting an expired code fail silently later

EC-14

Expiry + Rate-limiting

After 5+ resend requests in 10 minutes, resend is hard-limited with a 10-minute wait message

Protects the SMS budget and the phone number from abuse while telling the user exactly when they can try again

EC-15

Network failure

A server error on verify doesn’t count as a wrong attempt

The system absorbs its own failures instead of penalizing the user for something that wasn’t their fault

EC-19

Accessibility

Each OTP box has an aria-label for its position; the countdown is announced every 15 seconds, not every second

Screen reader users get the same trust signal — a visible, ticking timer — without being overwhelmed by constant announcements

UI | State Gallery and Prototype

UI shown in Persian as GSM's primary market is Iran.

Phone Number Entry States

Empty (inactive)

Empty (inactive)

Default (active)

Default (active)

Empty (inactive)

Typing

Loading

Loading

Error Empty Field (EC-01)

Error Empty Field (EC-01)

Empty (inactive)

Error Invalid Input (EC-02)

Connection Error (EC-16)

Connection Error (EC-16)

OTP Entry States

UI shown in Persian as GSM's primary market is Iran.

Phone Number Entry States

Default (code sent + timer running)

Default (code sent + timer running)

Partial Fill

Partial Fill

Verifying

Verifying

Error Incomplete Field (EC-05)

Error Incomplete Field (EC-05)

Wrong Code (EC-09)

Wrong Code (EC-09)

OTP Expired (EC-10)

OTP Expired (EC-10)

Server Error On Verify (EC-15)

Server Error On Verify (EC-15)

What I’d Do Differently and Where It Goes Next

Build the order-status view alongside the MVP, not after it. A concierge model front-loads all its reassurance into one promise (someone will call within 30 minutes) then goes silent on the channel the user was actually on. The error handbook protects trust during the flow and does nothing for the anxiety that arrives once it ends, which is exactly where one in four buyers went looking. A purchase you can't check on isn't a completed purchase cycle; minimum viable had to include it.

The price-tier finding is a product question with two honest answers. Either GSM partners on financing so the guarantee travels alongside an installment plan instead of competing with one or it narrows deliberately, positioning the guarantee where it demonstrably converts and letting go of flagship traffic that closes elsewhere. I'd test the narrowing first: it costs nothing, it's reversible, and it reads in weeks rather than quarters. The same argument that got us the concierge model instead of full O2O.
GSM has since shipped installment financing, which suggests the tier problem was real.

Fourteen years of reviews got someone to the form. A thirty-second countdown, an error message that told the truth about whose fault it was, and a status page that didn't exist decided whether they stayed. Trust isn't something a brand accumulates and then spends — which is why the biggest bet got settled in the smallest feature.

TL;DR

GSM is a 14-year-old mobile-tech media brand in Iran, and its real asset is that readers believe its reviews. Moving into a marketplace bet that readers would trust it enough to buy a phone on GSM's guarantee alone. The original plan tested that the expensive way: hold a phone at a partner store, then inspect and pay in person.

The bet

Test the cheapest version of the same promise. A verified phone number and a call back within 30 minutes, with ops closing the sale by phone. No payment, no reservations, no retailers. If demand held up here, it would justify building the full in-store version.

The system

A single path for sign-up, sign-in and verification (phone number, then OTP). Every SIM in Iran is registered to an ID, so a verified number works as a signature on intent to buy. That made authentication the instrument, not a gate. Before handoff it was specced against a 20-state error handbook, because a user stuck on a broken step would have counted as a "no."

The result

The guarantee closed mid-range phones and lost flagships, where competitors' installment plans beat trust. When Persian numerals broke phone validation and the engineering fix missed launch, a designed fail state kept the funnel alive until it landed.

The takeaway

Trust needs somewhere to land after the purchase, not only during it. About 1 in 4 buyers came back looking for an order-status page that didn't exist. Next time I'd build that view alongside the MVP, not after it.