Building Forms People Actually Complete
Most form abandonment is not caused by length. It is caused by uncertainty — not knowing what is expected, what went wrong, or how much is left.
I have built a lot of forms — booking flows, multi-step intake forms, checkout. The completion rate difference between a careless form and a considered one is enormous, and almost none of it is about how many fields there are.
Validate at the Right Moment
Validating while someone types tells them their half-typed email is invalid. Validating only on submit makes them hunt for what broke.
The pattern that works: validate on blur, then re-validate on input only after that field has already errored — so the error clears as soon as they fix it.
Error Messages Must Say What to Do
"Invalid input" is not a message. "Enter a date after today" is. Every error should name the field, describe the problem, and state the fix.
Use the Right Input Type
<input type="email" inputmode="email" autocomplete="email">
<input type="tel" inputmode="tel" autocomplete="tel">
On mobile this changes the keyboard that appears. Getting it wrong makes a two-second field take fifteen.
Autocomplete Is Free Conversion
Correct autocomplete attributes let the browser fill an address in one tap. Developers disable it far more often than any user has asked them to.
Labels, Not Placeholders
Placeholder-only labels disappear the moment someone types, so nobody can check their work — and screen readers handle them inconsistently. Use a real <label>.
Show Progress on Multi-Step Forms
"Step 2 of 4" costs nothing and dramatically reduces abandonment. Validate each step before advancing, and never lose entered data when someone goes back.
Save Drafts
For any long form, persist to localStorage as they type. A dropped connection or an accidental refresh should not cost someone ten minutes.
Disable the Submit Button While Submitting
Otherwise you will get duplicate records. Disable it, change the label to "Sending…", and re-enable on failure.