# Feedback that maximum value is reached with keypad

I have a numerical edit page on a small touchscreen. There's a display field that displays the current value, a keypad, and increase and decrease buttons.

Right now, if the user is using the keypad or arrow keys and the value would exceed the maximum value allowed, the current value is set to the maximum. For example if the maximum value allowed is 9999, then while the user is typing 1,2,3,4,5,6 the value shows 1, 12, 123, 1234, 9999, 9999. At first I thought this was a decent clean indicator of what the maximum value was, and we didn't have any trouble in our preliminary user testing everyone seemed to understand.

However, if you switch units of measure, then one of the maximums turns out to be 1.34. This feedback mechanism then very much looks like a bug. If the user types any number above 1 then suddenly the value reads 1.34. This made it appear like the keypad was broken since basically any button resulted in this apparently random value appearing.

Some ideas I've had to help make the process clearer:

1. Round the limit so it seems more obviously a limit (e.g. make the limit 1.00)
• I don't like this solution because it artificially reduces the capability of the machine based on which units you're using.
2. Make the increase arrow visually appear disabled whenever the value is at the maximum.
• I should probably do this anyway, but I'm not sure it will be enough, especially if the user is using the keypad and not therefor not paying attention to the arrow keys.
3. Make all keypad buttons (except delete) visually disabled when the maximum is reached.
• Again this is probably something I should do anyway, but I'm again not sure if it will be enough, it may still be confusing.
4. Make any keypad buttons visually disabled if pressing them would result in a number larger than the maximum.
• This would make it hard to determine the maximum if I disabled the functionality of the buttons, and I don't want to disable the visuals without disabling the functionality.
5. Allow (at least temporarily) invalid numbers to be entered.
• I feel like this just kicks the can down the road. I have to deal with the invalid value at some point and I think immediate user feedback is the way to go.
6. Pop up a notification / warning
• Ugh... I hate when UI's interrupt me. Also any text added must be translated, so we're trying to keep text to a minimum.
7. Flash the value?

Additional related info: The value changes color to indicate when it's being edited, and after a few second timeout, the value is saved (with a little icon indicating the value was saved) and the color returns to normal.

• You might need to look into why the user was typing 2 in a field with a limit of 1.34. If it was a typo (they didn't really mean 2) then ignoring the character might be viable, but if they intended to enter 2 it could mean they don't agree with the limit of 1.34 or the user is thinking in different units than expected. Commented Sep 12, 2019 at 17:05
• @NathanRabe yes, our test users weren't familiar with the units of measure that they were testing. So no one realized that 1.34 was a big value until someone finally typed a 1 and we figured out it was the maximum.
– Eph
Commented Sep 12, 2019 at 17:10
• I don't understand the problem space as well as you do, being the designer with all the details of the system, but the user interface of keypad and arrows and four-digit numerical display doesn't really sound appropriate to the task. If you're asking users to input values, validating them is of course fine, but ... what's the context? Why is does the maximum allowable value seem to be limited by a character limit in one case but arbitrarily in another? Why not let the limit be 9999 in any unit? Commented Sep 12, 2019 at 21:29
• @sintax we're using the same edit screen for all numerical inputs, so the 9999 is a limit for a time, where as the 1.34 is a limit for pressure. The pressure limit is to stay within the functioning region of the unit. The time limit was chosen because none of the values are allowed to have more than 4 digits (who needs 0.005% precision?) so it was a character limit for time.
– Eph
Commented Sep 13, 2019 at 11:34
• Is the time limit of 9999 reasonable, though? If you implement maxima for every parameter that is below intmax for your system, you'll have an easier time conditioning your users to understand that maxima are not technical constraints of your input system, but real limitations of the physical system. Then you can create a consistent way of displaying the parameter maximum for every parameter, such as always displaying the parameter maximum below the entry box, including units (the former physics instructor in me is rabid for units). Commented Sep 13, 2019 at 14:18

## 1 Answer

Provide immediate, polite feedback when the user has entered an invalid number.

Immediately validate if the number entered is within the allowable range. If not, show a small, unobtrusive message next to the input.

Additionally, do not disable any buttons or ignore any inputs, as this will always be unexpected. If I know I pressed a wrong key but you happened to block the input anyways, I could end up backspacing values I intended to keep. Basically, the input field should function as almost every input field functions: I can type my input, and when I'm done, address any issues.

I agree completely with your sentiment expressed in your number 6—"Ugh... I hate when UI's interrupt me.—and your number 5—"I think immediate user feedback is the way to go."

Following a pattern like the one above is

• Polite—it does not interrupt the user or block their input unexpectedly
• Clear—it informs the user exactly what the issue is without them having to guess
• Unobtrusive—it allows the user to freely manipulate the value they just input without being distracting