How to design forms people actually finish
Form design best practices from clinical software: fewer fields, inline validation that respects the person, and error states designed before the happy path.
A form gets finished when three things are true: it asks for less than the person expected, it tells them how they are doing while they type instead of after they submit, and its error states were designed with the same care as its happy path. Almost every abandoned form fails on one of those three. Most fail on all of them.
I learned to take forms seriously in the least forgiving setting I have worked in. On Avalon, the mobile EMR I designed at CureMD, physicians filled in forms at the point of care, standing, interrupted, with a patient in front of them. The Add Patient flow used inline validation because in that context a rejected submission is not a minor annoyance, it is a person waiting while software argues with their doctor. Nothing about a checkout, a signup, or a contact form is that demanding, which is exactly why the same standards make ordinary forms feel effortless.
Every field has to pay rent
The fastest improvement available to most forms is deletion. Every field is a small tax on the person filling it, so every field has to justify itself with a real downstream use. Not "might be nice for the sales team". A use, this quarter, that someone can name.
The audit is simple to run. List the fields, and next to each one write who consumes the answer and what breaks without it. Fields with an empty second column go. Fields that are genuinely optional get marked optional, and if most of the form turns out to be optional, split it: collect the essentials now, ask for the rest after the person is in, when the relationship exists and the ask feels smaller. A shorter form is not a dumber form. It is a form that respects the order in which trust is built.
Validate while they type, not after they submit
Submit-time validation punishes people in a batch. They did their part, pressed the button, and got handed back a list of failures to sort through. Inline validation moves the same information to the moment it is useful, next to the field, while the context is still in the person's head.
The craft is in the timing. Validate on blur, when the person leaves a field, not on every keystroke, because flagging an email as invalid while someone is halfway through typing it is the software equivalent of interrupting mid-sentence. Show success quietly and errors clearly. And never make the person guess at hidden rules: if the password needs a number, say so next to the field before they fail, not in red after. A rule revealed only by breaking it is not validation, it is a trap.
The other half of this is keeping what the person already gave you. A form that clears itself on error has decided its own tidiness matters more than the person's five minutes. It is the single fastest way to turn a recoverable mistake into an abandoned session.
Design the error state first
Here is the habit that clinical work left me with: design the error state before the happy path. The happy path is easy and everyone will polish it anyway. The error state is where the form actually earns trust, because it is where the person is confused, mildly embarrassed, and deciding whether to push on or leave.
A good error message names the field, says what is wrong in plain words, and says what right looks like. "Card number is one digit short" beats "Invalid input" in every measurable and unmeasurable way. Color alone is not enough to mark the failure; pair it with an icon and text, both because some people cannot distinguish the color and because WCAG is the floor here, not a stretch goal. And when the error is the system's fault, the form should say that too. Blaming the person for a server timeout is a small dishonesty, and people feel it.
Labels and microcopy carry more of this weight than they get credit for. Labels sit above fields, always visible, never as placeholder text that vanishes the moment typing starts. Hints live next to the field they explain. The submit button says what actually happens next: "Create account", "Send message", not "Submit", because at the exact moment of commitment, vagueness reads as risk.
The finish line is part of the form
The last state most forms never design is the one after success. A form that ends in a silent page reload leaves the person unsure whether anything happened, and unsure is the feeling forms exist to eliminate. Confirm plainly, say what happens next, and mean it. When I built the contact form for this site, the success state got the same design attention as the fields, because the confirmation is the moment the form keeps its promise.
If you want to see how these choices fit into a whole product rather than a single flow, the Avalon case study covers the clinical context this thinking came from, and forms like these are part of the day-to-day of my product and UI/UX design work. The same refusal to let color carry meaning on its own runs through dark mode done right.
The checklist
Delete every field that cannot name its consumer. Mark the true optionals or move them after the door. Validate on blur, state the rules before people break them, and keep their input through every failure. Design the error state first, in plain words, with more than color carrying the news. Label above the field, hint beside it, and a button that says what it does. Then design the success state like it matters, because it is the only part of the form the person takes with them.
Forms are the most honest surface a product has. They are where the product stops talking and starts asking. Ask for little, respond while it matters, and fail with grace, and people will finish what you put in front of them.