1

I manage a large Windows desktop application, which is the 'back office' of an EPOS system. There are many screens which allow the user to search through collections of objects, for example orders or customers, and these objects can be right-clicked to present a context menu with a list of possible actions.

Sometimes, it can take a short time (perhaps 50ms) to detemine whether a particular action should be available or not. I do this check when the user right-clicks to get the menu.

When there were very few options, this wasn't a huge problem. As the number of features has grown however, in some configurations it can take up to a couple of seconds to show the menu. I'd like to do something about this.

My first idea is to show the menu immediately, but with any actions we're unsure about being disabled (grayed out and un-clickable). I would check whether these actions are possible in the background, and enable them as they are confirmed possible. I've never seen this done before and I can imagine it looking a bit strange, but at least the menu can be displayed instantly.

I could just show all actions as available in the hope that they are, and actually check only when the user selects an action. If the user picks something that turns out to be unavailable, this could be extremely frustrating.

Or, just live with the pause? The delay is noticeable, but at least when the menu is finally shown, only actions which are actually possible are enabled so the available choices are much clearer.

Any suggestions on how I might improve this situation? (other than "make it faster")

  • What sort of worse-case delay are we talking about here? Some system can take 20-30 seconds to respond (data mining). My whatsapp takes about 12 second to become responsive on my iPhone 4s. – Izhaki Apr 8 '15 at 21:44
  • I'd say 4-5 seconds as a worst case, when all possible plugins are loaded and providing their actions, and network conditions are poor. Typically, it's closer to 1-2 seconds. Not huge, but very noticeable, especially when all you did was right click. – Ashley Apr 9 '15 at 17:48
  • I would say you show the menu immediately but then show an overlay that it's loading. You should grand the user to open/close the window without restriction. Maybe you want to load the content even before the user opens it – BlueWizard Jun 11 '15 at 14:26
1

Having a context menu is nice for a shortcut, but in this instance may be causing more frustration than help. Can you change the location of where the action is performed to something like 1) select the object and 2) find the action on an action bar.

Something like this: Dropbox screenshot

This buys you some time because the user has to move their attention and cursor from the object they selected to where the action bar is. It also buys you a bit more space for a "loading" or some other indicator while the actions are being fetched.

  • I do already have a toolbar along the top of these panels, which contains a selection of the most common actions. However the number of items is usually too large to fit horizontally in one line. A sidebar of vertically stacked 'buttons' might be an alternative, but that doesn't feel very 'Windowsy' to me (perhaps it is something you might find in 8+). – Ashley Apr 9 '15 at 18:15
  • You might have to if it is that large. It does exist, see this application built by Microsoft: brianmadden.com/library/content/hyperv2.jpg @Ashley – Bowen Apr 9 '15 at 18:27
0

Not showing anything before the check was done - violates the immediate feedback heuristic.

Show the menu immediately but change it in anyway (enable or show some actions) once you know what's possible could disorient users - the interface changes but how the user suppose to know what's happening and when the shown options are really the ones?

Although that depending on the context (like with the most common action always available) this may not be the optimal solution, but consider this:

It is common for systems to take time to respond to user actions. The standard solution for this is just tell the user "I'm doing something, please wait" and a simple loader animation will do the job.

Loader animation

There is a bit of debate on whether a system should show provisional response (hard to believe but sometimes partial response is more annoying than the wait), this may make sense if:

  • Users can progress with their task with these provisional response.
  • There is no disorientation (things moving about).
  • The introduction of the final response does not attract attention.
  • The user is clear about what is happening - both that some process is still ongoing and when it finished.
  • Making new items visible after the menu is shown would certainly look completely chaotic, but I'm less against the idea of changing them from disabled to enabled state. I get your point about not being able to tell when the loading has finished though. Perhaps there could be three distinct visual states - disabled, loading, and available? – Ashley Apr 9 '15 at 18:00
  • 1
    Another thought: I have the standard margin down the left of the menu where the icons go. Perhaps that space could be used for a loading indicator on items that are still being checked. – Ashley Apr 9 '15 at 18:12
  • Get the loading as close to where users want to see the result of their action as possible basically. – digsrafik Apr 17 '15 at 19:09
0

One solution is to initiate the query when the user's mouse enters the row. Then cache the data in case the user uses the context menu.

This means a fair amount of unnecessary network load, but that might be preferable in your case.

You could also throttle it back so the query gets sent X milliseconds after mouseenter, but only if the mouse is still within the row.

This also won't help with touch-based platforms. Showing the context menu immediately, with some sort of "waiting" feedback, is the more general solution.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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