Sunday, February 28, 2010

Problems with tabs in user interfaces

I apologize to any old readers, and new readers who have looked at my older posts, that this post is quite disconnected from the older ones. Considering I haven't posted in more than 3 years, that's not a surprise though :p.

Reading Celeste Lyn Paul's ideas about using tabs in the taskbar has reminded me about some of my thoughts on tabs in user interfaces.

Every major browser is using tabs now, and we can also find them in text editors, virtual terminals, and as Celeste mentioned it is being integrated to KDE's window manager. One of the motivations for tabs is to limit the number of windows and task bar entries, by grouping multiple "documents" in the same window. This helps reduce clutter on the desktop and task bar, but often the clutter is simply moved to the tab bar of the application. My Chrome window tends to gather 10 or more tabs after an hour, and by that time, many of the open tabs aren't really related to what I am working on at the moment.

I think there are three cases of why people use multiple tabs (or if they were never invented, multiple windows or "documents"):

  1. They need to work with multiple things at the same time. For example, I might have Google Translator open while translating a Google Document. I might be running some commands in one Konsole tab, while reading a manual page in another tab.
  2. They want to move on to something else, but the old document cannot be closed for some reason. For example, while aptitude is upgrading packages in one Konsole tab, I want to run another command, and so I open another tab.
  3. Sometimes the user didn't intend to be "done" with the first thing, but forgets to get back to it after opening a new tab. This is kind of in between cases 1 and 2. For example, sometimes while I'm waiting for an online video to load, or writing a post like this, I'd get distracted and open another site and forget about what I was doing until a few hours later.

I think case 1 is where tabs are doing the best in their role. Grouping closely related tasks on the same view can help the user increase productivity. Many applications that support tabs also allow you to move tabs manually, and create multiple windows with tabs, to organize tabs the way you need. However, I personally rarely use these features, and I think using them extensively could take enough time to cancel the productivity benefits.

Another problem is that closely related tasks are not always done in the same application. Nowadays you can do a lot of things with the web browser, including watching videos, playing games, word processing, calculating, and translating. But there are still a lot of desktop applications that can work together to help with the user's tasks. Normally you cannot put these separate applications in tabs to help with your workflow. KDE allows you to group windows from different applications together as tabs now, but it's currently not very convenient to do, and it can be confusing to have tabs both on the window manager level and the application level. I think ideally, applications shouldn't be concerned with having tabs, and should just leave it to the window manager and the user to organize tasks in different ways, be it to put windows side by side, dock them, or tab them.

Cases 2 and 3 are not benefits from tabs, but rather clearer demonstrations of their problems. Although, maybe the problems are inherent to multi-tasking and the amount of distractions in our lives today. I think it would help if there was a system that could automatically close, or hide long-untouched tasks. This would require work to be not lost when a window or tab is closed: for example, forum and blog editing pages should autosave the content, and the browser should be able to re-open a page with the same state as it was before being closed. On Linux we use the program Screen to keep a command line program running without keeping it on the display, and this could be extended to the whole desktop. However, there are challenges associated with keeping more and more programs running in the background, reloading them fast enough, and presenting their list to the user in a non-distracting way, yet preventing the user from forgetting about them completely.