We have a difficult form in our application.

There are all sorts of inputs: start date, end date, full name, phone and e-mail address, and a section for count of people in rooms (adult/child...).

The basic requirement is that the form can be filled very quickly.
My question is: which inputs choose for this form - especially for table with counts?

enter image description here

  • 2
    We'll need some more details, I suppose ... Why do you judge the form "difficult"? Can you show us a sketch of it, and why you aren't satisfied with it? Is it a website, mobile app or desktop application? Etc.
    – giraff
    Aug 16, 2011 at 8:53
  • And can you expand on the rooms aspect - is it that you need to say there are x adults and y children in each of z rooms? i.e. How many variables? Aug 16, 2011 at 9:21
  • Thanks for the reply. Form is difficult becouse contains too much information and it's core of our project. User selects rooms (it is possible to select multiple rooms), date on calendar and then form shows up. Then user have to fill personal information and count of adult/children on every selected room. x = room count y = person type count (adult/child/...) You have to set x*y variables. For example: If you select 4 rooms (and you have 3 person type), you have to set 12 variables. Aug 16, 2011 at 12:04
  • Can you add a screenshot/mockup of what you already have? I think I kind of understand what the form is about but am not sure.
    – Marielle
    Aug 16, 2011 at 14:46
  • Another question: how often is this form used? It may be very quick to fill in, but difficult. But a user using it the first time will prefer the contrary: easy choices, even if it takes a little longer.
    – giraff
    Aug 16, 2011 at 15:21

2 Answers 2


There are a few general tactics for maximizing speed of completion, keeping in mind that time to completion includes both the mechanical motion necessary to make entries and any time spent thinking or preparing to make an entry. How you apply these tactics depends on the task (mostly the form and patterns in the data to be inputted) and the amount of knowledge, skill, experience, and training your users will have. Proper optimization will require user research.


Most important is to default fields to the most common value. If rooms are typically needed on the current date, then default the Start Date to the current date (or at least default the year to the current year). If rooms are typically only needed overnight, then default the End Date to one day after the Start Date. If there are typically zero children, then default the Children fields to 0. Determine your defaults through user research, possibly through archival records for the current system they use.

Even if the default value is only correct a fraction of the time, it still means less typing. This assumes your users are experienced enough to realize that when they enter a field and the default value is highlighted, they can simply type an alternative value, not backspace or delete the existing value first. That’s a something you can determine through some brief user observation.

Free-form Fields

Generally, users are faster at typing familiar text if it all goes in one text box. This saves field navigation time and maintains the user’s train of thought. Dates, name, phone number, and email should each be a single text box. Do not have a separate field for the phone number area code. Avoid having separate first and last name fields.

All fields, including the date fields, should be especially tolerant of a wide range of formats to prevent time-consuming validation errors. For example, the phone number field should accept any special character as delimiters –and accept no delimiters. Users familiar with the number pad should not have to move their hands to type a parenthesis around the area code.

While date fields should accept typed dates, each should also have a dropdown to select from a calendar. Otherwise, some users will be slower as they refer to an external calendar before entering their dates.

Minimize keyboard-mouse transitions

At least some of your fields must be completed by the keyboard, so try to make all your fields completable without the fingers leaving the keyboard. Allow users to tab between fields, and make sure your tab order is consistent with how they work. For example, I would guess that they tend to complete input of each room before moving to the next room, but user research will confirm this. If your users are trained or appropriately skilled, consider a means to make input with only the number pad for all rooms, which can be done faster than input via the numbers on the alphanumeric keyboard. The plus and minus key can substitute for tab and shift-tab. The enter key may skip to the next room (row) accepting defaults for all remaining fields for the current room. To avoid time-consuming errors, such special key use should be consistent with how they are used elsewhere in the app.

Alternatively, you may want to make it possible to complete nearly all fields with the mouse alone after the user enters name, phone, and email. If your defaults are usually correct or close to correct you may want to use spinner controls for your room and date data, where the users usually only need to give a few clicks to up or down arrows to adjust the dates and amounts, and they’re done.

Make Input Consistent with Source

Minimize backtracking and mental manipulations by having the input be consistent with the format in its source. If the user is transcribing a paper form, make sure the electronic form is laid out the same way. If the user it taking data from a customer on the phone, the fields should have the same order and data type as the customers tend to speak. If the input is from the user’s memory, make sure the data form and units fit with that mental representation.

For example, maybe the user doesn’t think in terms of start and end dates, but rather in terms of a start date and a duration of days. If so, replace your end date field with Number of Days. Typing a one- or two-digit duration is faster than typing a four to eight digit date anyway.

Perhaps users are visually imagining a block of dates on a calendar. If so, instead or in addition to date text fields, maybe you want a single calendar when the user can drag-and-drop the start and end dates (assuming your users are familiar with drag and drop and are trained that it exists in the app –more user research to do).

Provide Aggregates and Other Feedback on Input

Make it fast and easy for the users to check their work on the fly. For example, after they enter a date as text, show the day of the week in a read-only field. Likewise, show duration of days and the total number of people in each room, along with totals of each person type, and the grand total. This may save the user from performing mental arithmetic. While you should allow the user to enter their phone number without any delimiters, you should automatically display the number with delimiters so it’s easy for the user to cross-check the number. Use 12-point font so values are clearly visible.

At same time, don’t clutter the form with data that is of no use to the users. They’ll waste precious milliseconds glancing at it while looking for the field they really want to use.

Provide Tools to Exploit Data Patterns

In addition to defaults, provide a set of commands that allow the users to apply common input patterns. If rooms often have the same input, then even relatively inexperienced users may be able to efficiently use a Same As Above button placed by the second through last room. Research may show that reservations for business travelers is almost always one adult and no children per room. You could have a single button populate all rooms with those values, if that isn't your default (e.g., usually you're reserving rooms for family reunions, but occasionally you do business retreats).

If you have more complex patterns and more practiced or trained users, you may want to provide controls to copy and paste data from/to one or more entire rooms at a time (like one can with a spreadsheet), preferably with keyboard accelerators and context menus. Support multi-selection (by dragging, Ctrl-clicking, and shift-clicking) to save time. Consider shortcuts to common room configurations the user can call up from a menu then modify as necessary. Maybe even allow the user to retrieve old configurations from previous sessions and re-edit them for a new one.

No Second Email Field for Verification?

In web apps, it’s common to make the user enter the email address twice to verify it’s typed correctly. In your case, maybe you should dispense with it for the sake of a shorter and faster form. If an email doesn’t work, then you have the phone number to fall back on.

Analysis and Testing

A usability test between two or three designs will settle which one is fastest. Prior to that, you can analytically get a pretty good estimate of relative form completion times by applying GOMS. GOMS-KLM is relatively easy and accurate for experienced users entering familiar data, and is useful for comparing trade-offs between mouse versus keyboard input.

  • repeat email field. gah.
    – colmcq
    Aug 25, 2015 at 13:06

Have you considered using some rich graphics to divide the form into understandable chunks? For instance, when your user has selected the number of rooms and the form is drawn, the fields about each separate room could be contained within a graphic that looks like a floor plan of a room, providing some context for the user, and also a natural grouping of the fields so that they are dealing with the rooms one at a time. Graphics aside, using clear sections could help simplify the process - remember that a form being filled in very quickly does not necessarily equate to the form being very small or short. Providing a clear and natural flow may let a user fill it in quickly even is they need to scroll quite far, as long as they are very clear on what to do at each step.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.