Coding Horror

programming and human factors

The Problem With Tabbed Interfaces

Cyrus Najmabadi* hates tabs in web browsers:

Ok, I seriously don't get tabs on Windows. Hell, I don't get tabs on OSX either. In the latter there's a great system called Expos, and in the former the taskbar does the job. Once I start using tabs, things go all to hell. On OSX, I can't tell which FireFox/Safari window has the tab I want (since it's too small). In Windows I find myself scanning the taskbar for a site I was looking at, but I can't find it because the taskbar only lists the currently active tab. This makes it so difficult to actually find the site I want and it ends up being far slower than just having a window available for each site.

Initially I disagreed with Cyrus. However broken tabbed browsing may be, it's still a better solution than any of the existing alternatives. For example, Microsoft's own flagship Office suite, even today, suffers from some highly inconsistent, bizarre pseudo-MDI behavior for multiple documents. I'll take simple, reliable tabs over oddball MDI any day. No contest.

Lately I'm starting to come around to Cyrus' way of thinking. I don't hate tabbed interfaces-- yet-- but I definitely see what Cyrus was talking about. Tabs are increasingly the source of two aggravating mistakes for me:

  1. I inadvertently open multiple copies of a web site, because I can't see that I already had that web site open in an obscured tab of an existing browser window.
  2. I accidentally close a browser window containing information that I needed, because the information was in an obscured tab of that particular browser window.

In a tabbed interface, it's difficult to see anything except the active tab at any given time. Tabbed interfaces obscure as much as they organize. Tabs are great in moderation, but once they become a keystone navigational technique of your core applications, something peculiar happens. As Cyrus so aptly said, "once I start using tabs [extensively], things go all to hell."

Allow me to illustrate with an example. Let's say I want to check my GMail account, which I do frequently throughout the day. It's likely I already have GMail running, somewhere, so job #1 is to find it.

First, I scan the text in the taskbars. I use UltraMon, so each of my three monitors has its own distinct taskbar, summarizing every window on that monitor.

taskbar

But I don't see the word "GMail" in any of the three taskbars.

Next, I press ALT+TAB-- the poor man's Expos-- and scan through thumbnails of all the windows I have open. Do I see anything that looks like GMail?

desktop-alt-tab-small

No. I don't see the distinctive look of the GMail user interface in any of those thumbnails. I've actually enlarged the Alt+Tab thumbnail size via registry tweaks, so this is as good as it gets for visibility. Squinting doesn't help.

The Alt+Tab dialog only uses the primary monitor, even though I have a three-monitor configuration. But we can harness the entire screen area of all the monitors if we install the amazing Switcher. I have Switcher mapped to Windows+Tab, replacing the incredibly lame Flip3D. This is functionally identical to the OSX Expose that Cyrus mentioned. Now can I find GMail?

desktop-switcher-small

No. Even with the additional resolution of Switcher across all three monitors, I don't see GMail in any of the windows. At this point I would usually launch the URL using the keyboard entry area of the Vista Start Menu. I could use the fancy Start++ add-in to make this easier, but the vanilla Vista menu works well enough.

But wait! I actually had GMail open already. I've made a mistake.. again. I have two copies of GMail running now. Did you see it? Here, let me show you:

desktop-switcher-closeup.png

That muddy, tiny little morass of pixels is the only visual indication that I already had GMail running as a tab in an existing browser instance. It's not in the taskbar, it's hardly visible at all in the small Alt+Tab screenshot, and you'd need the Six Million Dollar Man's bionic eye to see that barely visible tab in Expose, I mean, Switcher.

The depressing thing is that it's usually faster to mindlessly launch a new browser than it is to go through this tedious routine of playing Where's Waldo with (n) browsers and (n) tabs. And that's what I often do. But it bothers me.

Let me be very clear-- I like tabs. I think they're a far better option than the terrible MDI-alike alternatives. But I also think tabbed interfaces present some pretty severe navigational problems of their own. In the above example, if GMail had been in its own browser window, I could have found it instantly by looking in the taskbar, or at worst, by visually selecting it from even a smallish thumbnail image. Because GMail was in a tab, I wasted my time trying to find it, and I wasted even more time needlessly launching another browser. And this isn't an isolated incident. This happens to me every day. More times than I'd care to admit.

So how can we fix this? How can we integrate tabs with the existing navigational features of the operating system, such as the taskbar, and Expose? I keep coming back to search as the dominant computing metaphor. The only thing I can think of is a plain-text search facility where I type "Gmail", and the OS would automatically highlight that tab (or window) and bring it to the front. That presupposes a very high level of integration between the application tabs and the operating system, however.

Despite the undeniable convenience of tabs for grouping and organizing related topics together in a single browser instance, I feel like tabs create as many problems for me as they solve. I wish I could "tear off" tabs into standalone windows on demand, too. That might be a reasonable workaround in the meantime.

* whatever happened to Cyrus? The last entry on his blog is two years old, and I can't find hide nor hair of him via internet searches. It's a shame, because I thoroughly enjoyed his blog.

Written by Jeff Atwood

Indoor enthusiast. Co-founder of Stack Exchange and Discourse. Disclaimer: I have no idea what I'm talking about. Find me here: http://twitter.com/codinghorror