I normally only post after a coding experience, when I have hard code to deliver right to your monitor.
Today, however, is an exciting deviation from the norm. While talking with a developer about top-down development practices (designing the user interface first, and then the database and business logic) for an enterprise class project, my thoughts turned to the greatest power users of all time: customer service agents.
The applciation we were discussing provides the representitive access to a suprisingly large number of data entry and reporting interfaces. Wrangling all of these into an easily navegatable menu presents a substantial challenge, considering
Fitts's Law (time to click a control is a function of the distance to the control and its size).
Then, I thought...
"What if you don't have to click a
button? What if the application
knows what you want, without having to target
anything with the mouse?"
I immediately thought of pattern-based solutions. Most humans remember phone numbers by the pattern they generate on the keypad, which is why typing phone numbers you have memorized on a keyboard keypad is often more difficult. I thought of these two solutions:
- Make a circular menu appear under the mouse (or close by). Categories are organized radially, and open their own bubbles when the mouse enters them.
- Power users frequent perhaps 15 forms. Allow the user to associate a mouse gesture with the form.
Solution #1 is a practical, pattern-based method of fast navigation, as the user remembers the direction of travel through the menu, to arrive at the desired form. However, the pattern is subject to change, when the menu options are updated. Also, the menus need to be visually targeted. Not ideal.
Solution #2 hits the bulls eye. Mouse gestures are intelligent (they use an
artificial neural network to match the user's actual motions to what they
intend to motion), and customizeable (the user may associate a pattern to any form, assign to a keyboard gesture, and/or create a custom pattern).
Another benefit of employing mouse gestures, especially in an enterprise class GUI, is they do not interfere with pre-established keyboard gestures. It is possible to assigning a mouse gesture to a general keyboard gesture (<Ctrl><S> for Save) that may or may not be supported by the current form, assign the same mouse gesture to form-specific keyboard gestures, and/or fire event calls to the code-behind (be it WebForm postback, WinForm handler call, or MVC controller).
Other, common actions could be employed. Drawing a C copies selected text, and drawing a P pastes the content. Drawing an @ opens a new e-mail message. There are countless general applications.
Needless to day, I am excited about supproting mouse gestures for power users. The level of use provides more then enough opportunity for the neural network to learn, and the savings in time is invaluable.
Check out the Mouse Gestures for .NET project at Codeplex:
http://mousegestures.codeplex.com/ (current as of 15 JUN 2010) I will be following this project, and hope to get invoved with its development.