dlo.me

Replacing Tracking Speed

My iMac has started resetting my mouse's tracking speed upon every restart. While somewhat frustrating, it's pretty easy to open up System Preferences -> Mouse, and update the tracking speed to one notch below "Fast" and get on with my work.

/images/mouse.png

While it's gotten a little old, it also got me to thinking: why does Apple measure mouse movement in terms of "Tracking speed"? And what is tracking speed, anyways?

After doing a "fair bit" of research (read: jumping to the mouse speed section on Wikipedia), I encountered an interestingly named measurement called "Mickeys per second" (tee hee). It makes some sense: according to Wikipedia, it measures "the ratio between how many pixels the cursor moves on the screen and how far the mouse moves on the mouse pad."

While, at some point in the past, this might have been a completely sensible measurement, we've moved somewhat beyond pixels. Pixels used to be visible to the naked eye, but with today's 4K and 5K displays, that's no longer true. What also struck me was that, unless Mickeys per second could change with each display, setups with multiple displays would need a variable number of Mickeys per second to render a constant speed mouse pointer (at least in physical space). Obviously, behind the scenes, modern operating systems are flexible and take account of this, but this dynamic behavior is hidden from the end user.

Let's go back to the beginning. Here I am, updating my tracking speed a couple times a week. When I do something more than once, my instinct is to find a way to stop doing it. Ultimately, I came to the conclusion that we (or really, Apple or Microsoft) are thinking about this in the wrong way.

Think about it. Mouse velocity comes down to three things:

  1. The "reach" of the user's hand (i.e., the maximum distance the center of the mouse sensor can be moved by the user from one side to the other).
  2. The size of the screen.
  3. The "intent" distance (i.e., the smallest intentional movement a user can make)

Without taking into user comfort level, the absolute minimum for this hypothetical measurement should be one screen per reach. No matter how good you are with computers, it's a bad experience if you need to lift up your mouse several times to position the cursor in the right place. At maximum, it again needs to be user-specific. If mouse control is erratic or difficult for the user, the intent value should be larger than for someone with good hand dexterity.

Since we don't want to move the mouse at all until the mouse has moved at least the intent distance, and we don't want to move it less than the screen size, we can determine an upper bound and lower bound for mouse velocity. Furthermore, extracting these values doesn't entail asking the user to drag a marker on a screen for some arbitrary indicator.

It would be relatively easy to determine these values automatically based on a simple tool: just ask the user to move the mouse from side-to-side, and then display a grid to the user, prompting them to click between two points as close to each other as possible. Since screen size is already known by the OS, it would just be a simple matter of crunching the numbers to an internal value.

There's probably lots of bigger fish to fry on Apple's Mac OS X team, but I think it'd be a huge improvement to the user experience and would make this setting a lot less opaque to end users.