Improving Software Usability?
kevin_conaway asks: "Software usability is one of the hardest things to get right. Writing good, usable software is the holy grail of software development, yet few developers give it more than an afterthought. As a professional developer, I delight in writing software for other developers but shy away from writing an interface that the end users will see. What resources/books are recommended for improving your Human Computer Interaction (HCI) / software usability skills?"
"Think" is more web centric, but has many tips and insights, and is an accessible read cover to cover.
"Design" is a bit more pompous, and I don't agree with all points, but I give it high marks for making you take a different look at things you'd always taken for granted (Microsoft asked me a question at my interview from this book, btw).
A few more thoughts: don't confuse usability with user responsibility. If a task if tediously complex, it's going to be difficult to design a thin elegant easy-to-use interface. For example, photoshop can be amazingly obtuse to use, but there's a reason. Overall I give photoshop a "5" (out of ten) for their ergonomics, but I give them a "10" for what their application can do. I consider it partially my responsibility to climb that learning curve to do real work in digital graphics.
On the other hand, the unusable applications out there are infinite. My favorite example is Windows Media Player. I still have to figure out what to do just to play a CD with WMP. (And what's with the disappearing window?)
(Here's an interesting non-software example of horrible design: my parents have an RCA TV, not that old, but not HD. It has Videos 1, 2, 3 input, Cable/Air input, and VCR. There's a "SETUP" button on the front panel that lets you change the signal input from Cable/Air to VCR (or something like that), but the only way you can get Video 1, 2, or 3 is by tuning the TV channel to 91, 92, or 93 respectively. Until I found the manual and got to page 60 I was convinced the TV was broken.)
My favorite example of transcendental usability: Google.
(Some runners up: Picasa; Amazon.com (one-click), wish list, etc.)
(Also, I am opposite as to who I like to write for: I cringe when writing for other professional software developers, they're some of the biggest whiners about "what should be". I do however delight in writing software for clients. If you do it right, it's a genuine high.)
As much as everyone here loves to create their own programs and websites, for professional jobs, it must be known that those that create the software should NOT be responsible for designing the interface. Its a challenging field. While almost everybody here can create a good design without thinking, creating a great design is alot harder. Its the same with everything. Using certain software, ANYONE can create a good website. It takes skill to create the great ones though. Using certain software, the company I work for has their interns creating press releases. They work, but they aren't great. Anyone can design a logo, but theres a reason the big companies hire design artists. The very same is true in interface design. If you are worried about it and your budget can afford it (it should be budgeted for anyway), hire an interface designer.
http://developer.gnome.org/projects/gup/ This is definitely worth a read. Many people who are good programmers aren't necessarily good at user interfaces, or worrying about how people will interact with the software. That is an area that open source software really needs to improve on, both in efficiency in usability, and in aesthetics.
http://blindscribblings.com - Tasty pop-culture in conceptual fashion.
I can't stand software that makes it extremly difficult to get your data out of, that is one of the worst things about a lot of software.
Developers deliberatly giving people software, then making them "upgrade" to a premium version if they want to export their mail, documents, photos, or anything else should be shot on site!
Easy import and export of data should be the one thing your product should be easy to do, aggrevating your customer because you chose to take their data then try to extort it out of them definatley does not go well for easy usability.
The best resource for making sure your software is usable is to watch people use it. While large companies can afford professional UI designers and formal usability studies, even a humble F/OSS developer can do some simple UI testing. ...?" and it's a good way to start finding bugs that only a user will discover.
When I'm working on software that is intended for users who are not developers or otherwise computing professionals, I usually try to get a regular user to sit down with my software for a half-hour or so and I watch them use the software. Generally, I just say something along the lines of "hey, wanna do me a favor? play around with this program for a bit and tell me what you think". Then watch over their shoulder. Generally this is a good way to get a list of what sorts of things are poorly placed "how do I...?", things that are confusing "what is this?...", features that users will like "can I
A few tips that I've found doing this include
If any option is unavailable then it should be obvious WHY it's unavailable.
No matter how obvious your icons are, they should ALWAYS have text with them.
Avoid dialog boxes as much as possible
If you make your program look too much like another program, then you better make sure it looks and works exactly like that program. In other words, either stick completely with the standard way of doing things, or do it completely different. If you take some common UI element and tweek it, then you'll just confuse users. Menu bars tend to be the most common violators of this.
Understand color. A lot of applications throw colors around willy-nilly, if you are going to use color then study up on color theory and learn what colors go together, what colors are calming, etc.
Famous Last Words: "hmm...wikipedia says it's edible"
Jef Raskin's The Humane Interface
Did you ever notice that *nix doesn't even cover Linux?
I recently read "About Face 2.0" I found myself dis-agreeing with some of the details and felt there were a few ommisions but the definitions of software was sound
Also Joel on software has a great book excerpt online to get you in the mood
About face link
Joel book excerpt
There is information about him on the web, and he has a few good books such as "Notes on the Synthesis of Form".
Why do I mention him? To a certain extent, especially to users of software, the interface IS the product. The interface is the only way they will ever use any of the features, so if something is hidden, hard to find, hard to use, or designed to be misused, then that feature will never be of any prominence.
So remember to design the interface around your users and your problem. Your program is literally the interface that sits between the users and the problem, a bridge as it were.
GPL Deconstructed
Designing from Both Sides of the Screen. Worked really well for the project I worked on, and it's a great process and implementation book.
It's not that I'm asking the big questions, it's that I'm asking lots of small ones.
Tog on Interface and Tog on Software Design.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Friends don't let friends enable ecmascript.
I think too many companies focus just on heuristic evaluation. That's basically paying a UI expert to tell you what to do and what not to do. A lot of companies won't even hire a usability expert, instead relying on their own engineers to "read a lot of books" and try to wing it.
This is bad.
Just like how software engineers should not be trusted to test their own code, they should also not be trusted to do "good usability". I'm saying this as a software engineer, who also has a Masters in usability engineering and has been in the field for a few years. Too often I'm surrounded by fellow engineers who think they know what's best for the user. Also, they'll claim that a certain design is best because it also makes for a "clean UI" and "clean code design". Then we sit users in front of the application, and all hell breaks loose.
Don't do this. Spend the money to hire a good usability expert, and have THEM perform proper usability studies. Good usability is NOT necessarily about a "clean UI" or "clean code". It's about a product that people know how to use. After this is established, it is then up to the engineers to make sure the actual implementation itself is clean, extensible, un-cluttered, etc. Not the other way around.
-- jchenx
See http://wyoguide.sf.net/, it can be used with any programming language with any framework on any platform. So far it's the only guide which gives advice in a cross-platform fashion, has sample code and if you happen to use C++ a demo sample for use as your starting code base.
O. Wyss
See http://wyoguide.sf.net/papers/Cross-platform.html
Just by following a few simple common-sense guidelines, you can drastically improve the usability of any given software:
Moderator hint: a comment is neither "Flamebait" nor "Troll" if it is true.
These are two guys who have some good stuff to say about usability - Jakob Nielsen (http://www.useit.com/) and Don Norman (http://www.jnd.org/) - Don Norman is the author of 'The Design of Everyday Things', mentioned above.
Also worth a mention is Joel Spolsky - http://www.joelonsoftware.com/
Fixing complex intra-application behaviour and logic later in the UI is hard.
Building sane backends to UIs that have been built first is easier and more purposeful.
So start with the interaction design, with people, on paper and let it flow from there. You'll then know what needs to be done and how.
J
If you want to that the basic principles, simply go with the Apple Human Interface Guidelines. Yeah I know, sometimes Apple do weird things too... But the first part of the book (the first 3 chapters) contains the basic information you need to create a good interface, totally platform-agnostic. It's been my guideline for years, since the System-Finder times. *sigh* back then the interfaces were easy and there was no brushed aluminum to foil the day.
r ience/Conceptual/OSXHIGuidelines/index.html
... so I suggest you go for the "Original" Classical environment Human Interface Guidelines book for the first two appendices:
i nes/HIGuidelines-2.html (on total bottom of page)
http://developer.apple.com/documentation/UserExpe
That version contains updated and modern Part I for the super buzzword "U-Ex". But they decided they did not have sources anymore
http://gemma.apple.com/documentation/mac/HIGuidel
The resources are relatively adequate, but the bibliography extends to much more than the basics, it covers all the "why's" and "how's". It predates Mac OS, though, so the books were mostly rewritten, but the basics are still prevalent on many topics.
Read Nielson's essays. Then do what they say. Specifically conduct usability testing in the manner he prescribes - anything else is a waste of time and money.
--- These are not words: wierd, genious, rediculous
I've recently read ' The inmates are running the asylum: Why high tech products drive us crazy and how to restore the sanity'
Found it an interesting read, giving lots of examples on how usability should be approached and shows some good examples on how it can fail. It also introduces some techniques surrounding 'personas'. But for me, the most important thing the book did was triggering a certain way of thinking about usability, which I think is far more important than any technique a book can throw at you.
Users completely rebelled. The general sentiment was, "Why doesn't that bring up a page when I click on it?"
The importance of "usability" is overstated by people who make money parroting it.
Yes, simplicity and obviousness are important. Just don't confuse those objectives with usability as it is now sold.
Usability starts with a set of normative values that most users accept. This often includes accepting that most users accept a version of the internet that is closer to 1996 than 2006.
I scream. You scream. I assume that means we're both acquainted with the problem. We proceed.
I'd like to say something clever, but... ah... oh, well, don't make me think... http://www.sensible.com/buythebook.html
Just interface your program with an electrode in the control device. Then when the user does something stupid, you zap them! Problem solved.
POKE 36879,8
Good, usable software is not the holy grail of development, because it's been done. Holy grail means something everyone wants to find but no one has.
insert CD, wait for the dialog box to appear
The dialog box won't appear because I held Shift while inserting the CD to prevent autorun from installing malware. How do I start a CD without using autorun?
1) Why do we need a save button? Ideally, the program will backup a version of the document after every change and if the user undos, then the program will move to a previous backup seemlessly
For the same reason we have a commit statement in an SQL DBMS: to make our changes visible to other processes that expect reasonably atomic updates. Even in applications that commit after typing each word, the "Save" command marks a specific version more prominently so that the program can suggest reverting to that version.
3) Why isn;t undo/redo universal in the operating system, or at least in the part of the system which the user uses always?
Because not enough beginning programming books mention the model-view-controller paradigm that treats all changes as reversible transactions. Because implementing some (more major) changes as reversible transactions causes disk thrashing. Because there's a limited amount of space on the hard disk so you can't just "undo Empty Recycle Bin".
This is a good book by the designer of VB that has a nice model of user-oriented design and some pretty interesting case studies -- design of airplane entertainment units, scanner software, and others.
seven two six five
seven four six one seven
two six four two e
(2) Good error reporting and recovery.
If you're more interested in practical GUI advice, I highly recommend GUI Bloopers: Don'ts and Do's for Software Developers and Web Designers (not a referral link). ISBN: 1558605827
The book goes in-depth on the basics of good GUIs laid out using your standard widgets (little, if any, talk of bleeding edge HCI theory). It gives tons of examples of what the author views as good and bad GUI practices. Some of the things he cites are more nitpicky IMO, but overall it's a valuable resource that'll make you more aware of the common pitfalls of GUIs and how really good GUIs are laid out. It also talks about proper messages to display to the user, like don't present a user with a yes/no question and give them OK/Cancel as their buttons...
Thinking that reading a book and using the HCI (Human Computer Interface) buzzword will improve the user experience of your software.
Few software development managers give developers enough time to hone their user interface. In my firm, software developers are often involved in the back end code, writing complex algorithms or process functions. This is the meat and potatoes of the software, without it, there is no reason for the software to exists. When they need some UI associated with the back end code, it truly is a last minute implementation and an afterthought, but only because they are pressed to get the product released on some arbitrary deadline management and sales arrived at. What happens tends to be sloppy and poorly written UI for the sake of brevity.
Good UI just takes time to develop, and until your firm realizes that it should account for at least 40% of the development time, then reading a book isn't going to help you. Also, I have read those books, and its just a bunch of blowhards telling you what they think is good UI, its not necessarily what is going to be good UI for your applications.
You also should find and take the time to hire or cultivate at least one developer that is skilled in UI design. Having at least one good UI developer on your team frees up the other developers to focus on the internals and lets a dedicated developer focus on the UI. This also prevents the idea of "too many cooks in the kitchen" problem that many firms have, the idea that numerous developers are writing UI code and each have their own personal idea of what the UI should look like. You can create a UI guideline that is supposed to force developers to write UI a certain way, but in the end, they are going to do what they think is right, and your application will have a mismatched look and feel to it. Having one or two dedicated UI developers will ensure a consistency across the entire application.
It is a talent, its one of the few areas where creativity and talent comes into play when developing software. The talent is in understanding and putting yourself in the place of an end user. Its understanding your target audience and catering to their needs. This varies with every software project you work on and no book is going to cover all the bases.
In the end, if your a single developer responsible for both front and back end code, then take the time to USE your software. Most software developers only use their software in so much as to test their back end code. But using your software just as your end users would is the best way to ensure you UI works and flows well. Try to imagine all the stupid things your end users will do with the software, or all the different ways an end user will interact with the software. For instance, I don't use keyboard shortcuts, so I tend to overlook them when I develop a UI. Learning to realize that end users might exclusively use keyboard shortcuts instead of the mouse means that when I test my UI, I will notice the weakness before I release the software.
But it takes time to both learn what makes good UI and to develop good UI. You could read a book and it could offer a few insights, but the best way to learn to code and to learn how to write good UI is to do it, use it, and allow enough time to properly develop it. In the end, if you write software you hate or wouldn't want to use, then your not writting good UI.
I haven't thought of anything clever to put here, but then again most of you haven't either.
There needs to be a way to immediately cancel something if I want to bail out. Examples of this not working are in Safari. While a webpage is loading, I can click the cancel button, and it will not register until several seconds later. Sometimes when the button is depressed, it then takes 5 seconds to actually stop. Or in Final Cut Pro, canceling a render can take 10-15 seconds. My computer is by no means the fastest, but how hard is it to make a cancel button that actually works? How difficult is it to simply STOP?
Despite its age, it has plenty of valuable lessons. For instance, abuse of tabs is certainly as relevant today as it was eight years ago.
The Internet is full. Go away.
For most people. .
If you are developing the software yourself, spend time with the target audience to see how they behave in the UI that you've created.
If you are hiring programmers, video tape the session -- both the on-screen activity and the person using the computer.
The darndest thing is that most end-users won't read, and they are not patient. And when there's a bad design element that flusters them, it makes them read even less!
"Just because a tool is powerful doesn't mean it has to be non-intuitive..."
Google's Sketchup could teach Wings a thing or two. UnrealED is a powerful tool.
Sure, those are three reasonable options that don't require an extraordinary amount of time. The poster, however, said he wanted "Easy import and export of data". I took that to mean that he wanted wizards. He probably even expected the data to output directly to the replacement software.
How do you get a tally of what colors are used and how many pixels are set to them in any graphics editing program? It seems like it should be an easy task overall, but the only time I've seen it happen is programs I've written myself in QuickBasic!
Haven't seen it mentioned yet, so:
Tog on Interface
Also, Computer Lib / Dream Machines by Ted Nelson has some valuable lessons in it.
GCHQ Quantum Insert installed. If only our tongues were made of glass, how much more careful we would be when we speak
Users are NOT processes.
I was talking about a single user running multiple processes, such as (to given an example that would be familiar to many Slashdot users) running an editor and a compile job at once and modifying files while the compile job is half done. If it becomes easy to inadvertently put one of your apps in an inconsistent state by using another app modify a file behind its back, then your system is broken.
Besides, if the files were treated as being in an SCM
Have widely available SCMs become intelligent enough to handle images, audio, video, and other non-textual files with better semantics than just "one byte was inserted, so the entire file changed, and diffs can't be merged"? And has the usability of widely available SCMs advanced to the point where it's as easy to teach SCM use as it is to teach open/save use?
Maybe these ideals should be aimed only towards advanced programmers?
You said undo and redo should be "universal ... in the part of the system which the user uses always". So should non-advanced programmers be locked out of developing GUI applications? Then you turn PCs into game consoles.
Hard disk space is pretty cheap nowadays.
Not on handheld devices. Besides, "pretty cheap" != free, and people who have a paid-for machine that's old enough to justify an "insensitive clod" comment on Slashdot will likely complain if the ability to delete files is removed because it cannot be undone.
Besides video, maybe audio and maybe image processing
Which are promoted as the killer applications for any device that's larger than a handheld device.
If the files were stored as diffs (even the binary files), you probably wouldn't be using very much space...
Won't always help. A blur applied to a layer affects every pixel of that layer, and an equalization applied to an audio track affects every sample of that track.
Many compaints about GIMP were that the interface did not exactly match Photoshop. They even made one that did, but most FOSS users revert to using the native skin in about 2 days. So, what do you think about GIMP?
Here's a good source of informal research that I almost never see mentioned. If you a developer for an existing product that is already in use at one or more companies, find out who the companies are (your sales department can provide) and contact their IT department. Helpdesk and desktop support people are on the front lines with users on a daily basis and know first hand what users struggle with. Talk to them. Pick their brains. Support professionals are often treated as the flunkies of an organization, and most I know would quite generously share their knowledge with anyone who treated them with an ounce of respect. Keep in mind that IT people often serve as usability experts in disquise, as they frequently must find ways to simplify and work with badly designed software and hardware that they have no power to change. So, some may even be able to offer some good suggestions as to how to correct the issues they've seen. Many IT organizations also keep detailed case records within their call tracking systems, and if you're real nice to them (ie.. feed them cookies), they might even get you some statistics on the number of calls related to a product or issue.
Though this method is not as effective as carefully designed user research, it is a good alternative when a company will not allocate any resources towards such a project. You may be able to gather a lot of information in a short amount of time, at no cost, and make a new IT friend in the process.
Well for starters, on Mac, it's picky about which X server it uses. It seems there are two, and they're incompatible (the nice thing about standards is that everyone can have one?). So I have one app I use frequently that requires on, and gimp requires the other. So it's been a while, but my recollection is that the photoshop version didn't work very well, and the regular interface was pretty weird (as it often seems Xt apps are). I'll try to fire it up and give some specific comments though later...
http://www.ok-cancel.com/ is a great site for non-technical, insightful discussions of user interfaces; plus a great web comic on the subject.
I went and fetched the latest gimp, and it looks like it actually supports both X's now, that's an improvement, and there are things I like about it, like the markers on the edges showing where your pointer is.
;-)
The main thing I've always disliked about GIMP is that it's too busy and stuff is scattered all over. It's a bit overwhelming for someone starting with it, a bunch of icons that really don't mean much unless you already know what they mean or spend a lot of time mousing over. Since I've used lite versions of photoshop for a decade now, it wasn't worth the effort of jumping the hurdle.
On the other hand, it's really not much different than the little side menus photoshop puts up (which is another change I'm not sure I like in Elements, building them all into a frame around a hole where your image goes), so I'm not sure why they're more daunting.
Maybe it's just inertia... Now that I just spent the bucks on Elements a week or so ago, I guess I'll try using Gimp again