The Journal

Interface Craft3 min read

Building Forms That Don't Make Users Want to Quit

Forms are where most users drop off. Here's how to build forms that are easy to fill out, validate properly, and actually feel good to use.

Forms are where users quit. Every bit of friction — a label that vanished, an error that fires while you’re still typing, a layout that zigzags across the page — costs you completions. Good forms aren’t clever. They’re calm, and four rules get you most of the way. The good news is that the fixes are boring, and they all work.

Keep labels visible

Placeholder-as-label is the most common form bug. The moment someone types, the label is gone, and now they’re guessing which field they’re in. Put a real <label> above every input and leave it there. Placeholders are for a format hint — you@company.com — not the field name. Tie that <label> to the input with htmlFor so screen readers announce it too, not just sighted users.

Validate on blur

Don’t validate on every keystroke. Flagging invalid email while someone is on the second character is nagging, not helping. Wait for blur — when they leave the field — to run the first check. Once a field has errored, then re-check on input so they watch it clear in real time.

Say how to fix it

“Invalid input” tells the user nothing. Error copy has one job: say what’s wrong and how to fix it. “Password needs at least 8 characters” beats “Invalid password” every time. Put the message right under the field, don’t rely on red alone, and never wipe what they already typed.

One column

Side-by-side fields make the eye zigzag, and the second column gets skipped. Stack everything in a single column so there’s one clear path down the page. The one fair exception is tightly related pairs — city and state, expiry and CVC — that read as a single unit. Everything else goes top to bottom. A single column also keeps the form narrow, which reads faster and drops onto a phone with no rethink.

Ship it

Labels above, validation on blur, errors that name the fix, one column top to bottom. None of it is hard; it’s just usually skipped. Fix these four and your completion rate climbs before you touch anything fancier.

Frequently asked questions

How do I build forms with higher completion rates?
Follow four rules: keep a visible label above every input, validate on blur rather than on every keystroke, write errors that say how to fix the problem, and stack fields in a single column. Each removes friction at the points where users typically drop off.
When should form validation fire, on keystroke or on blur?
Validate on blur, when the user leaves a field, not on every keystroke, since flagging an invalid email on the second character nags instead of helps. Once a field has errored, re-check on input so the user watches it clear in real time.
Should form fields be laid out in one column or two?
Stack fields in a single column so there is one clear path down the page; side-by-side fields make the eye zigzag and the second column gets skipped. The only fair exception is tightly related pairs like city and state or card expiry and CVC.