My team and I are building a mobile app where the user will need to input a human-readable unique identifier (the serial number) of a single unit of inventory. Our system tracks the serial numbers that the user can access. We have considered three possible input modes:
1. We show the user the entire list of serial numbers they can access and allow him to select one from the list (like how a select element would work on an HTML page).
Pros:
- The user doesn't have to type anything in.
- The user can't enter an invalid serial number.
Cons:
- The list is likely to be overwhelmingly large.
- The serial numbers usually have the same format and are often sequential, so it might be hard to read the list.
- Data usage for downloading the entire list of serial numbers
2. We allow the user to start entering the serial number in a text input and have an auto-suggest drop-down with a filtered list of serial numbers the user can access.
Pros:
- The user doesn't have to type in a complete serial number.
- The user is unlikely to enter an invalid serial number.
- Smaller list to choose from than Option 1.
Cons:
- The serial numbers usually have the same format and are often sequential, so it might be hard to read the list.
- Auto-suggest may have limited value since the unit has a barcode that we could read.
- Data usage for downloading a sizable list of serial numbers
3. We require the entire serial number to be entered, and once we recognize the correct number of characters, we validate the serial number against the user's accessible list and show feedback.
Pros:
- The unit has a barcode that we could read, so this has the potential to be simpler than an auto-suggest or select-from-list paradigm.
- Simpler implementation
- Significantly reduced data usage vs. Option 1 and Option 2
Cons:
- The unit has multiple barcodes, so it might take a couple of tries for the user to capture the correct one.
- Typing manually would be tedious if the camera is unavailable or barcode scanner isn't working for whatever reason (lighting, etc.)
Which of these three is the best approach? Is there a better approach than what we have considered?