Google+ Badge

Monday, July 23, 2012

Take time out to clean up your program's user interaction

Once a product has been around for a long time you will start to find little issues and inconsistencies. Our app has hit that stage and I am taking the time to fix as many of these issues as I can. It will make the whole thing look more professional. Hey, what about some examples bub?

Double click to Add / Remove

If you have side by side lists / trees on a screen with add / remove or move left / move right buttons people expect to double click on items and have them move between the controls. We try to do this everywhere in the product but missed some cases.

Prompt when an action can't be reversed such as deleting a row

No one wants to accidentally lose data. Make sure they can't without a prompt. This is a super easy fix, just adding a message box above and checking for YES / OK action. Make sure you don't check for NOT CANCEL as clicking the red [x] in the corner is not yes, not cancel but close. Checking for not cancel will have you perform the action which is not what the user meant when they dismissed the message box via [x].

Check for unique names

If users are adding name filters or other similar data to a table make sure they are using unique names. No need to confuse everyone with two filters named Kevin. Do the same check when renaming, cloning or any other operation that allows them to type in a new name.

Enforce permissions uniformly

If you have a permission, privilege or similar system make sure you are consistent in its usage. Don't block them from doing something in one place and not another allowing them to get around the rules. Back fitting a permission system can be a real bear but the users asked for it for specific reasons so make sure you follow through.

Consistent images / Duplicate images

If you use a lock for checked out don't use a door with an arrow in another area. Along the same lines don't have duplicate images scattered about in your directory structure, that will drive your graphics artist nuts and is a waste of install package space.

F1 Shows Help means do it every time

Don't have F1 work some of the time and other times not even if it can't bring up a super specific topic. Have it bring up the general topic for the area you are in until the help team has time to get the specific one ready.

Dirty checking needs to be accurate

When the user chooses to edit some data, they make no changes and hit [Cancel] make sure you are not prompting them with "Changes have been made. Save them?". Verify you prompt when things are dirty and don't bother the user when they are not.

When things take a long time show a progress indicator

During testing with very small data sets everything moves fast. When a user gets hold of the product and starts adding rows a mile a minute initial table requests can take some time. Make sure you are showing a busy indicator of some sort so the user knows the system is busy and not locked up.

Make sure entry fields are wide enough

No one likes to see 5 characters when they generally type 10 or 100. Who wants the zip code cut off at 4 characters? Give them the room they need.

Support spell checking consistently

You finally added spell checking to your free form notes fields. Awesome, not add it to all of them not just in one part of the system. Users expect spell checking to work everywhere: email, IM, search text entry, etc. If ;you start providing it then finish providing it.

Pick a date entry control

Is it month / day / year or year / month / day? Is it a combobox? Can I pick or type? Does it support a short-cut key for today? Use the same format and entry style everywhere.

Use human Boolean strings

Programmers say True and False, humans don't. Use Yes / No and make sure you descriptive label is not a double negative like "Don't erase file at end of processing: NO". People don't like to scratch their head figuring out what you mean.

Term consistency

Don't call it a privilege here and a permission over there. If a menu item invokes a dialog have the dialog title be the same as the menu item so when support gets a call stating they are on the Update Patient dialog you know they got there from the Update Patient menu item. Please don't have the "..." in the dialog title though.

Don't allow crazy entry into specialized text fields

We all know to dollar amounts numeric only but what about illegal file name characters? Anything you DB of choice hates? SQL injection? Limit the users typing as much as possible or at least show a message when they press [Save] to let them know something is amiss.

Don't over prompt, show all possible errors / warnings

No one wants to fix issues one at a time. If 4 of the 6 entry fields have invalid data then tell them about all of them in your first message. Don't make them fix one then complain about the next one until they have fixed all the issues. Think how much fun this would be is your compiler stopped on the first error.

Put errors / warnings in a scrolling list at a certain size

A huge message box that does not even fit on the screen does little good. Some errors snowball into more errors. Put a reasonable limit on the text you show but let the user scroll through all the text. The key to fix 90% of the problems might be on the final line.

Don't call your user an idiot

Face it as programmers we tend to think in the negative. This failed, the build is broken, fecal matter has impacted with the spinning cooling device. Programmers tend to use negative language in their error messages. Try to avoid that. A good tech writing team will keep it from happening but programmers tend to put in the placeholder text and a lot of time it will make it into production. Don't get all sappy and just sprinkle in "Please" and "Thank You", actually work on the wording.  "User name is invalid" can be "User name must be unique" "User name has invalid characters - allowed characters are xxxxx". Try to be helpful and point them in the direction to fix things instead of just telling them they suck.

Use reasonable column widths

Zip codes don't need 50 characters of width but descriptions do. Try to show all the information in a cell if possible but it not make sure tool tips work. Users don't want to click on Edit just so they can see the values in a dialog box.

Resizable dialogs anywhere it is possible

Most of us have used MSCONFIG at some time to find out what sort of crap has decided it needs to run every time our machine starts especially when you are looking at a relatives computer which under the gun to "just make it work like it did before". Why is this dialog not resizable? It isn't because that was a bear to do in C/C++/MFC. Most of use probably don't have this excuse anymore.

Feel free to let me know about your favorite issues to address.