Smart Interfaces (or extending smart defaults)

Hey! It's me!

Smart Interfaces (or extending smart defaults)

Posted on July 6th 2009

Smart defaults, a small addition to UX which dictates how a field should contain a default value good enough to usually not need to be changed, is a step towards smarter interfaces. We’re not quite there yet… it’s time we make interfaces smart on their own.

Smart defaults 101

These are the form fields already filled in for you by the website (probably via the back-end or the javascript), they help you achieve an identical result with less effort and in less time. For instance, you’re presented with a sign up form and when you get to the “country” select box, “United States” is already selected. This could either be the result of Geographic positioning by IP, a detected browser or OS country code or it could even be a developer or a UX practitioner who assumed that’s how the majority of people would answer to this particular question.

As of now, this is best practice if you have mesured statistics and have accumulated data on your visitors or if you have a good reason to believe this is the right answer in more than 50% of the cases.

In my experience though, websites are not nearly providing the smartest defaults, interfaces aren’t smart enough.

But first, recommendation systems.

Smart defaults, a subset of UX, as of yet are only implemented using intuition or brute data. Not good enough. Can we process this data to a better result? Yes. Using basic AI algorithms, not unlike recommendation systems.

They’re popping up like crazy, all over the web. No wonder, recommendation systems rock! They help you find books, music, videos and people that are right along your preferences. In the case of Amazon, they do this by using an algorithm which will determine which other buyer bought the same books you did and by subtracting the books you both have in common, it returns the books you don’t have that he has. Adding the quality of the reviews on the books, those are now “recommended” for you. You should like them. Disclaimer: the process might not be exactly like that, but that’s a known way of doing it.

I’d like to bring a similar system to smart defaults, rendering them much more efficient than ever.

“Recent searches” are not good enough either

Say you’ve focused on a field and you start typing a few letters. A moment later, the site’s cool autocompletion feature kicks in, it gives you hints on what you might be looking for, all this as a way to make it easier and faster to fill in that field (also limiting human errors as much as possible).

Some of these systems also include your recent searches up top, these are supposed to be more relevant results. Quite frankly, they often are, it depends on the context. If the application in question requires you to make searches of the same things frequently, then that might come in handy. It’s also a failure in a sense, the app is not adaptative enough to provide faster and better means of accomplishing the same results.

So what’s wrong?

The problem with current solutions

They aren’t adaptative on their own. They don’t respond to change, they only suggest answers according to the way they we’re statically programmed. Sure, they use a database and so they’re dynamic in the programmatic sense, but they are definitely “static” when we consider UX and how people really use an application.

Classic example: I just finished writing a blog post, I’m selecting a category and then I start typing tags which are autocompleted by a small system. This system looks up all the tags in the database (or just the one my user already used, but still a good load) without considering any other variable. Although I have selected the category “Project Management”, when I start typing ag, if I have already used the tag “agriculture” often, it might just propose that.

If the system simply added the variable category to their live search and suggestions of tags, then it would have indubitably proposed the tag “agile”, since there’s only a very very small chance I’ll write something about “agriculture” in my “project management” category.

A fix is in order

There’s a pressing need for smarter apps, smarter defaults and smarter suggestions. By better identifying the variables that come into play. Often, they’re not as obvious as you might think.

Real-world example

My partner and I have been working on a cool project recently. It’s an online service for flight logbooking, targetting pilots interested in using a much better interface to log their flights and who might be interested in knowing what other pilots' flights might be like.

The flight log entry form is a piece of work I am proud of. The form includes many different fields, but among them: aircraft, ident (unique id for an aircraft), from and to (airports). There a lot you can deduce with this information.

We already know:

  • An airport has many aircrafts;
  • An aircraft is identified by a unique ident;
  • All the data the user has already entered in the past.

What we can do with all this:

  • From the aircraft’s ident, we can deduce the aircraft model and the “from” airport;
  • From the starting airport, we can narrow the autocompletion on the aircraft field;
  • Knowing if the aircraft is a rental (from the ident and data we already have), we can figure out that the arrival airport will probably be the same as the starting one.

Only a start, but better than the currently existing alternatives.

Dumb interface example

For a few months now, I’ve been playing NHL 2009 quite a bit. I got to say, it’s a great game, but has a poor interface to say the least, they could do much better with a few improvements.

What I despise about their interface:

  • Too many confirmations for low consequences actions (like going back in the “Play Now” screen)
  • When I want to play a game mode, 99% of the time I don’t want to create a new file, I just want to load the previous one.
  • Why do I have to simulate calendar days and then select “Play next game”? Why can’t I just press “Play next game” and it would automatically simulate all days (which have no games) and get me in the next game?
  • When someone with a profile that doesn’t have a saved game of NHL 2009 presses start at the beginning, there’s no way you can go back and the only available options are “Retry” and “Continue without saving”. You would think that last one would get you in a game or something that you wouldn’t save… no it starts you a new player, when you just want to play a quick game with friends, it’s very very frustrating.

What’s your point?

The EA Sports NHL 2009 team didn’t consider how the majority of their user would use their game. They didn’t realize how painful it is to load existing games, how long and complex it is to browse through 3-4 menus to get where you want. I wouldn’t have minded much if the function I’m trying to access was only seldomly used, but it seems like loading a dynasty or a “be a pro” saved game is my main interest.

Moreover, NHL 2009’s interface is not forgiving. Whenever you enter the wrong screen, to go back where you are, it takes many steps and buttons for no good reason since the cost of losing the information entered in the screen is small to none.

Here’s an example flow of playing a dynasty game:

  1. … wait for the game to load
  2. Press Start
  3. Press Game Modes
  4. Press Dynasty
  5. Press Load
  6. Choose your game and press A
  7. Open the calendar
  8. Find the next game
  9. Simulate up to this day
  10. “No”, I don’t want to play the AHL game, don’t you think 82 games is enough?
  11. Press A
  12. Press A
  13. Press A
  14. Press A
  15. … wait for the game to load
  16. Press Start

We made it! This took at least 5 minutes to load one of the most basic of functionalities of NHL 2009: Play a hockey game of a saved dynasty.

How to make it better

  • Set defaults. I don’t have to modify all the options of the game before I play it, because most of the time, I just want to play. Let me change them in the in-game settings menu (which you already can do.)
  • Provide shortcuts to getting to where you want: I’m not interested in finding the next game, simulating up to it and denying to play the AHL game, I just want to play. Give me a button “Play next NHL calendar game” or provide an option to always simulate the AHL games or the NHL ones and label the button “Play next calendar game”. Sure, there might be trade offers in between games. Fine, just pop it up before I play and halt the process. It almost never happens anyway.
  • I usually only play 2-3 games per day, I’m not finishing up my 10-years dynasty every day, so I’d probably just want to load that dynasty up instead of creating a new one. Hell, give me a button in the -main menu- to load my last dynasty or my last “be a pro” saved game.
  • Please, if I don’t have a saved game and I choose to “continue without saving”, it means I’m with friends and I want to play a quick game, someone pressed Start with the wrong profile, be forgiveful. Don’t make me start customizing a player to start a “be a pro” season when I’d need to start over when I’d end my session anyway.

I’m sorry, I’m really frustrated at NHL 2009’s dumb interface.


Any application or website would benefit from a smarter interface, an automatically-adaptable defaults-providing interface. Interface is a key word here, smart defaults are superb, but they’re too thought of as restricted to filling in predefined values in forms, I think they should apply to interfaces in the broadest of senses.

Creating a smart interface mainly consists in designing for the masses (50%+ of the use cases), providing them with the least number of clicks possible to achieve their most desired goal.

But it also encourages thinking long and hard about how you can offer less options, but smarter ones, to your users. This enables for faster usage of your application to achieve goals by adding variables to the queries fetching those choices lists. That’s what I call an adaptative interface, one that can give you smarter choices over time by adding level of complexity to the different filters that’ll list choices to your users.