How often does it happen that you get a shiny new device home, plug it into your computer to set it up, and then the problems start? You need to upgrade to Music Player 4.3, you need to enter a 28 digit registration code, the device is not recognized, Music Player 4.3 is no longer available, … fail, fail, FAIL. So… you need to mount the device as a disk, reformat, drag an updated firmware image onto the device disk, reboot the device, reboot again…
You are led to expect by the software and manuals which come with your device that you will be able to do what you want, but you end up in a situation where it is either impossible to do that, or it is only possible with very detailed knowledge of the device and its accompanying software. I’m trying to think of a name for this kind of problem and the best I can come up with is “packaging failure”.
Last week a friend and I did an iPhone switcheroo. She had her old phone stolen but didn’t want to get the new more expensive iPhone plan with a new iPhone, and preferred the iPhone v.1 look as well. I was happy to get the new iPhone. So she bought the new phone and then we switched. Everything went smoothly at the AT&T store. I synchronized my new phone with iTunes without a problem. But when it came to synchronize her new phone (my old one) with her iTunes, we turned up a problem: iTunes was complaining that there was a security lock on the old phone and that it should be removed before synchronizing. It made sense – I always put a 4 digit combination lock on my phone in case it gets lost – but the problem was that the phone now only offered the option of emergency phone call and there was no option to enter the security code. So, I plugged the phone into my Mac and reinstalled the firmware, and that wiped the lock. It worked and we synchronized her phone after that without any problem.
How often does this kind of thing happen? ALL THE TIME. My next question is:
WHY?
These devices are very complex. This complexity is hidden underneath a software and/or documentation layer which lets you easily achieve what you want to do. As long as you remain in a situation which is covered by the the software and/or documentation, you are OK. But if you need to perform some task which was not anticipated by that software, or if you somehow end up in a situation not handled by the software, then you have to start dealing with the device at a much lower level, a lower level which requires a lot of expertise to understand.
So one cause of these kinds of packaging failures is failure of the designers to anticipate and provide for all the ways in which the device might be used.
Another kind of failure is failure of the designers to protect against errors which can occur. For example, you are following the setup process and get error -53 and the setup wizard quits and won’t restart, and the device won’t wake up.
Typically, the GUI and the instructions guide the user through a sequence of intermediate states towards successful completion of the task at hand. When I was working at NASA Ames, there was a group there which had designed a software system called CLARISSA to help astronauts by verbally guiding the astronauts through their procedures in space. An important part of the work of writing such procedures is verifying that they achieve the task and handle all contingencies.
Astronauts’ procedures, and packaging software and documentation, are effectively based on finite state machines. The arcs of the machines are labeled with steps in the procedures, or actions in the software interface. Packaging failures are events which lead from a state in the finite state machine to an unanticipated state which is not part of the machine.
In order to handle these problems, the finite state machines need to be extended: the instructions finite state machine could be extended, e.g. “if the device displays an error message, unplug it, hold down the power button for 10 seconds, then plug it back in to restart the installation”, or the software finite state machine could be extended to handle this error condition.