With an additional white line sticked to each separator, the whole zoning becomes much less schematic, and more finished. The single pixel is almost invisible for the human eye, yet it has a polishing effect that I've always loved.
One thing that astounds me is that Google never uses this trick. Their designs use plain borders or backgrounds, and avoid this kind of eye candy. I love their web applications but really, they are hard to the eye.
Now does a more polished design offer a better usability ?
You don't need to actually open the mail client to see if you have new messages. A look at the dock is enough, and the dock is always visible.
You can't write much in a badge - or else, it overlaps an important part of the screen, and hides the background content. But numbers require few characters, and can be displayed in badges quite easily. Apple reused the badges in the iPhone OS interface: every application can display a number of 'new' or 'unread' items in a badge on the top right corner of its icon.
A web application can take advantage of the same technique to show a number of items requiring attention on top of an icon, or on top of a tab. That's what I decided to do for the sfBlogs application, by adding the number of draft posts in a badge pinned to the top right corner of the "Posts" tab, and the number of comments yet to moderate on the top right corner of the "Comments" tab:
Those are not intrusive, require only CSS to be properly rendered, and carry little pieces of important information that an editor needs to be aware of at all times.
Few application developers spend time on the design of the administration interface of their applications. It's often the last thing to work on, and there is never time for it. The result is that administration interfaces still look almost the same as five years ago, with clearly separated zones, and not much attention paid to the positioning of elements. So break free of the square design of web applications, and don't hesitate to use overlay techniques when it makes sense.
While designing the sfBlogs application, I wondered which panel should be displayed as the first page of the administration interface. The administration allows editors to add or review blog posts, to moderate comments, to create news blogs and invite other contributors. All the events occurring in any of these categories (a new post from a fellow contributor, a new comment on a post you've written, a change in the description of a blog you're following, etc.) can be of equal interest when an editor logs in the administration. In fact, because it is a multiple blog engine, the administration should emphasize on the contributions of people working on the same blogs as the editor. That's why I chose to display a timeline.
Most of the successful "social" web applications feature a list of recent events as their home page. For instance, think about Twitter or Facebook and their 'news feed'. They both display what the people you're following have been doing recently, so that you can keep in touch with them. Trac does a similar thing but relative to a project, not a group of people. In Trac, the 'news feed' is called a 'timeline' but that's basically the same thing. Why are timelines so popular? Timelines show all the news that you've 'received' from any person or group you're following. In a single line of text, you know when an event occurred, who the event concerns, and what the event is about. This should remind you of the most popular desktop application ever used (save the internet browser): the email client. The user interface of a timeline feels so natural because it is very similar to the standard way of dealing with the messages that you receive. Timelines deal with events as if they were messages addressed to you. There is a little more to timelines than an anti-chronological list of one-line events. Timelines aggregate in a similar fashion events of various nature, so that you can read the whole timeline without being disturbed by an odd-looking event. To put it differently, timelines organize pieces of content that would be difficult to read all in a row into a natural, flowing interface. sfBlogs is designed to allow multiple blogs per user, and multiple users per blog. I believe that seeing other people publish posts is a strong motivation to write something yourself. So a multiple blog engine must have a minimal "social layer" built in, to show what other bloggers are doing. The timeline is a perfect answer to that need.As I implemented the code necessary to record and display events on a timeline, I had to settle down a few business rules. For instance, what should a "new comment" event look like, and who should see it in their timeline? I decided that a comment event should show the comment author, the first words of the comment text, offer a link to the comment moderation, and another link to the post the comment is on. If the comment is not yet approved, the event should display a "please moderate" prefix. A comment event should appear in an editor's timeline if the comment is published on a post written by the editor, or in a blog owned by the editor.
All the events have their own logic, and little by little the choices I made to keep the timeline small and meaningful started to turn a multiple blog engine into a social publishing tool. Any event displayed in an editor's timeline makes it easier to collaborate on a blog, or to take inspiration from someone else's blog. So my conclusion is this: A backend administration interface open to more than one user should display a timeline as its home page. Incidentally, I had to develop a dedicated symfony component for dealing with events and a timeline, in an internationalized context. I believe that component could be reused outside of the sfBlogs application. Take a look at the source code and feel free to comment or reuse it for your own timelines...I've recorded a small screencast to showcase the look and feel of the backend administration of the sfBlogs application. You may find it useful to understand the usability statements that I try to raise in this blog.
If you're interested in seeing the code, head to:
http://trac.symfony-project.org/browser/plugins/sfBlogsPlugin/trunk
For a ready-to-go demo app, or to:
http://code.google.com/p/sfblogs/
For the plugin code.
Web applications are full of lists of items, most of which are paginated. Pagination is compulsory to avoid long lists that would put both the server and the browser on their knees. But once you accept to limit the number of items displayed in a list, you must provide controls to browse through pages of items. Of course, there is one good way to do that, and google shows you the example:
The pagination controls offer a way to go to the first page, to the previous page, to the next page, and to some of the surrounding pages. They also indicate which page you're reading, and if you are not google (where the maximum number of pages is always 100), the pagination controls also display the number of pages and / or results. Here is another example from Google: the pagination controls proposed on top of email lists in Gmail.
In web applications, forms are a nightmare for the user, the project manager, and the developer. They are counterintuitive and error prone, they require a lot of work for submission, validation, and redisplay when the validation fails, and because of that they require a lot of specifications and tests.
Let's consider the forms commonly used to filter lists of results in backend administrations. The first screenshot shows a filter form used to filter a list of users. These forms are very handy to quickly reduce the number of items displayed in a list, but if you look closely they have several drawbacks:
There is one drastic solution to overcome these drawbacks: don't use a form to filter a list. In fact, most of the time, you don't need to. Look at Apple's Mail client for instance (the second screenshot attached to this post). You can browse your emails by date, folder, account, you can search in the message sender, title, content, cc, and yet there is not "form" filter so to speak.
So how can you replace your current filter form with alternative controls?
- This week
- This month
- Last month
- Before last month
Granted, you won't have the same accuracy as with two date widgets, but it will be overall much simpler to use. Think of this date widget "linkification" as the way Apple do interfaces, as compared top the way Microsoft do interfaces; Apple's way offers less control, but answers 80% of the needs immediately. If the user ever needs to find something by date and if the proposed filters are not enough, changing the list ordering or actually parsing it will lead her to the result anyway.
If some filter controls can't be easily turned into a list, maybe there is an alternative way. Think about a list of comments in a blog application for instance. A good filter for this list would be the post that the comment refers to. The problem is that, as the number of posts increases, displaying a link for each post will take much of the vertical space and force other filters down the 'scroll limit'. There is an alternative solution: don't offer to filter on one post in the comments list, but offer to link to the list of comments related to a post from the page showing the details of a post. The filter is indirect, but it works. All in all, you should be able to remove filter forms altogether in most cases. For the administration interface of the sfBlogs application, I tried to follow these principles. There is only one search field to rule them all, and all the other filters are designed as list of links - check the last screenshot for glimpse of the UI.