Friday, October 11, 2013

Remember Me

I have another usability bone to pick with my local gas station. You see, even after years of bi-weekly fill-ups, my gas station still fails to remember my preferences:
  • No I don't want your overpriced and ineffective car wash
  • No I don't want a receipt
  • No I don't want to change fuel grades
  • No I don't want to pay with a debit card
As a quick aside, this post isn't about the shortcomings of your typical gas station pump's tactile user interface - that merits its own post. This post is about the user experience from the time you swipe your card to the time you can start pumping gas, which goes something like this:

Step 1) Swipe or insert your card. Time elapsed between swipe and transition to next screen: 3-5 seconds, assuming you didn't insert your card the wrong way, or remove it too slowly or quickly.

Step 2) Is this a debit card? Time elapsed between selection and transition to the next screen: 2-4 seconds, assuming you chose credit, longer if you choose debit and have to enter your pin.

Debit or Credit Sir?

Step 3) What's your zip code? Time elapsed between keying in my zip code and transition to the next screen: 4-6 seconds.

Step 4) Do you want a car wash today, even though it's raining? Time elapsed between pressing no and transition to the next screen: 2-4 seconds.

Your Car is Filthy

Step 5) Choose your grade and begin fueling. Time elapsed between pressing the fuel grade button and starting to pump fuel: 4-8 seconds. I think this last step takes the longest because it waits to the last second to authorize the transaction. Wouldn't be a better use of time to authorize the card in the background earlier in the transaction, so that once I've answered all the questions I can being pumping without further delay?

The overall elapsed time between the initial swipe and when I can start pumping gas: ~30 seconds.

Only 30 seconds? You're whining over 30 seconds? 

Heck yeah! 
  • 30 seconds X 2 fill-ups on average a month = 1 minute
  • 1 minute X 12 months a year = 12 minutes a year
  • Ever 5 years x 12 minutes a year = 1 hour
  • After 20 years of driving = 4 HOURS wasted!
It adds up doesn't it? To be honest it's not so much about the wasted time (for me); but rather about the careless disregard for my time, energy, and cycles. By cycles I mean the mental cycles I am forced to dedicate to this task to the exclusion of everything else around me, such as checking my email ;). It also bugs me because it seems that the user experience was a mere afterthought in the design of these systems, and that the designers were more concerned with hounding me over a car wash and saving a few pennies (by charging my debit rather than my credit card), than in making my fill-up experience a pleasant, or at least transparent one.

A proposed solution

I propose that gas stations default to:
  • Use as credit (since you can run a credit card as a debit card)
  • no car wash 
  • no receipt 
To use a card as a debit card the user could optionally press a debit button prior to swiping their card. While pumping gas (which takes substantially more than 30 seconds), the the user could add a car wash to their purchase, which would get added to the total once the user is done pumping gas. Likewise the option to print the receipt could be presented during or post fill-up, as is already done at some stations (with a default timeout set to "no receipt" if the user fails to select an option).

What this solution fails to address is the default desired octane rating, and the pseudo-second factor authorization as a result of prompting the user to enter their zip code; however those issues can be addressed by the next phase in the solution:

The second phase is to identify users as repeat customers, which can also help towards establishing a set of defaults and towards minimizing the extra-authorization parameters (zip code). Identifying the customer is useful for cases where the user's preferences conflict with the default station preferences, such as always wanting a car wash, or wanting a printed receipt, or choosing a different octane rating.

So how do we uniquely identify the user without running afoul of privacy guidelines or PCI DSS mandates? When the user swipes the card the following would happen:
  1. The card reader reads and records the user's name (ANSI X4.16 track 1) stored on the card
  2. The reader then reads the first 5 and last 4 digits of the credit card number (allowed by PCI)
  3. The reader then creates a non-reversible hash of the name using the 9 digits as the salt
  4. The reader then compares the resulting hash to a data store, either stored locally on the reader (which would make it pump specific) or available to all readers at that gas station (assuming they can be networked, making it gas station specific), or retrieved from a centralized database (more complex but specific to all stations for that particular brand).
  5. If the computed hash matches a stored hash then the last set of recorded preferences mapped to that hash are retrieved and applied to that transaction.
  6. If there is no match then the user is asked to enter their zip code and the usual set of questions (or use the defaults mentioned earlier). 
  7. The answers to those questions are then stored for future retrieval, mapped to the salted hash that was computed in step 3.
  8. On the next visit, the computed hash will match the stored hash, and the user's preferences retrieved.
This would give repeat customers the ability begin fueling right away using their stored preferences while giving them the option to override their preferences or the defaults should they wish to do so.

Remember Me logic
There are plenty of hurdles that would need to be overcome, such as:
  • Make sure a proper method is used for salting and iterating the hash
  • Figure out how to let users save a preference override vs. apply just this once
  • Provide a way to opt out of preference storage or remove their preference once stored
  • Determine when to delete a set of of unused preferences
  • Determine when to acknowledge the user by name (privacy issue?) in the screen readout once a match is made with a stored hash
  • And so on...

Improving the user experience is never easy, especially when you consider the marginal return on investment for addressing what amounts to a minor inconvenience; however multiple minor inconveniences quickly add up to major ones with either immediate or long term negative effects. As human beings our pursuit for perfection should be relentless, never satisfied with the status quo. Who knows? Assuming we're still using fossil fuels a decade or so from now, wouldn't it be great if you could just drive over a pump with your car and the machinery underneath would take care of authentication, preference retrieval, pumping, clean-up, etc. without your ever having to exit your vehicle? Yeah, I know that's not really thinking big; but you have to start somewhere.

1 comment: