I have just finished reading Designed for Use: Create Usable Interfaces for Applications and the Web by Lukas Mathis. The book covers how to create applications and web sites that people can use and love.
As an application developer, that was my main focus when reading, although many insights also cover my (right now very limited) web development.
I highlighted tons of the book while reading on a Kindle (which has awfully slow highlighting!), because so much of it seemed useful.
One interesting bit for people working solo like me is that the beginning of chapters will mention when techniques are mostly useful for larger groups.
The book is divided in three parts:
– How to understand what your users need – contextual interviews, remote shadowing.
– Interesting points about text usability (which not very surprising, sounded somewhat like most copywriting advice I've seen).
– Card Sorting – how to organize hierarchies on products or sites that meet the user's mental model.
– Sketching, Prototyping, Storyboards and Mock-ups – various ways to get your design right before you start coding, and techniques to do so, such as Paper Prototype Testing – which I found interesting but a bit quaint (I feel that for most desktop apps, I might be faster doing actual screens with Delphi rather drawing them in paper). They do suggest that users tend to be more critical on paper prototypes, as they make it seem like you have invested less time than in a full working prototype.
– Natural User Interfaces
– Fitt's law, which cover how target sizes for mouses and touch screens should be considered. One of the principles mentioned bother me – Screen Edges have Infinite Size – if you have another monitor to the side, not really. Of course, in a regular, one monitor setup that makes the screen edges easier to hit.
– How to use animations properly (explaining state changes, directing user attention, etc)
– Don't interrupt your user – front-load questions whenever possible and whenever possible, just do what seems best instead of stopping to ask the user about it. Use undo instead when possible.
– Remove preferences when possible – just choose what should be best for the user. That reduces the number of configuration options – thus making it easier to find the important ones. Each preference is a kind of mode for your app, and all these options have to be supported by the developer. And every option can make a problem harder to debug.
I recently had an user complaining about large, fuzzy images after passing them through STGThumb. After a while I discovered that he was setting JPG Smoothing (which I wouldn't remember existed without looking at the program – I implemented this feature nearly 10 years ago at a user's request and never touched it again) to 100% – which works as a strong blur filter.
That would be covered by one of their suggestions on how to avoid preferences – say no to your users! Other ways they suggest is running an usability test or having implicit preferences, such as using the previous settings.
– Speed – some tips on how to make your programs seem faster
– How to avoid features – something that all developers should know.
– How to remove features – I particularly liked the idea on getting anonymous usage statistics to figure out how and if specific features of your app are being used.
– Usability Testing, including Guerilla (getting random people on a cafe to try your product, for example), regular or remote (using Skype screen sharing or something similar).
– Common Mistakes when testing
– A/B Testing
– Collecting Usage Data
Overall, I liked the book, and I feel it can really help me improve my designs. I have a few ideas of things I'd like to try with my own programs already.