So far we’ve talked a lot about strategies and techniques for designing user interfaces and we’ve talked a little bit about high-level principles. What I’d like to do now is to kind of dive deep and get down to brass tacks and talk about a number of concrete examples. And so these lectures are going to offer two benefits simultaneously: First, what I’d like to do in these next couple of lectures is introduce a set of design heuristics for identifying interface errors and strategies for correcting them. Second, I’d like to walk you through a number of examples of actual user interfaces, and talk about particular ways in which they’re successful or have problems. Now, these are all screen shots that I’ve gathered over several years. I keep a big file of interfaces that I think are effective or have problems, and it’s a good activity — I encourage you to do the same thing. For any voyeurs out there, you’ll get a sense of interfaces that I’ve stumbled across over the last several years — not a very exciting list, but, hey. And all of these interfaces are things that may come up again when we talk about visual design and other principles. So some of these screen shots you’ll see multiple times in this class. Finally, I’d like to emphasize that we really want to focus on narrow issues in these user interfaces. And I’m not going to talk about whether the broader ecosystem that the particular thing we’re looking at is effective or not. So, we may point out flaws in interfaces that are on the whole exemplary, or we may point out successes in interfaces that are on the whole not quite so good. And finally, because I’ve gathered these screen shots over a number of years, many of these interfaces no longer look like this. The point is not the current state of an interface, but rather the didactical of teaching you a principle. Here are the ten design heuristics that we’re going to talk about. Some of these names are mine. The principles are based on Jakob Nielsen’s work in heuristic evaluation; I’ve simply relabeled a few of them to make them, I think, clearer and shorter. And so let’s jump in. The first of these principles is “show system status.” I think one of the most important things you can do in user interface design is provide excellent feedback about where the system is and where the user is in a larger interaction flow. One important thing to provide feedback about is where the user is in time. If you have an interactive system where the response time is less than a second or so, there is no need to have intermediate feedback: It just feels interactive. As you get to something that’s on the order of a second or a couple of seconds, it becomes important to provide some kind of feedback that an activity is underway. You can think of this as hourglass or a spinning ball, and if you get to something that’s more than a couple of seconds, it’s useful to show progress of how far along in an activity that user is. Here we see an example from an installation of a piece of software. And you can see the same thing if you ask a user to fill out a survey or when they’re completing their taxes, or any other process that takes a long time or may require multiple steps of input. You’ll want to give people feedback about how far through the system is and how far through they are. Second important category of things to provide feedback about and to show to the user is space. Here’s a screen shot from Gmail which notifies me that I was out of the space allocated to me and that means that I need to do something about it. The third important thing to show people feedback about is change. Here we have a dialog box that says, “You’ve changed this document. Do you want to save those changes or don’t save them.” Our fourth category is action. Here’s a stoplight. So the red light means stop; the green light means go. And I like this user interface, because it uses a redundant coding to provide feedback to the user. So the red light is not only using red as a color, but it’s up at the top of the screen; and the green light is also always at the bottom. And this consistency in the dual coding both makes it faster to recognize and it helps work for a broader class of users — for example, not all users may be able to distinguish red from green. Especially in an online world, it can be important to show feedback about next steps. Here’s a screen shot from Amazon that says “Your message was sent to the seller and a copy was sent to the email address of your account. The seller will respond to you directly via email.” So we’re letting the user know what’s going to happen next. That’s important because otherwise you can wonder, “Was the message actually sent?” or, “Did anybody get it?” or “When they receive it, what are they going to do?” This lays out very clearly what has happened and what will happen next. And after you’ve crossed time, space, change, actions, and next steps, the last thing that you’ll want to show is completion. I also like this dialog box because it’s funny. And a little bit of humor can be really effective in user interfaces. Our second heuristic is to use familiar metaphors and language. And often this can mean trying to provide a match in the interface with things that people are familiar with from their real-world experience. This also means speak the user’s language, and follow conventions that they’re familiar with both in the online world and in the real world. One important kind of familiarity is metaphors. In this interface, I want to call your attention to the world in miniature that’s being used in the print dialog box, and that’s an effective user interface, because it makes very clear which pieces of the page are going to to be cropped, and which pieces of the page are going to to be printed. In general, one of the successes of the graphical user interface is that it leverages a lot of real-world metaphors, like desktop and trash and files and folders. And if these are activities that users are familiar with, it can help bring them into a new online world. Now over the last 25 years, as more and more people have gotten accustomed to computing, some of those real-world metaphors have fallen away and newer ones have developed. Remember that the reader of your interface is going to be a user and not your colleague, boss, or lawyer. And consequently, work hard to identify terms and language that will be familiar to them. Here’s a screenshot from a student loan website. And it uses two terms that at least I was unfamiliar with — It talked about me being I already enrolled in “Electronic Correspondence.” And it said that I was not eligible for “Electronic Bill Presentment.” What it really means by this, I think, is just “email,” and so it should say that. And I don’t think of myself as being “enrolled” in an “email correspondence service.” It would be nicer if it just said “We’re sending you email.” And there’s some fine print about why I’m not eligible for “Electronic Bill Presentment.” It would be much clearer if, for starters, it actually identified the reason: in my particular case this has passed a log-in wall, and so it knows the reason. And it would be nicer if it was able to use more common terms, like “We’re unable to send you bills and email because,” maybe, “we don’t have an address on file.” And it’s important to use familiar categories. Here’s an example from a Visa website that asks users to select a state. And, I got a kick out of it because there are more than 50 states here — in fact, there’s a separate listing for Northern California and Southern California. And many people in San Francisco might wish that Northern California and Southern California were different states; and for many people, which of those they live in or believe they live in is clear. But for some users, this may be ambiguous, and it would probably be simpler if you just selected California and then the system decided whether it use its Southern California routing or Northern California routing, based on the address that you provide later. And it’s important that the choices that you offer to people are things that they’re likely to be familiar with. Here is a dialog box that says that “You have a document encoding mismatch. You’ve got a document which describes itself as being UTF-8, no BOM. But, the encoding has been set to Western, ISO Latin-1. Now this is a developer tool, and so it’s reasonable to expect some fluency with things that are under the hood — like, users may in general be familiar with the idea that there are different character sets for documents — but users may be not familiar with what exactly the difference is between UTF-8 no BOM and ISO Latin-1, or which of them they should select, or how exactly they should go about fixing this problem. One way that this interface could be improved is beaconing what the most common solution is likely to be. Our third heuristic is user control and freedom, and this is going to encompass a number of things — like exits for mistaken choices, the ability to undo and redo, not forcing people down fixed paths. I think of this heuristic as being about making sure that the amount of control and freedom is appropriate for the users and appropriate for the tasks. So for example, if you have an interface that somebody’s only going to use once, a relatively constrained wizard may actually be a good solution. However, you may also want a way for users to break out of that constrained wizard if they know what they’re doing and are more expert, or have an uncommon or unique activity that they need to accomplish. Here’s an example from a conference registration site, and what you can see is that there’s a Continue button, but no Back button. Here’s an interface that provides more control and freedom in the context of browsing for airline tickets. What you see here is that there are a number of different ways in which the user can browse through the space of possible information. In particular you can see this calendar widget in the top left which shows you the fares for every day of that month. And this ability to preview what’s likely to be down a particular path is really valuable in helping people make decisions and know what options are available to them. Our fourth heuristic is consistency and standards. And this includes things like consistent layout. Here’s a screenshot of a very old set of dialog box options from Microsoft’s Visual Basic. This is many years old at this point. It’s pedagogically useful, because there are four different options for where the same set of buttons could be. And probably, applications will be easiest to learn if users can come to expect that the same buttons will always be in the same locations. We talked already about familiar language. It’s also important to be consistent in your use of language. And one thing that I’ve seen on the forums is, in teaching this class, whenever we’ve used terms interchangeably, that’s often been a source of confusion. And you can see that in this web site. I arrived at this screen because I wanted to get help with a USB cellular modem that I had, and I couldn’t figure out which of these categories was most likely to be the right one. My guess is that these categories were generated based on organizational chart for the business rather than based on the user’s conceptual model of what they cared about. So, for example, national access and broadband access may be different parts of a business and have different management structures; but from a user’s perspective, they may not know whether the mobile device they have is in one category or the other. So how do you solve this naming problem? Because I think that, once you get familiar with your own products and designs, it’s easy to refer to them using the terms that you’re familiar with. And, to some extent, eventually training people up on these terms will be useful for everyone. However, you’ll often want to elicit what terminology users use naturally and ensure sure that you use that consistency. This is actually a case where field work, or focus groups, or other kinds of direct user engagement can be really valuable, and you can ask people how they would describe certain things that they might want to get help with. Another thing that you can do is if you prefer a more web-based strategy, you can have a category initially that you call Other, and let people type in whatever they want. And then you can look at the set of responses that come in for Other, and use that to generate umbrellas terms that may be more user centered in terms of the language they use. Here is a screenshot of a license repair utility, and it has a warning about the fact that you’ll need to close all other Adobe applications before proceeding with the license repair utility. It’s a reasonable constraint, and it says, “Do you wish to…” blank — I have blocked it out. “Yes” or “No?” My guess is that a good fraction of you — maybe even most of you — would guess that [for] “Do you wish to…” the next thing would be “continue.” And so you might press Yes. However, what we actually have here is “Do you wish to cancel.” And so, if you pressed Yes to continue. It’s going to drop you out of the application and you’ll wonder what happened. Or if you pressed No, with the intent to cancel, you’ll actually continue, and you may run into problems. In this particular case, one way that you can solve this problem about what Yes or No or OK or Cancel mean is to replace Yes, No, OK and Cancel with more specific options. So here we see a dialog box where the options are very clear: One button says “Keep .do” as the extension name; the other one says “Use .pdf”. And this is much clearer then OK and Cancel, or Yes and No. Our fifth heuristic is about preventing errors, and there are lots of errors that are easy to make, and there are lots of ways that your interface can help people prevent them. The first kind of error to prevent people from making is data loss. Here we have a dialog box that says “This file already exists,” and it follows our message of having concrete button names — That’s good. However, I don’t know what that file looks like. If it offered me a preview, it’s much less likely that I would mistake what that file is. In addition to preventing data loss, you can also prevent cluttering duplicates. Here’s a screenshot that helpfully notifies you that this may be a duplicate paper that you’re trying to import into a library. So it says, “Hey, you’ve already got this on your computer.” And so far as it goes, that’s great; but what I want to know is: Is what it thinks is a duplicate actually a duplicate? And so one button that ought to be available here and that isn’t, and that would help me prevent errors, is by having of way of previewing what it believes the duplicate file to be, and allows me to compare the two files, side by side. Here’s a dialog box that says “You have unsaved data. Click OK to go back and save, or click Cancel to continue.” There’s a couple of problems here: For starters, we’ve got the “click Cancel to continue,” which I think may confuse many people, and they’ll consequently lose their unsaved data. Also, why isn’t Save one of the options on the dialog box? That would make a lot more sense. There are many ways we could redesign this dialog box. You could think about automatically saving things, or many other more drastic solutions. A simple solution that we can make here is to relabel this first button to be — call this… “Save,” and the other button we might call… “Don’t Save, Just continue.” And we will probably want the “Save” button to be the default action. One of the great advantages of a graphical user interface is that it can leverage its visual structure to enforce that users provide well-formed input and to remind them about what parameters are necessary. So this, for example, is the Find dialog box in Apple’s Keynote, and you can contrast that with the Find command in the terminal. In the graphical case, anything you can type into the dialog box will be a reasonable query to search for; it’s impossible to have incorrect syntax. However, in the terminal case, you have to remember every time what exactly the syntax is. Now the terminal has lots of power and is great in lots of ways. But the ability to make errors in terms of your syntax is one of its drawbacks. But that doesn’t mean that just because you have a graphical interface, it automatically will have this property of preventing errors. This is an example of a scheduling system, and the task that we’re midstream on is trying to schedule a weekly meeting into a conference room. And there are some things that you need to fill out that it has explicit dropdowns for, like time and room. However, the day field is required; it won’t let you schedule for every day.. But it doesn’t provide much in the way of widgets to do that; and so if the user is in a hurry, they might forget to enter a day and it’ll give an error like this that says “No day is specified.” And what’s shocking is when you get to this point, it doesn’t give you a chance to specify the day. So, there are several ways that we might simply revise this interface. One is that we might make the day selection widget clearer and more salient. And the other thing is, if somehow somebody forgets to specify a day, the next thing that we show them would be an option to select which of the days that we want, as opposed to just saying, “No, I’m sorry you did it wrong.” And it’s not clear at this point how you would go back or start over to modify. Here’s an example of a search system that provides unnecessary constraints. I was searching for my colleague Dan Olson’s book, so I typed Olson into the search field, and Enter. And I was hoping that it would give me a list of books, and I could select from among them. However, it says, “No, I’m sorry, you must select a catalog to begin your search in.” There are a number of implementation reasons why it might be preferable to select a catalog. And in fact, once we get going, I may even want to narrow by catalog to improve the quality of my options. But it doesn’t seem like you should need to select a catalog to get started — at least give me some results based on any input. That’s one thing that I think search systems, when implemented well, do a fantastic job of. We’ll continue our tour of the heuristics in the next video.