
Click here to print.
Posted By Andrew Berkowitz On 25th June 2007 @ 09:00 | 43 Comments
You know those gossipy websites that show photos of celebrities without their makeup and fancy hairstyles? At Sparkplug1 we have a similar dirty secret — underneath the sexy exterior and suave feel of our websites lies a series of ugly, puffy, just-rolled-out-of-bed iterations that would make the paparazzi shriek for joy.
Getting the feel of a web application right – that careful balance of design, functionality and gleeful first impression – takes a lot of sweat, and often a number of false starts. If your final release looks anything like the first draft you doodled on a cocktail napkin, chances are you’re not putting in the time to get it right.
In this article we’ll look at the process we went through to design just one screen of our TeamSnap2 web app – and the long journey between “it functions” and “it feels right.”
In the past we tried wireframing websites to show our clients what we had in mind, dutifully drawing in little boxes to indicate what “pieces” would appear on each page. This turned out to be borderline useless:
Pretty quickly we learned that the best way to start designing the look and functionality of a website was to actually start building the website. Sure, we end up doing a lot of redesigning, but experience has shown that we’re going to have to redesign anyway, so why waste time in the beginning trying to plan what we’ll inevitably end up throwing away?
TeamSnap is a Web service that helps you to manage your recreational or youth sports teams. It came about because several people at Sparkplug play recreational sports and wanted a way to manage their own teams. The application lets you keep a roster and schedule, post and send messages, store and view game photos, assign who’s bringing refreshments and track player availability for each game. We’ll look at the Availability feature in this article, because it seemed exceedingly simple at first, but turned out to be quite complex once we dove into it.
Here’s what the Availability screen looked like in our very first design mock-up:

The concept is pretty simple: List the games, list the players, provide checkboxes to indicate who’s available to play. (Note that we’re showing Manager mode here, where the team manager can edit everyone’s availability. An individual player would only be able to edit their own availability.)
Right away you can see some serious problems:
After a few more iterations, and a wholesale redesign of the top banner, we came up with this version:

There are several notable improvements:
Smugly, we started showing this version around to our early testers. Unsmugly, we returned to the drawing board after we discovered that problems remained:
Another few iterations later, after some heavy-duty design work and some re-jiggering of features, we came up with this version. We were pretty sure we had it perfect:

There’s a lot to like here:
We felt pretty good about this version. So good, in fact, that it became our operable template as we began building the Availability back-end in Rails. Soon, however, programming ground to a halt as we launched into what became known as The Great Debate.
Our Creative Director felt very strongly that there should be only two states for Availability. Either you were available (green dot) or unavailable (no dot). He didn’t care if you were a “no,” a “maybe,” a “don’t know” or a “have to check with my spouse.” As a manager, he simply wanted to know: Can you commit to being at the game?
Our Development Director felt equally strongly that it was important to know if someone couldn’t be there. Without being able to distinguish between “no response” and “no,” you had no way of knowing who might show up and who wouldn’t.
After debating this internally for several days we did what we should have done in the first place: We called up a few team managers and asked them what they wanted. The results were unanimous. They wanted to know if someone wouldn’t be there. They wanted a red dot.
Victorious, we began to add this to the system, only to realize something very troubling: We now had three states (yes, no and unknown). Unfortunately, an HTML checkbox only has two states (on and off), so there was no way to represent the three possibilities. If a checked box meant “Yes, I’ll be there,” what did an unchecked box mean? It couldn’t both mean “I won’t be there” and “No response.”
For three-state choices, you need drop-down menus.
Frankly, we hated this next version. From a usability standpoint, drop-down menus require a lot of finicky pointing, clicking and dragging, which makes them slow to operate. They also require reading instead of iconic recognition, which makes them slow to parse. Functionally this worked. Feel-wise this was less than ideal:

We also explored the possibility of three radio buttons for each event, but rejected that as being absurdly cluttered, or in designer’s parlance “butt ugly”.
What we needed was an HTML widget that didn’t exist – the multi-state checkbox. Luckily, with some graphics, some Javascript and a bit of pluck, we realized we could build our own. Our homegrown checkbox had three states – empty, yes and no. Just click to cycle through the three options:

Even better, by hooking the checkbox code directly to the database with some fancy AJAX wizardry, we completely eliminated the modal editing state. Instead, you are always in edit mode with no need for an Edit or Save button. Every time you click a checkbox your availability for that game or practice is immediately recorded to the database. It’s much simpler and goof-proof for users, yet these always-clickable checkboxes are so visually pleasing that they never feel overwhelming, even with many on the page.
We also use AJAX to immediately update the total available players count in the footer, adding a subtle blinking effect to visually confirm that the change has been recorded. Alas, a static screenshot can’t give you the emotional satisfaction of actually poking the AJAX widgetry yourself; if you want to try it out you can sign up your own sample TeamSnap team (for free) and give it a whirl.

This final version also has a few more visual tweaks:
Happy as we are with this version, we know that in the coming months we’ll continue to tinker to improve this screen further. There’s no such thing as being “done” in a Web application. Our users have already suggested ways in which Availability could be improved, including:
These are all good ideas, and in the coming weeks we’ll be evaluating them to decide which can be implemented without making the basic functionality of the Availability screen too complex. Before adding any feature we look for the right balance of simplicity, power, utility and feel. Because no matter how handy a feature is, if it doesn’t feel right people won’t use it.
Getting from functional to “feels great” can be a long process, and sometimes it’s frustrating to tinker with existing features when you want to be adding new ones. But the payoff – a page that just looks and feels right to the user – is worth the time spent on each revision.
Article printed from Vitamin Features: http://www.thinkvitamin.com/features
URL to article: http://www.thinkvitamin.com/features/design/web-app-without-makeup-the-design-iterations-of-teamsnap
Click here to print.