Expert Guide Series

How Can I Design Forms That People Actually Finish?

Most people abandon forms within the first few seconds of starting them—before they've even filled in their first field. I've analysed thousands of form submissions across apps I've built for healthcare providers, fintech companies and e-commerce platforms, and the patterns are pretty consistent. Users take one look at the form, make a split-second judgment about how much effort its going to require, and then either commit or bail. That initial impression is everything, which is why form design matters far more than most people realise.

In my years building mobile apps, I've seen forms kill conversion rates faster than almost any other design problem. You could have the most beautiful app interface in the world, but if your sign-up form asks for twelve fields of information before someone can create an account? You've already lost them. The frustrating thing is that form design isn't complicated—it just requires thinking about what you're asking people to do and why you're asking them to do it. Every single input field you add is another barrier between your user and whatever value your app provides.

The best form is the one that doesn't exist at all, but when you must include one, make every field justify its presence.

I'll be honest, I've designed some terrible forms in my time. Early in my career I built a registration form for a health app that asked users to fill in their medical history upfront—before they'd even seen what the app could do for them. The completion rate was abysmal, like genuinely embarrassing. That taught me a valuable lesson about progressive disclosure and earned trust. These days I approach every form with a degree of scepticism; if a client tells me they need ten required fields, I push back and ask them to prove why each one is necessary at that exact moment.

Why Most Forms Fail Before Users Even Start

Forms fail because people look at them and immediately think "bloody hell, not worth it." I've tested dozens of forms across healthcare booking apps and fintech onboarding flows, and the abandonment rate at the first screen is genuinely shocking—sometimes hitting 60% before anyone even taps a single field. The problem isn't usually what you think it is though. Its not that your form is too long (although that doesnt help); it's that users can't tell how long its going to take or why they should bother completing it in the first place.

When we rebuilt a property rental app's registration form, the original version asked for 14 fields right off the bat. Name, email, phone number, address, employment status—the whole lot crammed onto one endless scrolling screen. Drop-off rate was around 73%. We didn't actually remove any fields at first; we just added a simple line at the top saying "Takes about 2 minutes" and broke it into three clear steps. Completion rate jumped to 41% overnight. People need to know what they're getting into before they commit to starting.

The other silent killer? Forms that look complicated even when they're not. I worked on an insurance quote form that had conditional logic—questions only appeared based on previous answers—but users saw hints of hidden fields and assumed it would take ages to complete. We ended up hiding those visual cues entirely and showing a progress bar instead. Completion rates improved by 28%. Sometimes the perception of complexity matters more than actual complexity, and that's something I learned after watching hundreds of user testing sessions where people would literally say "this looks like too much work" before reading a single word. Understanding what makes some apps appear more complex than others helped me design forms that feel approachable even when they collect substantial information.

Getting the Basics Right With Input Fields

Input fields are where forms live or die, honestly. I've seen a well-funded fintech app lose 40% of users during registration because they used the wrong keyboard types—sounds ridiculous, but it happens more often than you'd think. The basics matter more than fancy design flourishes, and getting them right is actually pretty straightforward once you know what to look for.

First thing: match your input type to the data you're collecting. If you need a phone number, use type="tel" so the numeric keyboard appears automatically. Email addresses? Use type="email" so users get the @ symbol without hunting for it. I worked on an e-commerce app where we switched the postcode field to use the proper input type and saw a 23% reduction in form errors. Small change, massive impact. But here's the thing—you also need to consider field length and validation rules at the same time, because its no good having the right keyboard if your field cuts off after 10 characters and someones email is longer than that.

Essential Input Field Requirements

  • Use appropriate input types (tel, email, number) to trigger correct mobile keyboards
  • Set autocomplete attributes so browsers can fill fields automatically—this is huge for mobile users
  • Make tap targets at least 48x48 pixels; anything smaller and people will mistype constantly
  • Use clear, visible labels above fields, not placeholder text that disappears
  • Enable autofocus on the first field so users can start typing immediately
  • Turn off autocorrect for names, emails and unique identifiers where it causes more problems than it solves

One mistake I see constantly is using generic text inputs for everything. A healthcare app I worked on was asking for dates of birth with a standard text field—users had to manually type "01/12/1985" which took ages and created loads of formatting errors. We switched to a proper date picker and form completion jumped by 34%. The right input field isn't about looking clever; its about removing friction from something people already don't want to do. When working on GDPR compliant healthcare apps, these input improvements become even more crucial since you're often collecting sensitive patient data that needs to be accurate.

Test your forms on actual devices, not just simulators. I've caught countless issues where the keyboard covered the submit button or autocomplete wasn't triggering properly—problems that only show up on real phones in real conditions.

Making Mobile Forms Work Properly

Mobile forms are a completely different beast to desktop ones and honestly, it took me a few failed projects early on to really understand why. The screen size is smaller, people are often filling them in while doing something else (waiting for a bus, standing in a queue), and typing on a mobile keyboard is just slower and more prone to errors. I've seen conversion rates drop by 60% or more when a desktop form is simply shrunk down for mobile without proper consideration—it's a bit mad really how much damage it does.

The most important thing you can do is match the keyboard type to the input field. When someone needs to enter their phone number, show them the numeric keypad. For email addresses, give them the email keyboard with the @ symbol easily accessible. This sounds basic but you'd be surprised how many apps get it wrong; we built a healthcare app where patients needed to enter their NHS number and initially the default keyboard showed up—after switching to numeric input, completion rates jumped by 40%. Same goes for postal codes, dates, and anything else with a specific format.

Input Types That Actually Matter

Here's what I use for different field types and why each one makes a difference:

  • type="tel" for phone numbers—brings up the numeric keypad immediately
  • type="email" for email addresses—adds the @ and . to the keyboard
  • type="number" for quantities and numeric values—though be careful as this can be temperamental on some Android devices
  • type="date" for date fields—shows a proper date picker instead of making people type it manually
  • inputmode="decimal" for prices—allows decimal points which type="number" sometimes restricts

Autofill Can Save You

Autofill support is absolutely massive for completion rates but its often overlooked during development. When you add the proper autocomplete attributes to your fields, mobile browsers can automatically fill in names, addresses, payment details, all sorts of stuff. We implemented this properly on an e-commerce app and saw mobile checkout completion increase by 35%—people could complete a purchase in under 30 seconds because they weren't manually typing everything. Use autocomplete="name" for full names, autocomplete="email" for emails, autocomplete="postal-code" for postcodes... there's a full spec of values you can use. The catch? You need to use the exact attribute values that browsers expect, otherwise it just wont work at all. This attention to detail is part of what makes some apps beat their rivals consistently—they get the fundamentals right while competitors overlook these crucial user experience improvements.

Reducing Form Friction and User Effort

Every extra tap costs you completions. I mean it—we tested a fintech app where moving the submit button 50 pixels lower (making users scroll) dropped completion rates by 11%. Its mad how sensitive people are to even tiny amounts of extra effort, but once you see it in the data enough times you start designing forms completely differently.

The single biggest win we've had across multiple projects is reducing the number of fields people actually need to fill in. I worked on an e-commerce checkout where the client insisted on collecting 17 pieces of information upfront; completion rate was stuck at 23%. We cut it down to just 6 required fields and made everything else optional or automated through smart defaults—completion jumped to 61% almost overnight. Sure, they collected less data per user, but they had nearly three times as many completed transactions so the total data they gathered actually increased. You can often use simple game tricks to make boring tasks feel more engaging, like showing progress celebrations when users complete sections of longer forms.

The fastest form is the one that fills itself out

Auto-fill is your best friend here but you need to implement it properly with the right HTML attributes. Use autocomplete="email" for email fields, autocomplete="tel" for phone numbers, and so on—it sounds basic but I still see apps getting this wrong. On a healthcare booking form we built, proper autocomplete implementation reduced average completion time from 3 minutes 20 seconds to just 47 seconds because returning users barely had to type anything.

Input masks help too, especially for formatted data like phone numbers or payment cards. But here's the thing—don't be too strict with validation. If someone enters a phone number with spaces or dashes, just strip them out on your end rather than making them fix it. I've seen users abandon forms because they formatted something "wrong" even though any decent backend can handle it.

Validation Messages That Actually Help

I see this mistake constantly—validation messages that tell users "Invalid input" or "Error in field" without explaining what's actually wrong or how to fix it. Its useless, honestly. When I built a healthcare booking app a few years back, we initially had generic error messages and watched our form completion rate sit at around 42%. After rewriting every single validation message to be specific and helpful, that number jumped to 68%. The difference? Instead of "Invalid phone number" we said "Phone numbers need 11 digits, like 07700 900000".

Here's the thing—validation should happen at the right moment, not too early and definitely not too late. If someone's typing their email and you're showing red error messages before they've even finished typing? That's what I call aggressive validation and it pisses people off. I learned this the hard way on an e-commerce project where we were validating in real-time as users typed; our usability testing showed people getting visibly frustrated, some even abandoning the form out of sheer annoyance. This kind of user experience problem can be just as damaging as when AI gets your app users completely wrong—both create friction that drives people away from completing their intended actions.

When to Show Validation Messages

The timing really matters here. I use what I call "polite validation"—wait until the user has finished with a field (on blur, in technical terms) before showing any errors. The exception? Positive validation. If someone's entered their email correctly, showing a subtle green tick immediately is fine because it reinforces they're doing well. But negative messages? Hold off until they've moved to the next field.

Writing Messages That Actually Help

Your validation messages need three things: what went wrong, why it matters, and how to fix it. Look at these examples from projects I've worked on:

  • Bad: "Password invalid" — Good: "Your password needs at least 8 characters, including one number"
  • Bad: "Format error" — Good: "Dates should be written as DD/MM/YYYY, like 25/12/2023"
  • Bad: "Required field" — Good: "We need your postcode to calculate delivery costs"
  • Bad: "Invalid card" — Good: "This card number has 15 digits, but most cards have 16"

On a fintech app I worked on, we had particular trouble with the sort code field—users would include spaces, hyphens, all sorts. Instead of rejecting their input, we stripped out the formatting automatically and validated the underlying numbers. When there was a genuine error, our message said "Sort codes are 6 digits, usually written like 12-34-56". That small change reduced validation errors on that field by about 73%. These security considerations become even more important when you understand why your app database needs more than just password protection—proper input validation is a crucial first line of defense.

One more thing... inline validation (showing messages right next to the field) works way better than having all errors listed at the top of the form. I've tested both approaches multiple times across different projects and inline consistently wins because users don't have to scroll up and down trying to figure out which field has the problem. Make it obvious, make it close to where the issue is, and make it helpful.

Progress Indicators and Multi-Step Forms

Breaking long forms into multiple steps is one of those things that sounds simple but can go wrong in about fifteen different ways if you're not careful. I've worked on everything from insurance quote forms that needed thirty fields to onboarding flows for fintech apps where we had to collect sensitive financial data, and the difference between a multi-step form that people complete versus one they abandon often comes down to how you handle the progress indicator.

The biggest mistake I see? Lying to users about how much is left. If your progress bar jumps from 60% to 65% after they've filled in ten fields, then suddenly crawls from 90% to 95% over the next twenty fields, people notice—and they get annoyed. I learned this the hard way on an e-commerce checkout project where we weighted the progress bar by "importance" rather than actual steps remaining. Completion rates dropped by 12% until we fixed it to show honest progress based on actual screens left. Getting these details right is especially crucial for complex applications—understanding what makes some apps cost significantly more to build often comes down to properly implementing these seemingly simple features that actually require careful planning and execution.

You've got two main options for showing progress: step indicators (like "Step 2 of 5") or a progress bar. Step indicators work better when you have fewer than six steps and each step has a clear purpose users can understand. Progress bars work better for longer forms where the exact number of steps might vary based on user input. I'll usually pick step indicators for things like account creation (Personal Details → Contact Info → Verification → Done) and progress bars for complex forms like loan applications where the path isn't always linear.

Let Users Save Their Progress

Here's something that really matters for longer forms but often gets skipped because its more work to implement—the ability to save and return later. On a healthcare app we built that collected detailed medical history, we added a "Save & Continue Later" button on each step. The completion rate for the full form went up by 23% because people could tackle it in chunks rather than feeling pressured to finish in one sitting or lose everything they'd entered.

Always show users where they are and how much is left, but be honest about it—if step 3 has twice as many fields as step 2, your progress bar should move half as fast to reflect that reality.

What Actually Goes in Each Step

The way you group fields into steps makes a massive difference to whether people complete the form. I try to put related information together in ways that make sense to users, not in ways that match our database structure. For a property rental app, we grouped fields like "Property Address" and "Property Type" together in one step, then "Rent Amount" and "Available From" in the next, rather than mixing them all up or grouping by data type. Each step should feel like it has a purpose users can understand... not just "random collection of fields number three." These design decisions often benefit from professional animation styles that guide users smoothly between steps and provide visual feedback about their progress.

You also want to consider which steps might make people quit. On forms where we need sensitive information like financial details or ID documents, I'll put those later in the flow after users have already invested time in the earlier steps. But not too late—if someone's going to quit because they don't want to provide that information, better they find out at step 3 than step 7 after wasting their time. Its a balance between commitment and not wasting peoples time on a form they'll never complete anyway.

Testing Your Forms With Real Users

I've lost count of how many times I've watched someone struggle with a form that the client swore was "perfectly simple." You can test your form yourself all day long but you already know how it works—you built it! Real users? They'll find problems in the first 30 seconds that you never spotted in weeks of development. One fintech app we built had what seemed like a straightforward account opening form; during our first user testing session three out of five people got stuck on the address field because they lived in flats and didnt know whether to put their flat number in address line one or two. Seems obvious now but we hadn't considered it at all.

User testing doesn't need to be expensive or complicated. Sure, you can hire a proper testing lab with eye-tracking equipment and one-way mirrors (and for big projects its worth it) but honestly? Five people testing your form will reveal about 85% of usability issues. I usually start with what's called hallway testing—literally grabbing people from around the office who weren't involved in the project. Give them a specific task like "sign up for an account" or "complete this checkout" and then shut up. Don't help them. Don't explain anything. Just watch and take notes. This approach is similar to testing app ideas before building them—you want honest, unbiased feedback about whether your concept actually works in practice.

What To Watch For During Testing

When observing users, you're looking for specific behaviour patterns that indicate problems. Here's what I focus on:

  • Hesitation before filling a field—means the label or placeholder text isnt clear enough
  • Going back to change previous answers—suggests the form structure or flow is confusing
  • Multiple attempts at the same field—validation rules might be unclear or too strict
  • Asking questions out loud—direct feedback about what's not working
  • Abandoning the form entirely—the ultimate failure signal that something's seriously wrong

Making Testing Part of Your Process

Testing should happen early and often, not just before launch. For a healthcare app we developed, we tested the patient registration form at three stages: wireframe mockups (to test the flow), interactive prototype (to test the interactions), and beta version (to test performance). Each round uncovered different issues. The wireframe testing revealed we were asking for too much information upfront; the prototype testing showed our date picker was confusing for older users; the beta testing caught a keyboard issue on Android devices that was covering the submit button. If we'd waited until the end to test we would've had to rebuild significant portions of the form. Knowing when to launch your app's beta test is crucial for getting this kind of valuable user feedback at the right stage of development.

Remote testing tools like UserTesting or Lookback make it easier to get feedback from your actual target audience. For an e-commerce client targeting over-50s shoppers, we specifically recruited testers in that age group because their needs were very different from our mostly-twentysomething development team. They struggled with smaller touch targets and lighter text colours that we thought looked great—problems we never would've found without testing with real representatives of the target market. This kind of thorough testing is essential for avoiding rating disasters that can seriously damage your app's reputation and download rates.

Conclusion

Look, I've built hundreds of forms across all kinds of apps—healthcare booking systems, fintech onboarding flows, e-commerce checkouts—and honestly, the difference between a form that gets completed and one that gets abandoned usually comes down to how much you respect peoples time. Its not about fancy animations or clever design tricks; its about removing every possible excuse someone has to give up halfway through. When we redesigned a checkout form for an e-commerce client, we went from 7 screens down to 3 and saw completion rates jump by 34%. That wasn't magic—it was just removing unnecessary friction.

The biggest mistake I see? Developers and designers treating forms like data collection exercises instead of conversations. Every field you add is asking someone to stop what they're doing and give you something. Make sure you actually need it. I mean really need it, not "it would be nice to have" need it. And here's the thing—testing with real users will always expose problems you never saw coming. Always. I can't tell you how many times I've watched someone struggle with something I thought was obvious, only to realise we'd designed it for ourselves, not for them.

Start small. Pick your worst-performing form and apply what you've learned here—better input fields, clearer validation, fewer steps. Measure the results. Then move on to the next one. Good form design isn't about perfection; its about continuous improvement based on what your actual users are telling you through their behaviour. You know what? If you focus on making just one form easier to complete this month, you'll be ahead of 90% of apps out there.

Frequently Asked Questions

How many form fields is too many for mobile users?

In my experience testing forms across healthcare and fintech apps, anything over 6 required fields upfront kills completion rates—I've seen drop-offs as high as 73% with 14-field forms. The sweet spot is 3-4 essential fields initially, with optional or progressive disclosure for everything else.

What's the biggest mistake people make with form validation messages?

Generic error messages like "Invalid input" are useless—I've seen completion rates jump by 26% just by making validation messages specific and helpful. Instead of "Password invalid," write "Your password needs at least 8 characters, including one number" so users know exactly how to fix the problem.

Should I use a progress bar or step indicators for multi-step forms?

Step indicators work better for fewer than 6 steps where each has a clear purpose (like "Personal Details → Contact Info → Verification"), whilst progress bars suit longer, variable-length forms like loan applications. The key is being honest about progress—if step 3 has twice the fields of step 2, your progress bar should move half as fast.

How important is mobile keyboard optimisation really?

It's absolutely crucial—I've seen 40% completion rate improvements just from using the right input types like type="tel" for phone numbers and type="email" for email addresses. When users get the wrong keyboard, they struggle to type efficiently and often abandon the form entirely.

When should I show form validation errors to users?

Wait until users finish with a field (on blur) before showing negative validation—aggressive real-time validation pisses people off and I've seen it cause complete form abandonment. The exception is positive feedback like green ticks, which you can show immediately to reinforce they're doing well.

How can I test if my forms actually work for real users?

Start with hallway testing—grab 5 people who weren't involved in building the form and watch them complete it without helping or explaining anything. I've caught countless issues this way that weren't obvious during development, like keyboard covering submit buttons or confusing field labels that seemed perfectly clear to the design team.

Is it worth implementing autofill and autocomplete features?

Absolutely—proper autocomplete implementation reduced completion time from 3 minutes 20 seconds to 47 seconds on a healthcare form I built, and we saw 35% higher mobile checkout completion on an e-commerce app. Use the exact HTML attributes browsers expect like autocomplete="email" and autocomplete="postal-code" or it won't work at all.

How do I know which form fields are actually necessary?

Challenge every single field by asking if you genuinely need it right now, not just whether it would be nice to have. On one e-commerce project, cutting required fields from 17 to 6 nearly tripled completion rates—and we actually collected more total data because so many more people finished the form.

Subscribe To Our Learning Centre