Wednesday, February 22, 2012

Usability and Answering a Computer’s Questions

One of my favorite things to do is observe how people use software. This is partly self-interest since user interface development is a part of my job and watching people use software makes my job easier.

One of the biggest difficulties can be summarized thusly: Most people do not expect software to ask them questions.

One case illustrates the point. A friend of the family, a doctor, needed her OS reinstalled. During the installation process she had to leave before providing a logon password. I chose the simplest password I could think of (“password”) and set the windows password hint to “your password is password”.

A few days later I received a call wherein she indicated that she was unable to logon to her computer. She had even clicked on the “click here for your password hint” link which displayed the hint “your password is password”. This doctor was somewhat more computer savvy than most – she conducted business remotely over her PC and had been using software for years.

As soon as she re-read the password hint to me over the phone (by then I’d forgotten about it) she immediately said, “Oh! Silly me…” and proceeded to logon using “password” as her password.

This problem spans nearly every level of computing expertise. I’ve seen it in first time users, teenagers, adults, programmers, attorneys, doctors and, on at least one occasion, computer science professors.

It’s difficult because it is nearly impossible to write software that does much of anything without, at some point, needing to ask the user a question.

Developers have tried to approach this problem in a variety of ways. With a text based user interface there’s the prompt that must be answered to proceed. But often user’s aren’t expecting to be prompted. So they start the program, wait a few seconds, then switch to something else. They’re usually quite annoyed to discover, possibly hours or days later, that the program hasn’t done anything because it is waiting on the user to answer a question.

With graphical user interfaces there are several attempts to address the issue. There’s the famous popup (formerly known as a modal dialog box). Users find popups annoying and they suffer from the same problem as text based prompts.

There’s the “flashing taskbar icon” wherein Windows tries to alert users that a program needs their attention. The major benefit of this approach is that it doesn’t interrupt the user thereby reducing user frustration. The downside to this approach is that users will often fail to see the flashing icon.

There are other more exotic approaches: use of audio, video, biometric interfaces, etc… As sensors become cheaper and more ubiquitous these approaches will probably gain traction as they provide a way for software to get answers to its questions without asking users.

In a sense this problem arises from the general purpose nature of the personal computer. Most tools that people use are capable of only a limited number of uses. It’s rare for a tool to have to ask you a question before it can be used (imagine a hammer asking you “how hard do you want to hit this nail?”). Tools that require answers to more than one question are rarer still. Software turns this on its head as it’s rare to find a software program that needs you to answer at most 1 questions for it to be usable.

Until computers can read minds, something us humans have yet to perfect, I think this problem will only be solved by incorporating basic computer literacy into the education that everyone receives. Basic computer literacy must include creating the expectation that computers will ask users questions.

Tuesday, December 13, 2011

Motorola’s Droid RAZR vs. Samsung’s Infuse 4G

I’ve had Motorola’s Droid RAZR for a few weeks now so feel comfortable commenting on the advantages and disadvantages relative to my previous phone (the Samsung Infuse 4G and Samsung Captivate).

Advantages

  1. Better Bluetooth stack. I believe it supports Bluetooth 4.0. Voice dialing works with my car stereo (JVC KD-A925BT) which wasn’t the case with the Infuse.
  2. Speed. The phone doesn’t get sluggish when I have a few apps open. 1GB of RAM and a dual core processor make the user experience much snappier.
  3. Podcasts. The native music app integrates podcast.com which seems to have a more recent (and larger) database of podcasts to choose from.
  4. Social Networking. The Droid RAZR supports more sites out-of-the-box: Facebook, Twitter, LinkedIn, Skype and YouTube.
  5. Verizon’s Network. This isn’t exactly exclusive to the RAZR but Verizon’s 4g network, at least at the time of this writing, runs circles around AT&T’s network. I’ve run numerous network speed tests in Seattle and Atlanta (the 2 cities I frequent) and get the same results every time. Verizon’s network is 3 to 5 times faster than AT&T’s network (4G LTE vs HSPA+). To stress how big the gap is, Verizon’s upload speeds are consistently faster than AT&T’s download speeds.

Disadvantages

  1. Camera quality. Indoor close up shots are much sharper on the Infuse than the RAZR. I truly miss the camera on the Samsung Infuse.
  2. Software Keyboard. I make a lot more mistakes on the RAZR than on the Infuse. It’s almost as if the keyboard is optimized for 1-handed typing; the left half of the keyboard is too far to the right. I’m already on my 2nd keyboard (SwiftKey X) but still seem to have this problem.
  3. Backup Assistant. I’d like to make sure I don’t lose my contacts if I switch to a different brand of phone (especially considering how fast the android ecosystem is evolving!) so have no desire to use Backup Assistant but can’t get rid of it. This wasn’t a problem with the Infuse.
  4. MotoBlur. They’ve done some things well (exchange email support, yahoo push support) but in general MotoBlur is more intrusive than Samsung’s TouchWiz.
  5. Notifications screen. This is the pull-down screen that displays notifications. Samsung phones include a set of controls that let you toggle Wireless, GPS, Bluetooth, etc... at the top of the notifications screen. The RAZR has no corresponding functionality.
  6. No text message preview. If there is only 1 text message the RAZR displays the sender; if there are more than 1 messages then the RAZR displays the number of unread messages. I prefer Samsung’s approach which displays the sender and the first part of each message as a separate notification.

Wednesday, October 19, 2011

Optimistic Concurrency

I’d seen this term crop up from time to time over the past few years but didn’t know what it meant. Thanks to Wikipedia this cipher has been decoded.

The optimism in optimistic concurrency refers to the attitude towards locks. An optimistic attitude assumes that locks aren’t necessary. This is considered optimistic because it assumes that transactions typically won’t step on each other. For some situations this is true; overlapping transactions are so rare that it’s more efficient to back-off and try again on the rare occasions they occur. Since locks are relatively expensive and rare, avoiding them lets the system handle more transactions overall (in this case).

On the other hand, if overlapping transactions are common then the cost of backing off and re-trying may exceed the cost of acquiring a lock for each transaction. Of course this partly depends on the granularity of the lock. The goal of finer grained locks is to reduce contention and, ultimately, to improve throughput.

The other aspect of optimistic concurrency is the way overlaps are handled. They’re detected, usually via some “modified-last” type token. If the underlying data has been changed since the writer last read it then the transaction fails and is reattempted.

Tuesday, September 6, 2011

Learning about Windows Azure

To prepare for a new role I’m transitioning into at Microsoft (SDE II – finally!) I’m ramping up on Windows Azure.

For one it sounds a lot like the “distributed operating system” that was alluded to in grad school. Analogies abound. So, for instance, the relationship between Windows (or any other OS) running on a single machine is similar to the relationship between Windows Azure running on lots of machines (more specifically, virtual machines).

Windows provides a program with access to the resources of a machine; CPU, storage, memory, network, etc…

Windows Azure provides a program with access to the resources of a cluster of machines: compute, storage, etc…

The analogy falls apart if extended too far because on Windows traditional applications are single instance. That is, a user launches an executable and uses that single instance of the running process to accomplish whatever functionality the program provides.

Windows Azure, on the other hand, seems to imply an organization of work more similar to the way the Web works. To access a program on the web you enter its URL (analogous to clicking on the executable). If it’s a popular program (e.g., amazon, hotmail, etc…) then there’s a good chance that a single request can be serviced by 1 of several load balanced servers. And the next request (say, clicking on a link to your account data) might well be serviced by a different web server.

In Windows Azure parlance this maps to Roles executing in Instances. Any 1 of several Instances may provide the program’s functionality.

There’s more to it of course but the same issues that you run into moving from a traditional client program (single instance, built in semi-persistent/stateful) to a web application (multiple instances, no built in persistence/stateless) apply.

Tuesday, August 2, 2011

Looking up a User SID

There are a several ways to do this but so far my favorite is (from a command prompt):

wmic
useraccount where name=”XXX” get caption, domain, sid


Replace XXX with the user name (without the leading “<domain>\).
You’ll need the wmic tool installed if it isn’t already on the system.

Automatically connecting to a Bluetooth a2dp receiver from the Samsung Infuse 4G

I bought a Sony Bluetooth transceiver for use primarily in my car. Unfortunately I’ve had to manually connect to it every time I enable Bluetooth on my phone (Samsung Infuse).

Fortunately this can be configured with a little tweaking:

  1. Root your phone.
  2. Install ES File Explorer or some other Root Exploring app that lets you mount partitions in read-write mode.
  3. edit /etc/bluetooth/audio.conf. Uncomment AutoConnect=true (remove the leading #).
  4. reboot.

Thanks to the person that responded to the android bug with the solution!

Thursday, July 7, 2011

Command Prompt Tip–Autocomplete similar command

Console Windows have had TAB key completion for a while now. That is, pressing the TAB key at the command prompt will insert the closest matching filename.

While this is helpful for specifying file name parameters sometimes what you’d really rather do is insert an entire command. You can go through commands recently entered with the up and down arrows.

I recently discovered another way to insert an entire command. If you type the first few letters of the command then press F8 the closest matching command in the command history will be inserted! This is a great way to cut down on the amount of typing involved, especially when it comes to long commands with lots of parameters.