I'm Aza Raskin @azaaza. I make shiny things. I simplify.

I'm the Creative Lead for Firefox.

 

Solving the Alt-Tab Problem

Sponsored by

Switching between applications, windows, and tabs is a fundamental action of modern computers. As people browse the web, we know that an average user will switch tabs more times in a day than they click on a link. Think about that. Much of your time using a modern browser (computer) is spent in the digital equivalent of shuffling papers.

Every major OS provides an “alt-tab” interface: a keyboard shortcut for quickly switching between windows and applications. To use it, you tap alt-tab and you are jumped back to the last focused window. Tap multiple times to cycle through all open applications. It seems simple enough, but there’s a interface gorilla in the room: What order should the applications be shown and cycled through?

What order should command-tab interfaces display for switching between applications?

Throughout this blog post, I’ll refer to the problem as switching between applications using alt-tab (PC) and command-tab (Mac), but the thinking applies just as well to tabs in Firefox—it is something we have been thinking a lot about recently. More on that later.

Tab switching data thanks to Test Pilot and Patrick Dubroy.

The standard method is to use MRU (Most Recently Used) order: the applications are arranged in the order in which they were last used. This works great for switching back-and-forth between two apps, which is a very common task. Unfortunately, that’s most of what it is good for. People have a strong spatial memory and the constant seethings of MRU confound it. If you need to switch between three windows (another common task), you are out of luck because MRU frustrates your natural tendency to form habits. Here’s a situation that comes up often in user testing:

You’ve been using alt-tab to bounce back-and-forth between your text editor and your web browser—you’ve formed a habit. You now click over to your Twitter client to see your friend’s latest updates, click back to your text editor, type a few sentences and hit alt-tab. What happens? Because of your habit, you expect it to go to your web browser, but because the last used application was your Twitter client, that’s where it switches. That’s most likely not what you wanted. What happens next? You generally pause to think, and then use double alt-tab to switch where you wanted to go, which is your web browser. Then you hit alt-tab to switch back to your editor (habit!) and instead it goes back to Twitter. The troubled cycle repeats until MRU’s ordered once again aligns with your habit.

The constantly shifting positions means that the pattern of tapping alt-tab to switch to the window you desire becomes unpredictable. Thinking about how to switch tabs rips your attention from completing your task and put it squarely on using the computer.

Instead of MRU ordering, we could use a static ordering dictated by when the applications were opened. This works well with spatial memory as applications are exactly where you left them, but it entirely ignores the need to quick-switch between two apps.

That’s where we’ve been stuck for the last twenty years, using the MRU ordering despite its flaws because switching back-and-forth between two applications is such a powerful need.

A Better Way

The biggest problem with MRU is that it breaks habituation. This solution is focused around keeping alt-tab from frustrating our habits: if you’ve been switching between two applications constantly, when you then switch to a third application, it shouldn’t change the behavior of alt-tab between those original two apps. The system should detect your habits and respect them. In the above case, the ordering would always keep the web browser and text editor next to each other, once the habit was formed.

This kind of interface is a habit respecting design and I dub it HRMRU order or Habit Respecting Most Recently Used order. With it, alt-tab would switch to an interface that seems to magically know what you want: hitting alt-tab almost always takes you were you want to go.

How do you detect habits?

The complexity in this design stems from knowing when a habit has been formed. The problem gets even more complex if there are two conflicting sets of habits (e.g., you switch between TextMate and Firefox a lot, and between Firefox and Tweetie a lot).

Detecting a habit is heuristic task and would take tweaking to get right. The heuristic metric I’d start with would depend on frecency (frequency + recency): the more often you make a particular switch the more likely it is you have a formed a habit, the less recent the particular switch the less likely it is to still be a habit. In other words, frequency would boost a “habit” score which would then decay over time.

In the case of overlapping habits, the interface should choose one (the more frecent diad) and stick with it. That promotes the habituation so your fingers can, over time, learn with for which app pairs to tap tab and for which to double-tap tab.

A Crazy Thought

Here’s a crazy thought. App switching can be be modeled with a Markov model. Why not crunch the numbers in real-time and use the output of the Markov model to determine to which app you are most likely to switch? It’s really just a generalization of the above idea. You could actually take it a step further further and use the Markov model to find the sets of apps you switch between often, thereby allowing the computer to automatically detect the workspaces you make ad-hoc simply by watching how you switch between apps.

While there are well-known issues with adaptive interfaces, if you followed the same guidelines above to make it a habit-respecting adaptive interface, we might get an interface that seems capable of mind reading. Of course, we might also get an interface that’s too clever for it’s own good. Only careful implementation with an eye towards respecting habits followed by intensive user testing can tell which one it will be.

Exercise for the reader

I’m sure there are other ways of coming up with a smarter ordering. If you think of anything please let me know in a comment. Style points for implementing it. If you come up with something awesome, I’ll send you some Firefox goodies.

RT @azaaza Solving the Alt-Tab Problem | Follow @azaaza on Twitter | All blog posts

View all 117 comments


Another problem with a such adaptive interfaces is when your girlfriend spends one evening on your laptop completely messing the HMM leaving you with the only choice to reset the HMM losing weeks of learned behaviour.

A way to undo what it learned for the past day/specific timeframe, or forget some applications (or sites if we talk tabs) could be helpful in a such situation. (I wonder if you could visualise the “knowledge” inside a HMM on a time scale)



    Aza Raskin

    We have a similar problem with the awesome bar in Firefox. Isn’t that why we have multiple user setups? On the other hand, my guess is that these habits have medium half-lives — they last about only a bit longer than your current session. A frecency metric helps to account for that by adding time decay.



      Simon

      Isn’t that why we have multiple user setups?

      You have multiple-user setups? Most home users I know don’t – my parents share a single user account, because when most of their files and settings *are* common, there’s no reason to (and good reason not to) separate them.



        Leafy

        Indeed. I for one don’t have multiple accounts on my PC and it’s a family of five members. “Public computers” also do not allow for habituation.
        Habituating interfaces I think should be opt-in: the default scenario should be that the user can/will not form habits.


A very preliminary thought: could the model used to “notice” a users’ switching pattern be manipulated by Interrupts (programs that alert/notify)?

Patterns are clearly the way to go for a browser (well, for some apps on a browser at least) or a text-editor. But my pattern of browsing or indeed, switching changes dramatically whenever I’m interrupted by an IM ping, or a tweet/facebook/email notification. If we were to ignore these alerts, and develop patterns, we would could potentially have a fairly accurate model for switching habits between “static” applications. And when an Interurpt does happen, the system recognizes the Interrupt, and pushes this Interrupt up to the second/third spot on the switch queue.

The Interrupt system itself could adapt over time. For example, if I really wasn’t paying much attention everytime Tweet-Deck pings me with an update, the system could stop allocating it with a 3rd/4th switch spot and vice-versa.

So essentially, mapping habits, and Interruptions.


The problem with your proposed solutions is the “almost always”. I don’t particularly like the current alt+tab situation (see below) but it at least behaves predictably. I think it might be possible to do what you describe IF you had deep insight into the state of apps. As an example, after you get an IM, the user switches to the Adium window 95% of the time. The problem is when behaviors aren’t well defined. E.g. I’m developing a stylesheet for the browser, I refresh the page and then jump to… the image editor to tweak an image, the Preview window to look at the comp (if I’m not working with an external monitor), or the editor window to change the padding. I don’t see how the system could accurately predict this so I’d have to verify that I went to the right place every time I alt+tabbed. With the MRU scheme, I might forget that I jumped to the comp window and then to the editor so I make a mode error by blindly alt+tabbing but at least I understand why that happens. In other words, predictive alt+tabbing might get me there objectively faster, but unless it always gets me there, I have to spend time and effort verifying that I’m where I wanted to be.

Aside:

For a number of years I ran a very rigid window setup in the WMI tiling window manager because I realized I was spending a significant fraction of my time and (more importantly) mental effort during programming flow time. WMI, because it was tiling, provides actions to move focus to an app in a particular direction on screen. Putting everything together, as long as you kept roughly the same window set up, the keyboard shortcut to get to that app could be pushed into muscle memory.

As an example, Firefox would be H-2 (H is hyper, which I mapped to caps lock and used entirely for window management) while the primary Vim would be H-1,H-h, main term H-1,H-l,H-k. I was able to switch to any window on the desktop with complete precision within 4 keystrokes and I had the ones I used regularly entirely in muscle memory. When you’re juggling an editor, a second editing window for reference, a repl, a term/log window, a browser, and an image editor when doing web dev eliminating the scan time for switching between apps was a big deal.

I got tired of doing system maintenance with Linux and switched over to OS X but now I have to run a 1600×1200 24″ monitor positioned above my 1400×900 laptop screen in order to get roughly the same productivity I had with my 1024×768 screen WMI setup.



Fritz

My only issue–and maybe I’ve never seen an adaptive interface done well–is that it removes predictability of ordering. The current system might not be right most of the time for one click but I always know the order it will be in. I think there is some loss having that go away.


Great post. This design could obviously be extended to multiple windows of the same application. I leave many safari windows open while browsing, and with more than 2 windows open, the tab-switching just becomes a mess.

I think, the learning heuristic should give weights to the following factors –
1. How _recently_ did you start switching within the pair (or triad). For example, when I am doing web research, I switch between Safari and TextEdit multiple times during the course of that action.
2. How _frequently_ are you switching. More frequent switching will mean a higher need to learn.

I think that the weightage for past sessions should be minimal. For example, if I was switching between TextEdit and Pages often yesterday, that information may not be very relevant for me today. Also, over relying on past actions may increase the adaptive interface confusion that you mentioned in your earlier post.



Tiago Sá

I’m used to Windows MRU, but I switch firefox tabs without it. I think if Windows suddenly started using HRMRU, I’d get all confused and would spend at least a few seconds per hour remodeling the habits, because I know how to work around a standard MRU, and I know that if I break an habit, it is broken and I’ll have to alt+tab-tab to get back on schedule. IF I want. That’s a big if.

I think “intelligent” and “mind-reading” software, be it a simple “intelligent” button or anything else, is always a pain in the ass, and I always prefer having to click more buttons than to have the computer try to match my needs.


To maximize habit forming,
leave the ap icons in a fixed sequence.
So, when hitting alttab
I may go from current number 3 to number 4,
but number 3 is always number 3, never moves to be first.

Going from 3 to 2 may take several key hits, going round,
which, once habitual takes less time than searching and puzzling.



    Zach White

    Don’t forget that you can shift + alt + tab to go from MRU position 3 to position 2 in one stroke (reverse)



David Regev

Another solution would be simply to separate the two functions completely: Alt+Tab for switching in a spatial way, and a separate hotkey, say F4, for switching between the two most recently-used applications.

I wonder if HRMRU would work in a tabbed-browsing environment. Tabs are always visible, and HRMRU would require tabs to move around, and that can feel unpredictable. Also, in my own browsing habits, moving to the next tab on the right is far more common than switching back and forth between two tabs.

I also wonder if people’s productivity would increase if Alt+Tab weren’t as unpredictable (and annoying), but actually preserved the visual order in the taskbar or dock. If it did, then my other concerns about tabbed-browsing might also apply.

In the end, it’s possible that HRMRU would work as a unified solution, but it also may turn out that the best solution would be to separate the two functions, as I described. Either way, F4 for switching between the two most recently-used tabs in Firefox would be quite nice.



Kim Sullivan

How is it going to scale?

I’m probably not a typical user, but currently I have 21 windows open in Windows. I think I have a currently active “cluster” of windows which (with MRU) are moved to the beginning of the task switcher. This might involve more thinking (alt-tab?, alt-tab-tab?, alt-tab-tab-tab?), but at least its somewhat predictable and even allows for planning ahead (I sometimes switch to windows to get them up top in the queue when I know I’ll be needing them). Most other windows probably have some sort of random access pattern, who knows? I keep some apps running for days before I either resume working or close them.

And that’s just windows. In my browser, I have dozens of tabs open. 42 tabs in this, 62 in the second, 24 in the third (yes, I have to use tree style tab, the tab bar makes larger volumes of tabs unmanageable), not counting the tabs my GF has in a separate instance of Firefox thats running in parralel. With large amounts of tabs, this “spatial memory” evryone talks about becomes mostly irrelevant I think (sadly, the extensions I used for MRU stopped working some time in the past, and I haven’t since gotten to find any that work with tree style tab).

So whatever you implement for the most common use case (hopefully, testpilot provides the data on the most common use case), please don’t make it difficult to manage for people who keep a lot more tabs open than 4 or 5.



Ward

Indeed, the alt-tab behavior is unpredictable. When I got a Mac about 2 years ago, one of the things I really liked, and replaced my alt-tab habit/struggle almost completely, was Exposé: it is quite easy to switch to another window. The minor thing about it is that it does require me to grab my mouse; it does have support for keyboard-only operation, but I don’t find it very practical.

For the last half year I am again using Windows 7 a lot, and missing the expose dearly. However, I’ve recently discovered that in Windows 7 the programs in the task bar can be accessed by pressing -1, , etc.

Reading your post made me realize that this feature can perhaps give me predictable sort-of alt-tab behavior. If you pin your most-used programs to the taskbar, you can use this key combination to quickly and predictable open the required program. It’ll just require some muscle memory training…



Ward

Hmm, seems like my keyboard mappings got filtered out in the post above. What I meant to say instead of “-1″ was windows key-1, windows key-2, etc..



Michael Rudolph

Hi Aza,

KDE is trying to solve a very similar problem. They want to group windows (or rather any interface element), that belong together into so called activities. The idea is, to eventually use “semantic technologies” to do the grouping automatically. When the same document is open in your editor and your bowser, for example, your editor and browser windows would be combined into one activity.

As with most KDE ideas however, they sound great on paper, but the team is notoriously bad at living up to their potential.

The related search terms would be “plasma activities” and “nepomuk”.

michael


Hi Aza,

I am not sure whether you remember or whether you followed such bugs at that time, but there was a bug to introduce MRU ordering of tab. And it was implemented in nightlies. And it was there for a long time. I tried to be loud of why it was not a good idea posting to bug, sending emails to Alex, etc…

Anyway, to put things in several sentences: ideally your next tab should be the one you want to switch to (or most likely). I guess we agree on that.

Application worfkflow and tab workflow is completely different, so different logic should apply. Mostly you switch between applications for copy and paste. And MRU aligns with that very well. Actually much better than anything I can think of.

Tab switching is different. Logic is news reading, feed reading, search reading. Essentially, you open many links from one page and then read them one after another. MRU would be horrible for that. My humble opinion is that Ctrl+Tab should go to next unread tab, and if there is no unread tab, it should go just to next tab to the right as it does now.


One more thing (as Steve would say ;) )

I wonder whether that graphical interface for switching apps in Windows was more because of unpredictability or because of the poor performance that computers had at that time.

It doesn’t make a lot of sense to me – in most cases, I would be much more happier if there was no such interface at all. it just slows down interaction in most cases…



Kjo

Or you could just make an autohotkey script and set different “make window active” on the homerow keys.
so like #j = firefox #k = something else
or if you wanted you could just make #j = alt+tabx2
You know what, any keyboard problem is solved by autohotkey.
I reprogrammed my fn key to a submenu key (which is probably one of the hardest things to do in autohotkey since it is specific per keyboard)
In anycase, however neat your idea may sound, I do not have a problem with the way it is currently, but it has made me think of an idea to which I could enhance my current situation of double tab.
Hopefully my ideas may inspire some customization into your program.



nobody

Why don’t you just use spaces? Shesh. Spaces + keyboard shortcuts = exact context switching.

When I press ctrl-3, that switches to firefox. When I press ctrl-1, that switches to terminal. ctrl-2 is vim. ctrl-4 is ichat.



Ian

You way over-thought that but you’re right on :)


ALT+TAB+MOUSE ON OS X WORKS PRETTY WELL



Henry Flower

In good old days ancient VTWM window manager has a concept called “ring”. The idea of it that user could have n number of customizable “rings”. Each ring was assigned to a different keybindings.

For example, the first ring was for switching between xterm and emacs; the second–for switching between browser and mutt; the third–general boring “alt-tab”.



Nate

I think the keyboard-based task (tab) switching is almost unsolvable in an ideal way, because there’s such a gulf between the ways that different people have learned to use it. Perfect “magic” for one user may be anathema to the next.

However, if I could have things all my own way, this is how I would implement keyboard-based switching.

Alt-Tab brings up a vertical menu of running tasks (or tabs) that doesn’t go away when you release the alt key. Each task has a number or letter next to it from 1-9 – tasks after that have no number. The MRU or your magic guessing heuristic orders them, but I can type letters in a filter box (to which my cursor is automatically moved) to reduce the number of visible tasks. So if I haven’t used firefox in a while (it’s off my list of 1-9), my keystrokes are alt-tab+fir+1. It seems like the new gnome-shell is pretty close to this type of interface with the Activities menu (it would be Windows key instead of alt-tab) – I’m looking into writing an extension for it. I don’t know why they don’t have it in there by default.

Of course, if you didn’t want to use filtering or number-switching in that menu, you could continue pressing tab until you got to the task you wanted and then press enter. Or you could use your mouse to click on the task you want to go to.

A completely separate idea for mouse-based task switching is a menu that groups task icons with some heuristic around the mouse in the center of the screen. Maybe it’s horizontal, maybe vertical (my personal preference so you can include text), or maybe it is circular. Let’s say it’s vertical – the current task is in the center of the screen and the mouse is located over it. If I press alt-tab and click immediately I’m right back in whatever application I was just using. Alt-tab again. Above and below the current task are the two MRU apps, and above and below them are the 3rd and 4th MRU apps. So my time to mouse to the 2nd,4th, etc MRU app is half of what it would be if they were ordered linearly.

You can extend the idea to a circular presentation pretty easily. Alt-tab and the mouse is in the center of the screen on nothing, and three icons are positioned in a circle around the mouse – the three MRU apps. The next five MRU are in the next larger circle, etc.

For tab switching in firefox, anything that is icon-based for switching seems problematic, because we don’t associated icons with websites very often. I would prefer my “list with filter” idea so I could type “alt-tab+aza+1″ or maybe “alt-tab+aza+[enter]” to get to this tab in a hurry.



Nate

Edit:

Each task has a number or letter next to it from 1-9 – tasks after that have no number.

should be

Each task has a number next to it from 1-9 – tasks after that have no number.



Grundlefleck

+1 for Nate’s type-to-filter-a-list-of-windows idea. Specific applications can go into muscle memory, and it’s scalable and constant.



Mike H

Hi Aza –

I’d like to echo the comment by Jagath, and suggest you consider a time weighting. I think if you simply do an MRU weighted by frequency and recentness, you can bypass the whole HMM complication (after some testing to determine usable weighting coefficients).

THANK YOU for raising this issue so eloquently, and I wish you luck.



    Aza Raskin

    That’s my guess as well, that frecency will give the most stable (from a user’s perspective) interface. That’s why I called the Markov chain idea a crazy thought :)



Anonymous

I find it ironic that the examples given in this article are from OS X, the only operating system left that ABSOLUTELY SUCKS at handling this problem.

I give you 2 reasons why I hate OS X and why it’s the farthest away from solving a problem that Windows/Gnome/KDE have all solved YEARS AGO:

Reason 1:

1) Open 2 instances of any application (separate windows)
2) Try to Apple + Tab to a unique instance of that application (without changing your key combo)

You can’t without selecting one and then switching to Apple + ` to select that particular child process.

Reason 2:

1) Minimize a currently open application
2) Use just the keyboard to reopen it (don’t use the mouse)

YOU CAN’T! This is infuriating to me. Why would you create a shortcut to hide or minimize an application (Apple + M, Apple + H) without a way of bringing it back up?

You’re right, Apple UI geniuses, let’s force a user to take their hand off the keyboard, click on their shitty over-priced Mac mouse (LET’S NOT GET INTO RIGHT CLICK, THAT’S A WHOLE ‘NOTHER BEAST), and then click on their app and wait for that stupid animation to be done with (and holy god if you were holding shift still while this happened, go get some coffee while you’re waiting).

It’s not like that waste of time adds up over the life you’ll spend using Mac proprietary products (otherwise Steve Jobs will stop supporting you in your sleep).

I understand UI / UX is basically the study of stupid people (thank goodness we have the Mac user base), but it’s things like this article that lead to such idiotic inventions like the automatic sink / toilet – SO automatic that it makes the human population feel retarded for needing to badly implement a solution condescendingly tell their fellow man they can’t take a shit correctly.

Here’s an archive of when XP solved this problem from your inbox, Aza:

To: Aza Raskin
From: The Year 2001

Thanks for solving the problem we did a while ago, lol.



    Rohan

    Um, how does Windows solve the problem?

    1) Ctrl+F3 to take focus back to the dock and you can get to the dock and the minimized window.

    2) Why would you want to minimize anyway? You can just switch spaces if you want to have some clear space. I rarely minimize.

    3) Why are you ranting about something else not even on topic about the Alt+Tab situation?



    joku

    Thanks, I didn’t know about Cmd+` ^^ (Although on my keyboard it means I have to press Cmd+Shift+´)



    joku

    And since you taught me a shortcut I’ll teach you one as well:

    When you minimised the single window of an application you can switch to that application using Cmd-Tab and while still holding Cmd press alt and release cmd before alt. That will switch to that application and deminimize its window.

    Sadly this only works if the application has no visible windows and thus it only works for one window, not to deminimize several windows of one application. Oh and it doesn’t work with Firefox, don’t know why. Bug?



Sidharth

HMM’s are not a crazy thought….



Sidharth

My friend used the same idea to read timestamps from mozilla browser history and predict the next page based on hidden variables like time of day current page previous page etc…



    Aza Raskin

    I would love to see the results from that experiment. What were the results?



Anon E. Mouse

A hidden Markov model might be inappropriate. One would think that the Markov model’s state would merely by the current app and N most recently used apps (where N could be 0). Since this state is directly observable by the computer, an ordinary Markov model would suffice.

A hidden Markov model denotes the existence of some dynamic parameter that the computer cannot directly observe, such as the user’s current mood. Such a model would take into account transitions between “happy” and “angry” in addition to transitions between “Firefox” and “TextMate”.



    Aza Raskin

    You are absolutely right. I was being sloppy with my usage of hidden Markov model and just plain Markov model. I’ve updated the article accordingly.



Rob

Cool article but I think there is a bigger elephant in the room.

How does a user discover the alt-tab mechanism?

Alt-tab has to be the single least discoverable keystroke in personal computing.

Christ-come-to-Earth would need his mate with a BSc. in Computer Science to tell him about it.



Dave

Good write. I wish I could customize my alt tab all the time and some times I’ll flow through apps just to do that. So really just allowing for a static alt tab rather than a dynamic one would be great.


Alternative/Multiple inputs

Something not to ignore is the fact that the design can include more advanced means of selecting. For example in OS X you can use the mouse to select an application after holding down the command key. Automatically assigning keys to applications, searching, and other means could all be implemented to provide a rich interface to switch.


At work, I tend to have a lot of windows open, and alt+tabbing sucks. A solution is definitely needed there.

At home, however, I have a solution, because I use Linux, which handles multiple desktops infinitely better than any MS Windows method I’ve found.

My web browser is ‘center’ (actually only desktop 2×2 on a 4×4 grid). Pidgin is up. The terminal is to the right. When a secondary browser window is needed, it’s to the left. When I have other tasks, they’re generally right-down, right-right, or right-up, with sub-tasks going off from there. I very rarely have to alt-tab, because I don’t have multiple windows per desktop. It’s a massive improvement over alt-tabbing.

So you’re right that spatial organization is the key. You’re just missing out on one (or more) of the spatial dimensions.

Alt-tab does have the advantage of being one-handed, whereas I navigate desktops with left_alt-arrow_key, but perhaps a mouse gesture is an option for some people. (I dislike using the mouse, so I wouldn’t be comfortable with that method, but I suspect many people would.) alt-1, alt-2, etc. would be an option as well. It’s how we navigate the first few tabs in Firefox and Chrome.



Steven

A simple implementation could be to let the user decide which applications are “paired”. I could for example select to pair Firefox with TextMate and as soon as I’d do this I would take the habit that Firefox TextMate switching = 1 alt-tab. Firefox or TextMate -> Tweetie = 2 alt-tab and finally Tweetie -> Firefox or TextMate = 1 alt-tab.

Even better I could select which one of the pair is the first one to appear. So for example, I set Firefox as the “primary” of that pair. Then, anytime I alt-tab to an application other than those 2, I’d take the habit that switching back to Firefox is 1 alt-tab and to TextMate is 2 alt-tab because never would that pair be in another order when another application is open.



Reader

I agree with Steven. Allowing user to manually choose pairing of applications would be the simplest and the most comfortable solution.


I’ve had a similar thought wrt markov modeling app switching. I hypothesize that the same reasoning could be applied to the osx Dock and windows task bars, so as to resize the representation on an app based on the predicted likelyhood of wanting to switch to it.

Nice article – thx



    Nathan

    I was thinking that having two dimensions to position app icons in the switcher would allow for a consistent ordering (along one dimension) as well as MRU ordering (along the other). Using size to represent the second dimension, as you suggest, might be less visually distracting than a 2D grid for the switcher (and similar heuristic-based resizing could be employed in the Dock as well).



Mike VanZant

I actually like the alt-tab and am used to throwing additional alt-tabs into the mix as needed, but yes, sometimes as you’ve found, I end up bouncing around a little to get back on track. Many editors and other apps don’t behave this way, they just go to the next or previous tab in the order displayed, and I really don’t like that.
So, as you’ve mentioned, a little added intelligence would be nice.



virgil scott

quicksilver does this does it not?



    Aza Raskin

    Yes it does. I’m a big fan of language-based solutions (my previous projects include Ubiquity and Enso). That said, alt-tab is a ubiquitous interface that we can improve.



としあき

It isn’t that rare that I am keeping track of 4+ applications that I constantly switch between (2 game clients, irc, web browser). Often times I need to switch quickly to a specific window or one or both of my characters would die or such. It did not take much time to get used to it and learn how to manage.



Beloq

You can stick with the idea of a stack of papers and just try to order them slightly more intelligently, or you can go with a different idea.

Personally, I like a cube. Open your browser on one face, switch to an adjacent face and open your text editor. Switch back and forth all you want. When you want to do something else, open it on a third face.

The nice thing about this approach is it leverages the human mind’s ability to think in 3D. As you spin the cube you can intuitively know where your applications are instead of losing them somewhere below the top two pages. Find just 4 sides too restrictive? Add more. Oh, and you can also put an Alt-Tab stack on each side of the cube, so you could alternatively group your browser and text editor onto one side of your cube.

Okay okay… I’ll come clean. This is not an original idea. Actually, it’s already implemented and something I use everyday. Just flip on the cube in desktop settings of KDE4. Done. No hacking or custom software needed. Next problem?


great insight in alt+tab..i frequently use windows alt+tab and this post has made me much richer in its knowledge..thanks…


Great post… but I’m with Karl G, above, on preferring something very predictable over something that tries to second-guess me. For example, on Windows, I always make sure that the first window in my taskbar is Firefox, the second window is Thunderbird (similarly, I keep my tray icons always in the same order) — using Taskbar Shuffle. I do the same thing with Firefox tabs: first one is GMail, second GCalendar, third one work intranet, fourth one work Trac. I disabled the Firefox pref that tries to insert tabs somewhere other than at the end, because I want it to be predictable. When I have multiple terminal windows open, I’ll order their taskbar buttons to match their location at the screen.

All that is to say, let me build muscle memory by having things in a fixed order/location, and don’t try to fuzz with that.



Fist

Hi, what about Winkey+Tab on vista/win7 with aero ? :)



Archaeopteryx

“As people browse the web, we know that an average user will switch tabs more times in a day than they click on a link”

We know? I don’t remember someone who does this is in the first few seconds I think about it, people I know browse the web (and use tabs less than I do).



Tao

I think this article, while well-meaning, is completely missing something:

“Alt-tab”, in its current (let’s say windows) incarnation, serves primarily one need: switching “Back and forth” between the most recently used apps. It has other bells and whistles (you can get to any running app if you are determined, you can see previews if you pause and have the right UI or extensions, etc) but basically you’re using it to switch between a very small set of slots.

The “Spatial Memory” part comes into play with the taskbar / dock / whatever your OS equivalent, and the actual arrangement of windows on the desktop;

the two or three modes of selection are complementary – I don’t want my “Alt-tab” order to be spatial / consistent because for spatial arrangement I have other options (how I arrange my windows with overlapping corners, how my taskbar groups my window handles, how another reader’s browser tabs are arranged hierarchically, etc)

“Mind Reading” software sounds great and looks great, but is really really frustrating and time-wasting when you actually need to work with it. If you really want to investigate and optimize “Switching” behaviour, identify simple rules that users can understand: “Most Switched to”, “Most time spent in”, something like that – and make it tweakable, and allow the nice simple 95% correct MRU functionality to be used if you want; I don’t need another virtual spatial arrangement, I want a way to avoid having to navigate / travel through virtual space in the first place!



thefre

To both completely avoid the problem and enjoy a great user interface, use virtual desktops with a direct shortcut for each desktop, and organize your work with one task per desktop.

This greatly reduces the number of windows on each desktop, typically to just 1 or 2 (and sometimes even 3!)

Now if alt-tab is only used to switch between 2 or 3 windows (and on some desktop they will already all be visible at the same time, and if you are using a mouse on those desktop you won’t even want to alt-tab), you don’t really have to worry about the order in which they are presented.



Nuss

I think this would be awesome. I switch between three applications on a regular basis: Browser, FTP Client, and Text Editor. This results in me always tapping alt+tab+tab. The HRMRU should also remember clusters of more than two apps for freaks like me.



Who

The problem doesn’t just stop at switching between apps. In a document centric environment, I find it really annoying that I have to decide whether switching between two docs involves switching between two different apps or not!

For example, I’m looking at a web page and writing about it. Text Editor and Firefox are my two apps – is use cmd+tab to switch between them. Now I open a text document and try to refer to that while writing my own stuff on it – cmd+tab _no longer_ works becuase my ‘reference document’ is in the same application. Why do I have to pay attention to this detail!?



cc

Changing the current window is not the whole story:
when switching frequently between _two_ applications,
almost certainly an additional action gets inserted — browser refresh in your web editing example.

When it comes to switching between _several_ applications, it’s WIN+1, WIN+2, WIN+3, etc. with fixed bindings for me.



So very crazy

Oddly, this has never been an issue for me. All of my opened apps, docs, browsed pages, etc., are all right there on my task bar. At the height of my productive day I may have 15-20 open apps down there. However, still, not a problem. Using the mouse, I swiftly move my hand, positioning the cursor on the correct tab, and click. BOOM. Done. Problem solved. WTH is wrong with you people? rofl. This is not rocket science, nor does it need to be made into it.



blueshifter

I want to second what Ivan Ičin said above — one of the #1 annoyances of using Opera is the fact that Ctrl-Tab does its best to avoid unread tabs (when, typically, I want to read my unread tabs. Otherwise I wouldn’t have opened them!)



mtcoder

To me alt tabing will go away completely in a short few years. Windows 7 provides the method / logic which will be used moving forward. Where your system bar provides tab drilling on a visual level. For example I mouse over the firefox tab and poof a set of visual based mini views opens up showing my tabs and their current content I click the one I want and am instantly there. With alt+tab the best I can do is get to an application. With the drill down effects you remove that added level. Same for Instant messengers. I have 1 IM tab on my system, but 10 windows, when I get a new IM I can mouse directly to it faster than I can alt tab, cause my mouse is usually in my hand. Since I have a navagation tree I can follow to drill down into the application I get more benefit than alt tabbing.

That is the other key part the system bar can / is based on the programmers of the application. Application aware, meaning if your downloading it can show the progress in system bar. Without the need to alt tab to begin with.

so really even dwelling on this subject starts to become a mute point. Not that it doesn’t have merrit thought is always worth the effort. Trying to derive a solution though should require more thought than an algorithm cause humans don’t work the same, we are always the X factor to any equation. You can only look to statisfy X to a level of Y percentage.


I guess I just had one of my interview questions answered… :)

I can’t believe no one’s tackled the ‘double alt-tab grararghgh!’ frustration thing before. The number of times the three-app-alt-tab-switch has tripped me up is innumerable.

I can only begin to imagine what a browser would be like if Firefox tabs were ordered in a similar way…



Frank Lucas

I’m impressed that you noticed this but more that you put it in the category of Habits. I never use Alt+Tab but go to the task bar to select. It does help, of course, that I use two (19″ LCD) monitors — that really cuts down on Alt-Tab and task bar clicking.

My beef is with the number of “click” it takes to do anything, and worst of all having to select paths for open/save operations. Few applications can record their last path.

Nice article, though.



Aaron Davies

Note that the earliest versions of OS X used fixed (launch) order cmd-tabbing.



    Aza Raskin

    I didn’t realize the OS X had migrated from a fixed order to an MRU. It highlights the power of the need to switch quickly between two apps (which, of course, then gets frustrated when a third wheel is introduced).



GB

Without having to resort to fancy algorithms for “frecency”, I’d prefer if all MRUs became MFUs (most *frequently* used). While they still would change over time, they wouldn’t change as drastically. I’m thinking less of the app switching Alt+Tab scenario, but rather file open or email message save to folder, scenarios.

I like to keep my email organized into folders and my email client has a “Move to folder” drop down which displays the most-recent folders to which I’ve moved items.

Since I use this button/menu quite often, I’d like for it’s contents to be somewhat stable. But since it’s based on recently used folders and sorted by recency, the menu is always changing and thus I can’t rely on muscle memory. It’ll even add folders I’ve only placed messages in, only once.

If this menu was based on *frequency* of use (not recency) it would be much more stable. The folders I tend to use all the time would always be there. And the folders I use most, would be at the top, giving them the shortest distance for target acquisition, leveraging Fitt’s Law.

The less-frequently used items would be at the bottom, and folders I use only once in a blue moon, wouldn’t show up…only if I choose a folder twice, would I want it to display. While this may not be as fancy as coming up with a predictable “frecency” algorithm, it would be simple to implement and provide much needed stability to these types of menus.


On Windows 7 I use – Vista Switcher:
http://www.ntwind.com/software/vistaswitcher.html

and forget about your problems!

The visual preview solves any problems I have with alt+tab.



Resuna

I think Firefox has done a pretty good job of figuring out your habits in their suggestions when you start entering text in the location bar. Don’t know the algorithm, but it’s probably worth looking at.



    Aza Raskin

    Glad you like the Firefox location bar algorithm (known here at Mozilla as the Awesome Bar). It also uses a frecency algorithm.


I totally follow you on this.

It’s annoying how the MRU tendency means that flipping between two apps that work well together (Word & PowerPoint, PhotoShop & InDesign, etc.) can be completely interrupted by switching to a third (email or QuickTime, etc.).


To keep the user focused, it is best to scramble the icons each time you cmd-tabbed. This way, the user will never form a habit and thus there is no problem anymore. Also, this is much easier than trying to detect habits :)



Chris Grella

Windows has solved this problem in two ways, and I have formed habits around each:

1) When you’re done with window 3, minimize it. That knocks it to the back of the Z-order so that Alt-Tab once again cycles between windows 1 and 2. (Windows 95 and later)

2) Use the Windows key + 1, 2, etc. to launch that shortcut or activate the running instance in your quick launch bar (or Win7 taskbar). (Windows Vista and later)

Every time I’ve seen a program (or any machine really) try to be smarter than me it has always failed. I prefer predictable.



    Chris Grella

    As a corollary to point 1, Alt-Esc will push the current window to the back of the Z-order (and thus the end of the Alt-Tab order) without having to minimize it. This is probably the preferred way since it’s closer to Alt-Tab and is faster than grabbing for the mouse or hitting Alt-spacebar, N.



Mary Lambert

To be honest, I think alt-tabbing is nearly useless and Mac’s Expose has the right model for app-switching. I think actually seeing the App you’re switching to as with Expose is where we should be going with interfaces. But I think more research is needed. Actually figuring out how to work well with our http://www.dirtyphonebook.com interface and figuring out how to explain to users what they can or can’t do is a challenge that requires lots of testing, research, video-taping, and just plain old-fashioned hard work. I don’t think any sort of math will fit well with user’s expectations so possibly something as simple as “PINNING” an app to a particular slot might be the best possible solution though, in the long run as it works well with user’s mental models and is used by Apps like Safari to pin frequently used web-pages to the default screen.



/b

The spatial-memory business all depends on the totally strange (to me) idea that applications are nouns. They are (to me) verbs, and verbs are arranged in my head as a stack. Therefore, the MRU business is completely natural to me. Furthermore, as at least one other commenter has stated, its behavior is perfectly predictable, and in turn does a very good job of predicting where I want to go next in most situations. It may not be ideal, but I think trying to get too clever about it will unnecessarily complicate things.



Alex

I’m more random than just 2 or 3 apps… I usually have more than 12 apps open as for example several instances of SSH to different machines (NO ! NO GROUPING ON THE SAME !!!)
A better solution is simply start showing the alt-tab list and allow the users to use the mouse to click on the app they want… more than often I instantly see what app I want to use and I can move the the mouse there faster than alt-tabbing.

Pain in the arse: when you click somewhere, that alt-tab list disappears…..

-Alex



Ken Wilcox

I like what you’ve got started here. I think context of what the user is doing would help.

I believe most of the time we are using program A as a main task and program B as a secondary task and Programs C and D are just “noise” (programs that are running but I care little about). What those programs are can change throughout the day.

Examples:
During the day I’ll use Editor/IDE of choice and Firefox to look up something I’m stuck on. An email, growl or tweete can come in to distract me, but the main program is my editor and secondary is the browser. The other programs are “noise”.

However, during a break or off hours, my feed reader becomes my primary application, email, twitter client, browser become secondary. The Editor is now “noise” something I may leave open, but I don’t care to see it at this point.

But, once I switch back to my Editor I’ve switched context and the once primary or secondary applications are now noise.

I guess you could say it’s task driven.


If its not predictable it will get annoying fast.

Within tabs in Firefox I tend to just use Command+# to switch directly to the tab I want. Maybe the items on the taskbar/dock should be numbered similarly, but use a different modifier key. That way I can switch to exactly the application I want, because (at least with the Windows 7 and OSX docks) the applications always sit in the same place.



Steve

Let users create quick-switch program groups, such as
[Work]: Word, Excel, Powerpoint
[Play]: Twitter, Facebook, Pandora

Within each group, let the user define whether to use HRMRU, MRU, order-opened, or a pre-defined fixed order.

Switch within groups using good ol’ Alt+Tab; switch between groups using Ctrl+Alt+Tab.


Another, already existing, possibility completely avoids MRU. In my browser (SeaMonkey, actually) I have about 70 tabs in fixed order (and on two rows thanks to userChrome.css). Each tabs displays only its favicon, which is enough for my mouse to unerringly find the desired tab. When the desired tab happens to be next (round-robin way) to the current tab, Ctrl+PgUp and Ctrl+PgDn also work.

The same applies to KDE or Gnome (yes, I’ve graduated out of bondage to Bill Gates), where I have “enough” virtual desktops with approximately one maximized window on each of them. Click the right spot of the tab bar (either the virtual desktop or the application thumbnail), and lo! there I am. Alt+Tab still works in MRU order, but only on the current virtual desktop. So e.g. between 3-pane mail window and mail compose window, but not between that and KDE System Guard (the Task Monitor, for you Windowsers), the browser (which I place on a different virtual desktop even though it is the same program as Mail&News), or the Vim text editor (which I control almost -but not totally- exclusively with the keyboard).



CurtainDog

In line with your good interfaces creating good habits post, the user should be directed to use hotkeys for commonly used apps (the hotkey would then have the combined responsibility of bring-to-front, cycle through similar processes, start new process). Alt-Tab can then be reserved for processes that are not hotkeyed.



    Philip

    I want to switch between my 10 xterm windows. Or between my 5 Firefox windows. Or my 3 OpenOffice windows. Hotkeying does not work for this.



Jean-Marc

Good idea, it would make sense to test the adaptive app switching in reality.

Personally, and considering the “spatial memory” you mentioned, I like to have fixed keys for most used applications. I’m used to press ALT-F2 to open the “run command/krunner” (in KDE) or Launchy (Windows) and would like to have the same for other applications.

Just configure ALT-1 for the browser, ALT-2 for E-Mail client, ALT-3 for Twitter, ALT-4 for text processor… Very easy to use and remember after few minutes. It’s limited to ~5-9 applications, but this is probably than enough.

For browser tabs, it shouldn’t “just be tabs”, but your browser should be aware of the application running in the tab. It should always open CNN.com on tab1, google reader in tab 2, my webmail client in tab 3…

Maybe the concept shouldn’t be limited to “applications”, but group several applications. KDE has a similar concept with activities [1], not sure how good it will work with 4.5, but I hope to be able to easily switch between activities with my keyboard.

[1] http://chani.wordpress.com/2009/11/28/the-future-of-activities/


I use command tab to switch between the windows that I am currently using and if i need to switch to another window I use spaces using expose when i mouse to the top left point of my screen, so this kind of feature would annoy me.


Ok, but where is the app?



Lysa

How about implementing an undo shortcut? That would solve most of the problems I have with Alt-Tab, while maintaining clearly determinate behavior.


This is interesting and a problem I have all the time and never really gave much thought to until now. What’s weird for me is that most of the time I don’t do a CMD+Shift+Tab to go backwards through the list and keep right on CMD+Tabing until I get the one I want.


Hi, nice article. I like the fact that you’ve cited user testing. I’ve also observed the problem you mentioned. Two other related isses I’ve see are not getting much chatter.

One I’ve noticed is that, despite the claims that Mac OS is more usable than some other OSs, it violates the very simplistic switching you’ve mentioned above by requiring a different shortcut to switch between windows of the same app than the shortcut for different apps. If you want to switch from one PDF document to another PDF document you must use apple + ` instead of apple + tab.

Along these same lines, more and more apps are using tabs, most notably browser windows. This combined with the idea that more and more apps are actually web-apps means the two tasks people may be switching between may be in different tabs in the browser. For example, gmail to google calendar. There is no standard shortcut for this that works between most programs. I expect this problem to become more prevalent in the coming times.



David Sparks

i REALLY like the idea of my text editor and browser being grouped together. i switch to photoshop a lot when building websites though so i think those 3 could end up creating the same problem in the group.

I made CMD+/ a shortcut for tweetie. hitting it pulls it to the front of the circulation where i can skim through the tweets, hit CMD+K to mark all as read and then hit CMD+/ again to send it to the back of the line leaving my two desired applications still at the front.

this solution helped me though it’s just one application. might help some other people. it actually helps use tweetie too by making the process of checking it much faster. i dont have to find it in my stack. its always at the back.


Excellent article with clear exposition of the kind of fundamental ui issues I lump under the rubric “saving state.”

It is astounding to me that using Windows Vista, I cannot control the column order, and which columns are shown, and make it “stick.” And then there’s the open file dialog that never remembers that you want the date column in column 1. Is the Mac any better : don’t know : left the “cult of Mac” fifteen years ago.

A simple idea to control the priority-position of what order you see things in the alt-tab ui would be to have some graceful way to set a “weight” : for example, you right click on one of the icons in the alt-tab widget, and a slider pops up : you adjust the slider on a scale of 10 to 100, or whatever. Once you’ve set the weights, the icon-tabs with higher weights will always be first in left to righ reading order.

Maybe the idiot at MS who put an un-necessary slider in the View control drop-down menu of the standard Win Explorer window could be assigned to do this as penanace :)

best, Bill Woodruff


There’s a simple recasting of Asa’s suggestion that makes things a lot clearer. (There other issues that I’ll discuss after the simple description.)

Rule: Make the order of the list reflect the historical frequency of transition from the current app, not anything about immediate history.

Using Asa’s example, when Firefox is current, the most frequent transition is to TextMate so it is second. When TextMate is current the most frequent transition is to Firefox so that is second. When Tweetie is current, we don’t know, but given that Asa is usually in Firefox or Textmate, probably they are second and third, or at least near the front of the list.

Specifically the pair-wise back and forth is solved, for any number of disjoint pairs. For frequent transitions among more than two apps, at least the apps will cluster near the front of the list once you go to one of them, even if you don’t enter that cluster very often.

Furthermore if you have a habitual sequence between various apps, that sequence will be captured in the list you see from each one. So the system will “learn” your common work flow habits.

For any app, the sequence you see when you hit cmd-Tab is likely to be fairly stable, since it reflects historical frequency of transition from that app, not recent events. So for example someone briefly using your machine wouldn’t nuke your habits. However if a machine is shared between multiple people they probably need separate accounts / profiles.

The transition history should decay over time — maybe using the frecency algorithm from Firefox.

Note that the rule is very simple: Keep track of where you go when you leave an app, and order the list by the frequency of going there from that app.

Technically this implements a Markov net, with the transition probabilities derived from switching history — just as Asa suggested. But it is important to realize that is a very simple, comprehensible rule.

I think this addresses a lot of the comments — it solves Asa’s problem (as he conjectured), it leads to fairly stable lists, it is simple enough to be learnable (even without any explanation). We have seen with the various history driven completion algorithms that people are comfortable with this kind of learning.

I would guess that the list order being specific to the app would be very compatible with habits — habits are always context specific.

Issues that people brought up that aren’t addressed: windows (and browser tabs), and other ways of switching.

The switching history that determines list order should probably include all ways of switching to another app, not just tabbing to it.

I’d very much like some mechanism for switching between windows and tabs. However these are bigger collections — in my case, my browser tabs and sometimes my open mail are much bigger collections. Also because windows and tabs aren’t nearly as persistent as apps, and my habits of accessing them aren’t nearly as stable, the long term frequency wouldn’t work.

I can imagine some mechanism that would provide access to an even larger collection, such as my frequently accessed web addresses, recent mail, recently accessed files, etc. But obviously navigation is a huge problem. Note however that this is a problem I already have to solve, using multiple un-coordinated modes (Finder, Mail, browser (multiple sub-modes), etc. Surely there’s a way to do better at the system level…

Filtering by typing is interesting for these big collections. It only works when the name or properties of the thing you’re trying to find have some substring you know, but maybe we’d find we know “names” for the things we want to access. We know this sort of filtering works for large collections (e.g. browser history, Google queries). It is powerful because we exponentially narrow the search with every character we type, and we can get immediate feedback.

I’d like to experiment with window switching where I get to type the name and see a list of windows I can arrow through. Maybe there are task bars that do this but I don’t currently use them.



Yannick

Dude, drop your floating window metaphor and move to tiling windows… like xmonad for example. Like seriously, you guys will never learn, but the solution has been around for years. You could even make a tiling windowing system “user friendly” (as in: not only for power users, cause my tiling window linux is 10x as user friendly as OSX or win7… alt tab being one of the reasons).

Aza, if you really want to simplify and really want to push interfaces forward you already lost when you consider traditional floating window managers…


Wow thank you very much for this info it will come in handy.

Geeks in Minutes



Kelsey Higham

First off, I disagree somewhat that the thinking in alt-tabbing could be applied to Firefox; the problem domains are very different. In Firefox, your tabs are constantly visible, so there’s never a risk of switching to a tab you don’t expect. User reordering makes perfect sense when the tabs are visible, and it makes alternating between tabs very intuitive–you drag the tabs you want next to each other, and you alternate between the Next and Previous Tab keyboard shortcuts to alternate between two tabs. I’m not saying that Firefox’s tab system couldn’t be improved, but Firefox doesn’t HAVE the Alt-Tab problem.

That said, here’s the most elegant solution I could come up with without introducing too much complexity.

Right now, the order of apps or windows is MRU. When you first call up the switcher, the current app is on the left, and the second app from the left is selected, which means that you can simply release the keyboard shortcut to switch to it.

In my scheme, apps would be displayed in some fixed order. Launch order makes a lot of sense, but any fixed order is just as spatially beneficial. Alphabetical order could be neat in that the spatial order would be the same between app launches and sessions.

When you call up the switcher, the selected app wouldn’t be the second app from the left, or the app immediately to the right of the frontmost app; it would be the most recently used app. This would allow you to switch between two apps really easily.

This still seems conducive to the three-apps problem, but there’s a key distinction: it’s more spatially intuitive which app you’re selecting. You know where each app is, so when you do the Alt-Tab dance, you don’t need to look at the app icons or the window preview to know which app you’re going to; you can look at the positions of the apps, which is much faster. If you switch to the wrong app, you can tell while you’re still in the switcher, not right after you dismiss the switcher and the wrong app pops up.

This solution introduces more problems than it abolishes, though, and the current scheme used by OS X and Windows is better. I like Tijn’s solution. :)



Kelsey Higham

A completely different approach, which I kind of like, would be to steal the browser tab-switching system and make it fill the whole OS. All major OSes include some kind of persistent list of open applications or windows; OS X has the Dock, Windows has the Taskbar, Linux has that doohickey that looks like a Taskbar. If we made the switcher adopt the order used in the Dock or Taskbar, we could use Alt-Tab to move one app to the right, Shift-Alt-Tab to move one app to the left, and reorder the apps using drag-and-drop.

This would have the benefit of making it really easy to switch between any number of apps, not just two. But it would require two keyboard shortcuts to switch between two apps, which is kind of lame. Plus Shift-Alt-Tab and Shift-Command-Tab are weird to hit; something involving the arrow keys would be more intuitive, but less easy to hit with one hand.

The best solution I can think of, then, is to keep the MRU switcher in place, but to add a keyboard shortcut to switch to the app or window immediately to the left or the right of the currently selected app in the Dock or Taskbar. Something involving the arrow keys, preferably.


If you came up with an algorithm that was a really good guesser, that would of course be great, but I’m skeptical. It wouldn’t take too many incorrect guesses to have me looking for the option to disable that bit of intelligence.

I’m a heavy alt-tabber, and in general the MRU approach works fine for me (who remembers the order in which the apps were launched this morning?), but I do frequently fall into the trap you describe, which seems to be the only common scenario in which MRU is a problem, at least for me.

In this scenario, what’s the first thing a user does once the mistake is diagnosed? I’m guessing it’s hit the alt-tab again, to get to the application s/he wanted in the first place. I wonder whether you could mitigate the problem by keeping the mostly fine MRU ordering but registering a “usage” and updating the order of the applications only after the user either does something in the new application or until some short interval has elapsed. Whether there is such an interval that would be useful would need to be discovered with user testing, but I’m thinking it’s something like a second, maybe less.

In the example in the post, this approach would give the user a chance to see Tweetie, realize the mistake, and alt-tab once more to get to Firefox to restore the TextMate/Firefox rotation with no further monkeying.

Any appearance of inconsistent behavior caused by this approach could be addressed by having the application switcher fade gradually over the course of this interval (or until the user does something in the new app). So, to a user, if the app switcher is still visible, you haven’t completely left it even if you have let go of the tab key. Yes, you’d want to do it in such a way that it didn’t prevent the user from continuing his/her work, but that’s a solvable design problem.

This approach appeals to me because it doesn’t seem to add a lot of complexity to what is mostly an unconscious gesture. If you learn to alt-tab to begin with, this should come naturally because it doesn’t add any new keystrokes; it just changes the interaction a little to give you an extra moment before you’ve totally committed to what you’ve just done.



Philip

Worth a try! You need an undo action to get back the previous window. And why not a redo action.

Still, this may be less efficient (although more consistent) than MRU_n + OO: MRU for the first n windows, followed by order of opening. I believe this is what Vi$ta uses, but I remember being annoyed that it started iterating in order of opening after only the second window. I use MRU bwtween 4 windows effectively.



joku

I think it’s unlikely that you would be able to find a solution that’s intelligent enough to accommodate for all users.

Two different ideas:

1.: Have two shortcuts
One for normal MRU app switching (like Alt-Tab)
One for order-preserving app switching (e.g. Alt-leftarrow or something like that)

This way you could use the first one for you normal app switching between two apps and if you just wanted to check something in another app (like Tweetie or check your Mail) but plan to get back to your normal work-flow afterwards you would use the second short-cut with alt-left-arrow to switch to another app. When you’re finished with this app you use alt-left-arrow again and start at the left/top of the unchanged list again so you would still be able to switch back to the last used app. If you do with this shortcut you can then use the first shortcut alt-tab again and still have your old order.
Thus the second shortcut would switches without interfering with your workflow.
Question: What should happen if you use the second shortcut to switch to an app “out of your workflow” and then you use the first shortcut to get back? Should it change the order (and make e.g. Tweetie the last used app after the current one) or should it preserve the order and thus keep the order stable?

2.:
Combine it with virtual desktops. I use Spaces on Mac OS X to separate work related applications from non-work related. (I have some more categories, but this will suffice for the example)
I think the MRU order should be separate for each Space. But, as Mac OS X does it, I should be able to switch to an application in another “Space” using cmd-Tab. So the applications in other spaces would still be visible but they would be at the end of the list. Kind of like the habit groups. Order them by virtual desktop first and then order them by MRU.

Thus when I take notes for example and switch between my browser and a word processor constantly it works as expected. When I then switch to my twitter application the spaces would be switched as well. And my most recently used apps would now be the twitter app and a feed reader for example, which I check when taking a break. When I’m finished I switch back to the word processor and have my MRU order of word processor and browser back automatically. Switching back to the word processor from the twitter client in another space would take some more alt-tabs than in the default situation because they are in different groups and thus the word processor is further down in the stack/ back in the list but since I normally do not change back and forth between applications in different virtual desktops (because they are grouped by tasks and I don’t constantly switch between tasks. At least not as often as I switch applications), that isn’t a big problem.
This would use the knowledge the user has already given to the OS (what semantic groups of applications are there) and I think it’s still understandable so it should be possible to figure out how to change the situation to make switching between the twitter client and word processor faster if that’s desired.

Then there are the applications which aren’t restricted to one virtual desktop or at least have instance/windows open on several different ones. (first example: my IM-client isn’t restricted to one specific virtual desktop (I’ll use VD for “virtual desktop” from now on) and thus visible in all VDs.)(second example: I might have a browser window of work related stuff in the first virtual desktop (VD1) and another with interesting but non-work-related stuff in VD2.
I think if an application is not restricted to a VD it should just be sorted in the MRU list for the current VD. Attention: This means it could appear at different places in the list in different VDs. Consider the following switching between apps( / means I switched from the app on the left to the app on the right, // means a switch of VDs was caused by the switch of apps:
word-processor / IM-client / word-processor / browser // twitter-client / feed-reader / IM-client / feed-reader // word-processor
The order of the applications would then be:
word-processor, browser, IM-client, feed-reader, twitter-client

When I then switch to the feed-reader (which switches the VD) the order would be:
feed-reader, IM-client, twitter-client, word-processor, browser

For applications with several instances/windows spread out over several VDs I’m not sure yet. I guess they should only appear once in the front-most VD-group and be left out in the other VD-groups they appear in.
Note they I’m modifying the application switching-concept as found in Mac OS X (as done in the article as well).
You could do the same for instance/window switching but then I would group the individual instances in their according VD-groups.


In this post Aza is looking for a better way to do most-recently-used (MRU) window switching. He says the way it currently works can be confusing.

I don’t disagree. But I think there are more important problems with Alt-Tab. For example, the increased use of tabbed windows has made the shortcut much less useful than it used to be. And I find it frustrating that the master shortcut key (Alt/Cmd-Tab) uses MRU order, but the supporting ones (Ctrl-Tab and Cmd-~) don’t.

I’ve written a blog post describing these problems in more detail, and proposing how to solve them:
http://blog.isotoma.com/2010/05/solving-the-real-alt-tab-problem/



BiatshibiaHax

Just want to say what a great blog you got here!
I’ve been around for quite a lot of time, but finally decided to show my appreciation of your work!

Thumbs up, and keep it going!

Cheers
Christian, iwspo.net


Good problem-picking! With the adoption of tab-based interfaces across many applications, it is in dire need of good interaction design to get the screen that you want.

Btw, here are some wild ideas that I was thinking of as I was reading your article:
* A gaze based approach – I generally think of gaze interface work as somewhat unintuitive as there is no explicit action in the world from the user that causes the system to react. But a large number of users use multiple monitors with huge screens. Based on the gaze of the user, the system could move up the applications in that window up the hierarchy, ensuring that those windows are hit first. (As an aside, certain interface elements need to be replicated when on a multiple monitor usage. For eg., the cmd-tab bar itself. Design for multiple monitors need much improvement)
* An update based approach – The probability of navigating to an application increases when there is an event that has occurred that needs user attention. This could be anything from a new IM message to a modal window. On such events, the priority of those windows could be increased significantly if it is learnt that the user usually heeds to those updates.
* Grouping applications – Textmate, Console, Browser, Sequel Pro… if the user is cycling within a group of applications constantly, a model can be developed to push these apps together. When another application comes to the foreground, its own group gets proiritized higher..


This idea of yours is what I’ve been dreaming about for all my life. Sure, it needs some testing… And there’s a big chance users won’t be able to figure out the algorhythm… Now at least they know what to do to ‘teach’ the system how to switch between the two windows and know where the switcher will go if they press alt+tab several times to reach some 5th window.

P.S. You should link this to your ‘You Can’t Multitask’ post.



Andrew

I don’t know if this has been suggested before, but what if you can group your applications. That way, you can alt+tab between applications that you use together. Then, if you want to use another set of programs, just select the other group and the alt+tab scheme shifts to that group. Also, it would hide apps that aren’t part of that group, making it easier to shift around apps. (Of course, there would be a universal group where all of the apps. can be found)

Hmmm… this also makes me think if there can be a shortcut that would open all of your desired apps. at once. Oh well, just sharing ideas.


Thanks for the info, Keep up the good work


The problem is that it only switches to left or right tab of the one you are working in (CTRL+SHIFT+Tab = Left & CTRL+Tab = Right). Widget



Laserbeam

I didn’t read all the posts, so this might have been discussed already, but Linux solved my alt tab problem LONG AGO… the multiple workspace solution rocks… i mean i keep like 16 workspaces in a 4 by 4 grid… and keep at most 3 applications on each… and habit makes you generally keep certain applications on certain workspaces… so for example the browser is in workspace (1,1) (row, column), music player in (1,3), messengers and such in (1,2), stuff i work on in (2,1) and (2,2) (i rarely work on more)… and I didn’t spend time to sort my apps like this… they just felt natural / organized themselves… + the workspace switcher shows previews of the apps when i change workspaces.

Alt tab really fails compared to this… to bad windows doesn’t implement this concept.


This is a great discussion though I am a bit late.

With MRU, a minor correction will let me bring the group of windows into the preferred state. But breaking a habit is harder, by design.

Often times I will ALT-TAB between FF+EDITOR and then start using FF+DEBUGGER. This keeps my work flow highly focused and controllable. HRMRU would actually get in the way.

Windows 7 uses WIN+N combination to directly jump to an application in position N in the task bar. I like the Spaces feature on Macs as well.

A (partial) touch screen overlay would be cooler still for laptops since the Windows Taskbar is very close to the Function keys on the keyboard and I can easily click on an icons in the taskbar with my fingers.

I haven’t given it much though but it might be the problem also lies in the fact that ALT-TAB icons are linearly ordered. Maybe a tree structure or some other hierarchy could improve the visual representation and consequently the predictability of the underlying behaviour (and in turn compensate for complicating the behaviour).



Amnon Sadeh

First of all, great post – it phrases a frustration I hold, and was never able to point out.
Recently I began using a dual-monitor setup, and the frustration just grew bigger:
With a single monitor there’s a visual queue to the fact that alt-tab was performed: the other window comes forth. It’s so obvious, that I can even look off-screen and still my eyes will pick up the change.
But with two monitors, two windows are allowed to be on top – one in each screen. If you’re switching between them, then the visual queue – the title of the active window has a different color – is negligible.
Since I group related windows on each screen, the suggested solution is exactly what I’d expect the OS to do.
Again, great job on both analyzing the problem and finding how to solve it.

Again, great


Why on earth are people trying to fix a solution which is broken fundamentally. Time to use expose and move on with your life. – As that is the true fix.


Thanks for this great idea!
There is one thing that bothers me even more than the problem you describe above (even though you are right it is very annoying): I dont want to have to think about whether the window I want to go to is a program or a window (or tab) in a program. I started using http://manytricks.com/witch/ to solve this which is great. But it has other issues (performance mainly).
How could this be solved?



david

I know this is not what you probably wanted but as I read your article the thought about toggling between two or three tabs made me think of having it so if you hit alt + 2 or 3 or 4 on your keypad that would cycle you through the last 2 or 3 or 4 tabs. Holding alt and hitting 3 repeatedly would cycle through the last 3 for example. Or maybe even holding alt and hitting 1,3,4,7 would let the computer know you wanted to cylce through the tab your on (1) along with the third, fourth and seventh tab. Just a thought, might be more trouble than just clicking.

David


Hi,

I agree that it was a pain to use the Alt-Tab but eventually I now get it to do what I want it to do.

I currently use Win 7 and think the same applies to Win XP, The problem of selecting Alt-Tab then changing your mind once you have proceeded with the tab option can be overcome by transferring from Alt-Tab To Alt-Esc but you must not leave go of the Alt key.

Give it a whirl and I think you may change your mind and start using Alt-Tab.

Cheers,

John_Betong


I dig it. Now I need a problem for my habits. I have been experienced with Alt+Tab a lot longer than with tabs in browsers. So when I am in a browser page and I want to move to a different tab, guess what I type out of habit? I am *still* doing that (old dog, etc.), although I more quickly return to the browser and use the tabs instead.

This happens with any product I use that has something like tabs (or the disguised tabs of multiple documents open in Microsoft Office Word or Excel at the same time).


Leave a Comment