Sriram Krishnan (Moved to http://www.sriramkrishnan.com/blog)

Search. Usability. Virtual machines.Geek stuff

<December 2008>
SuMoTuWeThFrSa
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910


Navigation

Subscriptions

News

Link blog
Technorati Profile
The Blogs I read
Creative Commons Licence
This work is licensed under a Creative Commons License.


User Interface != Usable Interface

I have a lot of friends who are 'hobby' developers. People who write code for the fun of it...and they're generally good at programming. They'll usually create small utilities and put it up on websites, magazine CDs,etc. However, most of these utilities have something in common. Bad user interfaces!! When I spoke to these guys, they usually pointed me to software which had similar UI. Well, consider this my attempt to rid the world(at least Indian student developers :-) ) of 'un'-usable interfaces. Can I succeed where people like Joel Spolsky and Jacob Nielsen have failed? I don't think so...but let me try.

Now, let me start off by saying that UI design(HCI for the purists) is a constantly evolving field(though the basic principles are always the same)...and I'm new to this field too. I'm just learning..and this represents some of my thoughts of what I've observed so far. It's mostly a rehash of a lot of stuff already available online...plus a few of my own thoughts and experiences.If you don't agree with any of this, please contact me. I really want to learn more about this. In fact, I guess it's the holy-grail of any software- usability.

First of all, some broad tips. Think about all these things before you release your masterpiece of code to the unsuspecting world.

Test,test,test...

When I say testing, I don't mean UI testing where you see whether every menu item does what it is supposed to do. I'm talking of usability testing...Now, a lot of people would say that they don't have the time/don't have the resources. Now, can someone please tell me how making your app usable is not a priority? As for resources, you don't need the kind of usability labs that Microsoft has. You can even make do with one person. Get somebody-anybody(preferable someone non-geeky :-) ) and watch them use the app. Don't help them out...watch them as they try to figure out the interface. Most importantly, watch the mistakes they make...and see how you can eliminate user mistakes. Remember, it's up to your program to figure out how the user is thinking...not the other way around. 

Have imaginary users

This is recommended by all the interface gurus. Come up with imaginary users,give them names,lives,personalities. I usually work with 3 users...

- the non-techie-grandma-type who is new to computers

- the non-programmer-but-knows-computers-type , uses computer frequently for chat, net stuff, can even write a bit of html

- the geek...who probably runs 3 different Linux distros and can understand Chris Brumme's blogs :-)

Now, whenever you approach a UI design issue, put yourself into the shoes of these imaginary users and try to look at it from their point of view. Or even better, get someone else to do it for you...your kid brother, your mom,pop, girlfriend(if you have one :-))...anybody who isn't familiar with the application is fine. I like to give my imaginary users names, personal problems,etc...But then, if you find that none of your imaginary users has a social life, it may well be that you don't have one as well :-)

You are not good enough

This is probably the most important tenet out there when it comes to testing. If you want,put it up in big, bold letters above your monitor. Developers cannot be objective about the interfaces they create. In fact, most, if not all developers are bad at interface design and don't know it. Never try to evaluate your own interfaces...you're the guy who has designed it and coded it...so you obviously know where each thing is and what does what. These are things that may not be so obvious to Joe User. We, as programmers, usually have a twisted view of the world...and our users probably won't be thinking like us. Unless of course, you're writing something like Visual Studio.NET which is meant for developers. Even then , consider people different...like people with an Emacs/Vi background. Always remember that there might be a lot of users who don't think like you do. 

On the Visual Studio theme, can somebody tell me who came up with the docking windows 'feature' in VB6? Forget Bin Laden and Saddam Hussein...get that guy first.

Do what the user expects

This should be your mantra..your chant..your life-blood. It is not the job of the user to find out how your app works...it is up to your app to do things the way the user would expect it to. I once remember one application that used Ctrl+C as a shortcut for something other than 'Copy'. Trust me, you have no idea how irritating that is.

Help your users...don't punish them

This is something I picked up from Alan Cooper. If your application fails or an error occurs, don't pop up a message box saying something like 'Error X has occurred.'. It is your responsibility to figure out why the error occurred. If it is due to a wrong action on the part of the user,gently correct the user. Remember that your users are doing you a favor by using your software..so don't punish them with cryptic error messages. I love the way MS Office Application Recovery works...much better than seeing an 'Access Violation' error. Always provide meaningful error messages...the next time I see a VB6 application crash with the helpful message 'Runtime error: Object or With variable not set',I'm gonna throw a fit. Or I'm going to hunt the programmer down with a scary-looking knife.Or both.

Again on the Visual Studio theme, why is it that Visual Studio.NET gives you a 'Catastrophic Failure' error message. Is there some joke here that I'm not getting? Or is the joke on me?

Now , getting some of these broad outlines out of the way..let me get down to a few specifics. Now, you might argue that some of these 'specifics' are really 'broad', but then,hey, its my blog...and I can say what I want. :-)

 

A lot of these things are Windows specific but you can probably draw parallels in the Linux/open source world. So far, I'm disappointed with the usability of most open-source apps. In fact, Firebird seems to be the only application designed with the user in mind(and to a smaller extent KDevelop). Please don't tell me that I have to learn Emacs/Vi....the computer has to adapt to me and not the other way about.

 

First of all, let me start off with something that is sure to get the whole of the open-source world after me(at least the miniscule minority who read my blog anyway :-) ).

Microsoft is God

If you want to figure out how to implement a particular UI feature, copy from Microsoft.Well..well...before you start typing out those flames to me, hold on a second. First of all consider this...Windows runs over 95% of the PCs in the world. So even if Microsoft has screwed up, the fact remains that most people will be used to the Microsoft way. Do you really want to force those people to re-learn their computing skills? Or do you think that your app is so important that they'll take the trouble?

Microsoft does tons of usability testing and has a lot of very brainy people working on UI. So,if they do something, there's probably a good reason for it(even though the reason for the dog in XP's search is probably an exception). If you still don't believe me, go read Raymond Chen .

But then again, if somebody on the Office team is reading this, I have just one question. How many people actually want their menu bars on the side? For god's sake, I was just trying to drag some toolbars around and I wind up with my toolbars on the left/right...and btw, toolbars were invented to give easy access to menus. And what did the Office team do with toolbars? Put menus on them!! IE6 has a 'Lock the toolbars' feature..why isn't this there in Office? I can only shudder at the prospect of the Office UI team having Avalon at their disposal.

Provide a starting point

Ok..so you've written the coolest thing since sliced bread. And you've got millions of people to download it...and what do you have? Millions of people who've probably opened up your app and scratching their heads trying to figure out what to do next and where to start. Do you know why the 'Start' button is such a big hit and why Microsoft hyped it so much? 'Coz it gives people a starting point. Contrast this with DOS or any other CUI where you have a cryptic prompt. Imagine you're a newbie...what does 'C:\>' tell you? Not much. The 'Start' button on the other hand provides people something to get started with. This is the same reason that by default, VB6 brings up its 'New Project/Open Project' interface...now, you can always provide an option to disable this for your advanced users. And for god's sake, don't have a 'Tips on start up' window..when was the last time you didn't check the little box saying 'Never show this window again'?

Make sure that the main features of your application can be accessed easily. For example,if you're writing a blog aggregator, have a visible 'Update' button so people can update their feeds and have a visible 'Add new feed' button/menu so that people can feeds easily. Yes, there may be people who may want to use esoteric features like validating feeds,etc. But they probably won't do it as frequently as updating their feeds. Make sure that your app's main features are easy to access and use...worry about the bells and whistles later.

The right things in the right places

I've already covered this in my 'do what the user expects' section..but I thought I'll devote a bit more space here. Now, your users will probably have a good idea what your application's main features are. So, when they go about using your app, make sure that they find what they want where they expect to find it. In most cases, look at other famous applications that provide the same functionality and try and copy what they do...I spent quite a bit of time trying to figure out how to change some settings for Opera..until I found out that the 'Preferences' menu item is under the 'File' menu...now, this must have seemed the logical place  for a miniscule minority of Opera users. But,on behalf of the rest, I would just like to say ...WTF?

One of my friends wrote a media viewer similar to IrfanView...which basically lets people view images, listen to mp3s, play videos,etc. He used the media control which ..before Windows Media Player 9 came out, had one of the coolest undiscovered features. You see, as the developer, you had an option to change the rate at which the song was playing...(something which Windows Media Player 9 exposes). Now, this was by far the most popular feature that the application had...but when I used it for the first time , I just couldn't find it. Until my friend came over and told me the 'preferred'/only way is to use the shortcut 'Ctrl + Shift + RightClick'...and guess what? All his users knew this by heart...

Visual Feedback

This section is dedicated to the guy who came up with the Send/Receive dialog in Outlook.Now, I'm not sure whether this has been corrected in Outlook 2003..but this dialog in Outlook XP has probably the most useless progress bar in...well..the history of progress bars. It hits 100% hours before my mails are downloaded..what the hell is going on? There is a list view below this with a slightly more meaningful progress bar...but this is what most people will see.

It's really important to let the users know what the application is doing and what state it is in. This means enable/disable toolbars and menu items according to the user's actions. Someone please tell this to the developers of Opera's  M2 mail client. Right clicking on the sidebar with mail accounts/contacts brings up a menu with 'Delete'...but delete works on only some of the items. Now, this may be a bug...but my guess is somebody just got lazy with their menu-updating code.

Always have some sort of a progress bar when you start off a long process...and make sure you have some way of letting the user cancel it. And don't forget to let Windows pump messages while your application is off solving mankind's unsolved math problems. If you're using VB6, have a DoEvents call..or Application.DoEvents in .NET. There's nothing as infuriating as a 'Cancel' button that doesn't work.

The status bar is your friend...use it. Show messages there...people will read it.

You think it is cool ...so what?

Programmers are usually in love with their code(me too)...so this frequently obscures objectivity. We clutter our interfaces with too many buttons corresponding to too many features. I once remember reading 'Great software comes from removing features, not adding them'(I don't remember where I read this). Focus on your core features...provide an easy, accessible interface to them. This is what most people will be using..so do the bells-and-whistles later. This is more of a software development thing than a UI design thing..but I thought I'd mention it here anyway.

Don't have too many ways of doing the same way...too much flexibility is not a good thing. Ask anybody trying to learn/debug Perl code. That's why I love Python :-)

Your users will have different set-ups...be prepared

Always test and see how your app looks on different configurations. Test it on all the versions of Windows, different versions of IE,etc..And most importantly, test it out on different resolutions. If you're using .NET, make use of the Dock and Anchor features...

Help the mousers/keyboarders

Make sure all your UI elements have keyboard shortcuts..and tell the users what these shortcuts are. I learnt only recently that F2 is a short-cut for renaming files...a very useful shortcut Microsoft never bothered to tell us about. When it comes to sheer speed, keyboard-ers will beat mousers any day of the week. Read up on Microsoft's interface guidelines and make sure your shortcut keys are correct.

And don't forget the keyboard lover's perpetual nemesis - the mouser. Provide meaningful context menus...people will expect to access features through right-click so don't frustrate them. Don't hide frequently used features in several menus of menus...always remember Fitt's Law.

KISS

Keep it Simple ,Stupid. Speaks for itself.

Well...if you want to know more(like me)...here are a few good starting points

www.joelonsoftware.com

www.useit.com

www.asktog.com

UI design is more of an art than a  science...and good UI is hard to describe but easy to recognize. None of the things I've said are hard and fast rules...there will be good places to break them..but think carefully before you do.

I just want to get programmers to start thinking about their users...and design usable user-interfaces. If you're a developer and if you've learnt something about good UI, then my goal has been accomplished. Now, can you please head on over to the open-source guys and tell them to design usable interfaces?Or ask them to learn from  Firebird.

 

posted on Sunday, December 14, 2003 3:37 AM by sriram





Powered by Dot Net Junkies, by Telligent Systems