Designing a checkout form without unnecessary fields
Every field is a point where some buyers leave. Count not the fields but the reasons you ask for them at all.
The minimum viable field set
For delivery, four fields suffice: name, phone, delivery address, comment. Everything else — city, district, payment method — is selected rather than typed.
Email is nearly always a redundant field locally: confirmations and statuses get read in Telegram and SMS, not inboxes. If you need it for receipts, make it optional.
Forced registration before checkout is the costliest mistake here. Guest checkout with an account auto-created from the phone number after a successful order performs better and loses nothing.
Phone: format, mask, validation
Pin the +998 prefix as a non-editable part of the UI and let the user type nine digits. A (__) ___-__-__ mask reduces errors and signals expected length.
Validation should accept any input form — spaces, brackets, dashes — and normalise before submission. Rejecting a number over a space is a guaranteed lost lead.
Verify the number by SMS code only where justified: high-value orders, prepayment, account access. For routine retail, the extra confirmation step costs more conversion than it saves in fake orders.
Address and delivery
In Tashkent and the regions people describe addresses by landmarks, not street and house number. One free-text Address field with a format hint beats separate street/house/apartment inputs.
City and district should be dropdowns that drive delivery cost and timing. The total must recalculate on selection, with no page reload and no 'calculate' button.
A map with pickup points or delivery zones helps, but load it lazily on click: embedded maps are among the heaviest page elements and visibly stall the form on 3G.
Payment and where it sits in the flow
Show payment methods as recognisable icons: Payme, Click, Uzum, cash on delivery, Humo or Uzcard. A familiar logo answers 'does my bank work here' before it is asked.
Cash on delivery remains a meaningful share of orders; removing it in favour of 'cashless culture' costs revenue. Keep it as an equal option.
Redirecting to the gateway is a loss point. Persist the order with a pending-payment status before the redirect so a dropped connection does not erase the lead and a manager can call back.
Errors, states and feedback
Show errors under the specific field on blur, not after the submit button. A single red 'fix the form' banner forces users to hunt visually.
Do not disable the submit button until everything is filled — the user then cannot tell what is missing. Let it be pressed and scroll to the offending field.
After the press, the button must enter a loading state and go inactive. Without it, slow connections generate duplicate orders from repeat taps that someone untangles by hand.
Accessibility and technical correctness
The right input type changes the mobile keyboard: tel for phone, email for email, inputmode="numeric" for amounts. Correct autocomplete values let a form fill in one tap.
Every field needs a real label rather than a placeholder standing in for one: placeholders vanish on typing, and screen readers do not treat them as labels.
Keep the UZS order total permanently visible, pinned to a bottom bar on mobile. A total you have to scroll for increases abandonment.