Thursday, March 31, 2011

Should you buy a used VW Passat?

A flowchart to help you decide. (Click to enlarge)

Thursday, March 17, 2011

Google Chrome's incredible upgrade icon

Over the past year I've been using the Google Chrome browser quite a bit. It has a clean, minimal UI, it's very fast and very stable. It also has one incredible feature. Can you spot it in the picture below?

It's the little icon in the upper right hand corner:
That up-arrow on the wrench means "You've had your browser open for a while, and in the meantime Google has released a software update." Clicking on the icon installs the update and restarts your browser.

Take a moment to let that sink in. Google added this feature because they are now releasing browser software updates more frequently than many users restart their browser.

Back in the day when I was a developer on the Lotus Notes client team at Iris Associates Lotus IBM, (1993-97) an individual developer would do incremental builds on their workstation several times a day. If workgroups did integration builds, they were done as needed, probably weekly. Beta builds would be completed every month or so. Point releases would ship every few months. Several years would pass between major releases. I think this release schedule was typical of many software companies at the time.

It would have been inconceivable to add a feature like the Chrome upgrade icon to Lotus Notes. (We did have other ways to encourage customers to restart the client, but that's a topic for another day...)

It's a testament to Google's staff and processes that they can deliver updates so frequently while maintaining a stable, high quality product. They are likely are using a combination of continuous integration and comprehensive automated testing to achieve these results. No matter how they are doing it, it's very impressive!

Wednesday, November 24, 2010

Lines and lies at Trader Joe's

The checkout lines at Trader Joe's in Manhattan are based on a lie.

Background: Trader Joe's supermarkets in Manhattan use a two-line system for checking out purchases. The checkout lines are often very long, wrapping around the store at busy times. An employee waits at the end of each line to manage new arrivals and sort each into the proper line. Those with many items go into one line, those with few go into the other. The employees often refer to the "few items" line as the "express line". This is not true.

Both lines are served by a common pool of 25 cashiers. At the front of both lines is a single employee who acts as the controller. The controller watches for cashiers to signal that they are available by waving a red flag, then he directs each customer to the next available cashier. In doing so he strictly alternates between the two lines, selecting a customer from each line in turn.

There is no "express line". The amount of time you will wait in a line is related to the depth of both lines. Let's say when you enter a line, your line is n deep and the other line is p deep. You will wait for n + MIN(n, p) customers to be served before it is your turn.

If Trader Joes switched to a single line they would save the expense of the line staffers. Why maintain two lines, then? I can think of a few possibilities:

  • Excessively long lines discourage customers from checking out. Two lines are physically shorter than one, even if wait time is the same.
  • Meeting customer expectations. Customers are used to "express lines for 10 or fewer items" at other supermarkets where each line is served by a dedicated cashier. Trader Joe's meets customer expectations by creating an "express line" in name only.
  • If the number of "few-item" purchasers is consistently lower than the number of "many-item" purchasers, the express line really does offer customers a shorter wait time. I haven't noticed this to be the case.
  • Line staffers communicate with customers and solve problems increasing sales and allowing the cashiers to work more efficiently.
Next time I go to Trader Joe's, I'm going to ignore the line staff and head straight for the shallowest line.