I have software I'm working on in which a user has to scan a full pallet's-worth of various items of hardware for inventory-taking purposes (think of a wooden pallet in a warehouse laden with stacks of computer towers of various form factors, for example, with 50 towers per pallet) using a (possibly wireless) hand-held barcode scanner, a barcode sticker represents the unique instance of the item on which the sticker was placed.
The idea is that the person, using a barcode scanner connected to a laptop with my software open, can scan each item on the pallet at their own rhythm without having to move the laptop (which would be impractical). This means the user will themselves need to physically move about to accomplish the task and may not be able to see the screen immediately or up-close as they move about, scanning items.
I have (so far) envisioned a notification system which would notify the user via aural cues based on the state of the scanned item as it's safe to assume they aren't looking at the screen when scanning an item. A visual notification of sorts is of course important if they scan an item and can see the screen, however, and that's where I'm having a bit of trouble.
The below mockup is what would be displayed for each notification which would appear for maybe 1-2 seconds before returning to the software's default view of information which is effectively the list of all items in the pallet (read from a csv file generated by the management system), categorized and sorted with summarized tallies of scanned items, by brand and model. This default view however is too dense for viewing from a distance, so I'm having difficulty deciding on:
- Should I display only one notification at a time, full screen? If so, how should I handle scans of items occurring before notification(s) of the previous item(s) disappear(s), keeping in mind that I'd like for the most recent notification displayed on screen to always be relative to the user's most recent scan such that the information shown is always accurate if all the user does is glance at the screen when they scan an item.
- Alternatively, I could allow 2, maybe 3 notifications at once on screen (each occupying half or a third of it), so long as everything is still readable at a glance from ~5-7 feet away, but then how do I handle new notifications in this case, if previous ones are still on screen? Shift them up the screen (so they're in newest-oldest/top-bottom order), prematurely removing the oldest notification, or let notifications time out normally and always occupy the "slots" as they're available?
- Allow the notification window (containing the notifications) to be shown manually/such that the notifications or the window containing them, never disappear(s), so that the notifications can be scrolled through (for example) if the user hears an aural warning sound/notification, but that then would mean a lot of scrolling... Not sure about this one.
The states I'm tracking are of the scans themselves, of items as follows:
- Okay (the item exists in the list and has been scanned only once).
- Orphan (the item doesn't exist in the list and has been scanned only once).
- Duplicate (the item exists in the list and has been scanned more than once).
- Duplicate orphan (the item doesn't exist in the list and has been scanned more than once).
I can't track a lack of barcode sticker as said sticker is what's needed to track state in this part of the process which is essentially validation of the information provided at the previous step; manual data entry of hardware into the system, as well as attaching barcode stickers. Note that I don't have direct access to the database itself, which is why I have to list "Orphan" for orphaned items instead of displaying the actual pallet to which the scanned item belongs.
download bmml source – Wireframes created with Balsamiq Mockups
Thank you very much, in advance, for your help, and apologies for the length of this post! Feel free to offer advice, alternative mockups or ideas, or comment on my proposed mockup which represents a single scan-notification as well, as I'd like to offer as much information as I can with what little space I have (given that it needs to be visible and understandable at a glance from a distance).
Some implementation details that may impact answers:
The software, as it is, is written in C# using Windows Forms, it wasn't written with tablets in mind (it hadn't occurred to me that you might be able to connect a bluetooth scanner to a tablet, it's certainly a nice idea for a v2 though).
My current design relies on the assumption that I'm using a scanner in keyboard shim mode (the OS sees the scanner as a keyboard), so I can't have the scanner itself provide feedback to the user.
I believe issues on the pallet do require immediate attention as the purpose is to ferret out and correct errors in the physical pallet versus what the system believes the pallet contains (or should contain), as quickly and efficiently as possible. This means that so long as every scanned item is "Okay", the user has no need to look at the screen beyond listening for an "Okay" sound notification, but if the system says the scanned item is an error, then it's important to stop immediately and handle that mistake before continuing on to the next item to avoid having to physically look for the erroneous item(s) again once all items have been checked (the act of having to do multiple passes in a physical search through a pallet for erroneous items is what the software aims to eliminate).
The catch here, is that because the scanner acts as a keyboard, I can't prevent it from scanning items (so it will beep and type in what it scanned, no matter what I do), all I can do is change how I handle scanned items, so I don't think I can freeze the handling of items without violating "something was scanned, therefore the software should react to it somehow". Maybe play the same sound notification as whatever caused the initial error but on all subsequent scans until the initial error is marked as fixed? Not sure. :/