« Why I started working on Zorn | Main | Meet my partner in crime »
June 08, 2005
Seven ideas for building better RIAs
RIAs have the potential to be better than HTML-based apps, but there aren't any good guidelines for building better apps. In fact, the whole topic of creating guidelines often meets with skepticism. It is hard to come up with a recipe for how to make an RIA "better", especially given how different all RIAs are from one another.
So what would the "UI guidelines for Flex" look like? Is it even possible to make such a thing? This is not a complete list, but I have seven ideas for how to make RIAs better than traditional Web apps.
1. RIAs should embrace the idea of "selecting" things.
Being able to select things is really important in desktop apps. You can't do anything in most apps without creating a selection. Selecting things is how you tell the computer what you care about. On the web, selections virtually don't exist. To select pieces of mail on yahoo, you have to click on a checkbox next to the piece of mail. Ugh.

fig. 1 - In this view, I am tempted to select things, even though there are controls in each item. Don't they look almost like icons? Wouldn't it be great to tweak this design so you could drag select five things and click "add to wish list"?
2. Come up with a consistent way to let people know what actions can be performed on selected things.
Computers were created to perform actions. The web, meanwhile, de-emphasizes performing actions and blurs the line between actions and navigation. On the Web, there are no menus or toolbars, only links and buttons. And yet the Web is the most successful app delivery platform known to man. Go figure. I think we can improve on this. All RIAs look different, but to be usable, I think we should aim to be consistent in how we show available actions. This could happen by fiat (e.g., UI guidelines) or by evolution and consensus (e.g., nav bars on websites.. remember the early days of the web when every website looked different?) Why is this important? Imagine what would happen if desktop apps didn't consistenly use menubars, and every desktop app had a different way to show you what actions were available. Ack!
For RIAs, we could expose actions as menubars, toolbars, context menus, navbar-like things, or something entirely new. I almost don't care which way we go, but if everyone does things differently, it will be that much harder for people to understand the basic operation of each app they come across.
3. Working with documents in a "one screen" app is hard. We need a way for users to conceptualize "documents".
Intranet apps often deal with documents of one kind or another (think order tracking, CRM, etc), and they are often a pain to use. In general, people who put together internal applications don't have the luxury of having design gurus on staff, and I think the impoverished UI vocabulary of the Web makes things worse, especially when it comes to dealing with multiple documents. Flex can change all that. "One screen" apps are inherently mysterious when dealing with context switching. When you work with multiple documents in a desktop app, they open in multiple windows. When you deal with multiple documents in a web app, you often lose context as you go from an index page to a specific document, or from one document to another.
I believe we can take a lot of the mystery out of it by creating a few simple rules for how to visually communicate the concept of multiple documents in a single screen app. One product I worked on that accomplished this well is Contribute. It's a desktop app, but all work happens in a single screen, and the product does a good job of giving the user a sense of what documents are being edited, and what state they are all in.

fig. 2 - The wrong way to represent "documents" within a web app. Documents need to feel physical, which means that they need icons and you need to be able to select them. This looks more like a report. Furthermore, when you drill down into a particular document, the list goes away so you lose context. BTW, there are other documents on other tabs in this app (in en route and completed), but some people never find them.

fig. 3 - Contribute is a one screen app, and they have found a good way to (a) work with multiple documents, (b) provide a space for actions, (c) provide contextual information. The list of available documents is on the left, and the contents appear on the right as you select them. All of these UI ideas would translate well into Flex. For larger, more process oriented apps, the documents on the left could be grouped in user-defined groupings ("Travel expenses") or app-defined groupings ("For my review", "Awaiting approval").
4. Managing space is important; screen real estate is expensive.
Managing space usually means packing more information in less space. In some shops, managing space may also mean using negative space to guide the eye. In any case, space is important.
HTML-based apps already surpass desktop apps for incorporating design into applications. They're like a cross between catalogs and applications. RIAs can take this to the next level because (a) you have much more flexibility and control over design, (b) you can pack more into less space by relying on interactivity, and (c) you can give the end user more control over how the screen space is to be used.

fig. 4 - This is Zagat's new site. It's beautiful, but isn't it a bit frustrating how little space there is for each section? Wouldn't it be nice to resize "Cuisine" to take more room if that's what you are interested in?

fig. 5 - In this case, I believe the best way to use the space would be to use an accordion, although a panel group would also have worked well.

fig. 6 - Callouts and tooltips are a great way to pack a lot of information into a small amount of space. By default, Flex uses these for form validation errors, but we don't give any guidance for other ways to use tooltips. Should there be a more general guideline for when to use callouts and tooltips?
5. Getting rid of page refresh is not about the blank white screen; it's about reducing the number of steps to accomplishing your task!
When people talk about page refresh, they're not talking about screen flicker. I bet our customers don't even notice the blank white screen anymore. If you took any of the popular sites - Amazon, eBay, etc., and did nothing other than get rid of the blank white screen, no one would notice. The flash of white between web pages is like the dial tone of the web. It's almost reassuring.
When people complain about page refresh, it's really about losing continuity (where am I now? what happened?) and losing time (why do I have to keep bouncing around between pages?).
Case in point: In the early days of Amazon, you had to go to a separate page to rate each individual product. Now, you can do it all on one screen. What used to take lots and lots of steps can all be done from a single page. What used to take minutes of back and forth now takes seconds. As a consequence, I now rate a bunch of things on Amazon whereas before, I never did.
6. Direct manipulation - This used to be the buzzword for desktop UI. Why isn't it the buzzword for RIAs?
There are lots of opportunities for us to add direct manipulation to the web. Unfortunately, some of them are gimmicky. For example, asking people to drag things into a shopping cart is a bad idea.
One obvious use for drag and drop is for rearranging things. There are lots of times when the user needs to specify the order of something. Rearranging might be the end goal, as in a photo album, but just about any list that the user creates is something that potentially needs rearranging. It might sound trivial, but I think these kinds of broadly applicable ideas are the most powerful. "Always allow the user to rearrange any lists that they create themselves" would be the slogan, and the framework should make that easy.
7. Provide feedback to help users make sense of the network
Apps on the web have the potential to be confusing because there is a server piece and a client piece.
Generally, people have figured it out for HTML: everything happens on the server, not my local machine (i.e., I can visit the site again from any other machine), except that sometimes, I need to log in again or redo some stuff.
In HTML, the blank white screen tells me that the website has been contacted. This tells me that my instructions have been sent to the website, or that new information is being downloaded.
Ironically, RIAs have the potential to make this world more confusing if we are not careful. Without guidelines for user feedback, we may not know when information is being submitted to the website (is it really looking for my flight info?) or when we have received new information.
At the very least, you should consider giving the user an indicator when something has been updated on the server. You would never think to change someone's password without saying "password changed". But smaller updates may also merit feedback. Ironically, the smaller the change, the more unsure you are whether anything happened.

fig. 7 - Take a look at the Amazon star rating widget. As soon as you click on the Amazon rating widget, it tells you that it has saved its info, which is very reassuring.
Summary
RIAs are incredibly promising, but we're still in the wild west phase of the technology. As people experiment, we should expect lots of great innovation as well as lots of confusing and weird RIAs.
Eventually, the best practices for RIAs will become clear, but that will take a few years. In the meantime, I'd love to start a discussion of how RIAs can help make better ideas. I've put down some of my thoughts. I'm sure you have thoughts as well.
Posted by sho at June 8, 2005 02:26 PM
Comments
great overview of some important issues. any thoughts about scrolling pages though? or lack of them in RIAs?. this is such a key element of websites now.
Posted by: ej at June 8, 2005 03:04 PM
Wow, great pointers, thank you.
Posted by: Chris Charlton at June 8, 2005 03:18 PM
To ej: yea, and scrolling makes me remember something problematic which is the fact that you are not able to know how much visible area the user browser offers, since you can't tell how many visible toolbars there are.
About item number 2 ( available actions for selections) the flash player is really really lacking , with it´s limited support for right click menu. I still can't believe ( judging by the announced 8ball feature list ) this was not sorted for the next version.
Posted by: jay araujo at June 21, 2005 02:56 PM
Hi folks. I was away on a family vacation. Sorry for the lack of response.
Scrolling -- In Flex, you can make any area of the screen scrollable, and in the degenerate case, you can make the entire app scrollable.
However, I think that scrolling applications are bad in general. Content should be scrollable, but not user interface. Within an RIA, what that typically means is that the application itself is not scrollable, but that certain areas of the screen that contain content may be scrollable.
As for right click issues in Flash Player (and thus, in Flex).. we're working on it. ;-)
Posted by: Sho at June 21, 2005 03:29 PM
Hi Sho,
The figures/images in your article are not getting displayed. Perhaps the image urls are no longer valid? I'm viewing the article at http://weblogs.macromedia.com/sho/archives/2005/06/seven_ideas_for.cfm, but the urls for the images are all like http://www.markme.com/sho/archives/6_8_05_*.gif
Posted by: ds at July 19, 2005 11:28 AM
The macromedia weblogs got moved to a new server recently (and updated to a new version of MT) so some my links are unfortunately broken. Thanks for the heads up!
Posted by: Sho at July 20, 2005 09:02 AM
Should be fixed. Thanks again for the heads up!
Posted by: Sho at July 21, 2005 11:29 AM
>> On the Web, there are no menus or toolbars, only links and buttons. And yet the Web is the most successful app delivery platform known to man. Go figure
In other words, combination of low-quality and high-accessiblity wins over high-quality and low-accessibility.
>> Contribute is a one screen app, and they have found a good way to ...
There is a huge problem of clutter on those screens and is reminiscent of an IDE. In addion to the main object are all of the options for all of the possible actions that could ever be done with that object. They are an excellent examples of contradictions of your Idea#4.
>> In this case, I believe the best way to use the space would be to use an accordion
Your belief reminds me of a friends sig which states that "We are all prisoners of our own experiences" ;)
The problem with accordions is that I am not interested in all of the other options, while I am immersed in one of them. At that point all other options are a distracting waste of space.
The accordion control should be re-designed such that it ends up working almost like an automated toggle between the "list view" and a "single item view", as one clicks on an item and then on a title (respectively).
>> When people complain about page refresh, it's really about losing continuity (where am I now? what happened?) and losing time (why do I have to keep bouncing around between pages?).
It sounds that we are "going back to the future", one more time. We went from the world of block-mode IBM 3270 terminals. Then we went through the trials and turbulations of highly interactive Client/Server architecture, only to go back to the IBM3270's with lipstick (the Web.
Now, the RIA's are already making me feel as if I am on yet another trip of going back to the future of the interactiveness of Client/Servers.
>> For example, asking people to drag things into a shopping cart is a bad idea.
Actually, it is an excellent way of expressing 2 intentions/instructions - selection and action of buying. For example, asking them only to [double-]click on the "thing" would achieve "selection" but confuse intended "action".
>> Without guidelines for user feedback, we may not know when information is being submitted to the website (is it really looking for my flight info?) or when we have received new information.
Those IBM3270 terminals had a small clock at the bottom and the GUI's replaced that with an hour-glass. Some Flash applications have replaced that ("time is wasting" reminder) with circular ones (: suggesting that I am spinning my wheels :)
All such cases are always followed by an explicit message and/or some visual clue that the action has either succeeded or failed.
So, what again is the problem ? ;)
Perhaps, from the design point of view, we need to try very hard to pretend that the web (as we know it so far) simply never happened (: not yet :).
Posted by: Zdravko at August 21, 2005 12:21 PM
Some good points but why would it be good to be able to drag select items for a wish list and yet not for a shopping cart. Why do you think dragging items into a shopping basket would be a bad idea?
Posted by: Kay at August 22, 2005 02:23 PM
To be clear, I think it would be ok to allow drag/drop to a shopping basket, but it would be bad if that were the only way to buy an item. (1) It is not a common gesture on the Web today, and is not discoverable. (2) Some people find drag/drop to be a pain to do, so it would be a bad idea to depend on it for the most important user operation in your ecommerce app!
Drag and drop is great, but it doesn't make *everything* better. For example, imagine that you had a visual clipboard that let you see the contents of your "copy" or "cut" operation. Now, imagine that you had to drag things into this visual clipboard in order to do a "copy", and that the keyboard shortcut was gone. Would you feel more or less efficient?
People are used to hitting "buy" buttons to buy things. We could also allow them to drag into shopping carts, but we shouldn't take away their "buy" buttons.
Posted by: Sho at August 22, 2005 03:11 PM
>> It is not a common gesture on the Web today,
What type of a mouse device would have we ended up with had its inventors been equally preoccupied with keyboarding gestures ?
>> and is not discoverable.
It's no different than discoverability of Ctrl-Click, for gesturing multiple selections, for someone who is new to the mouse.
>> People are used to hitting "buy" buttons to buy things.
Well designed GUI applications do not rely heavily on document-centric menus nor even menu bars.
Instead, they place Add, Change and Delete buttons that are closer to (usually below) the records/objects to be acted on.
"Today's Web" cluttered the user interface with 3 columns of such buttons.
If we carry existing web traditions into RIA designs then I am afraid that we'll not be accomplishing much, beyond putting some lipstick on the same old pig (: to use an overused cliche :)
Posted by: Zdravko at August 23, 2005 01:27 AM