embedded software boot camp

Wrong Number

June 28th, 2008 by admin

So some guy answered and I realized I had dialed the wrong number. I apologized and hung up. Unfortunately I was left with a dilemma. Was the number on the piece of paper in my hand the incorrect number, or had I accidentally mis-dialed one of the digits. The call was over and I had no way of knowing what number I had actually dialed, so I could not check the piece of paper against the number I dialed. If I dialed the number on the paper again then I might end up talking to the same guy, which would be embarrassing, and it is a bit rude to disturb the same stranger twice.

If I had been using a phone with a call-log, the screen might show me the last dialed number and I could check, but most simple land-line phones lack such a feature.

Bear this dilemma in mind when designing screens that tell the user that they have done something wrong. If you are telling someone ‘Invalid ZIP code’ or ‘Too many digits in account number’, make sure that the data that your interface is complaining about is still visible. Too often, especially on the small UI available to many embedded systems, the error message hides the data that the user just input, leaving the user wondering what exactly they did enter. The user may know what they intended to enter, but after the fact, they may be unsure. This often leads to the user entering exactly the same data a second time, because they assumed that they made some kind of a slip the first time.

Once you reach the point where you tell the user that they input the wrong data, it is often nicer to have the option of correcting the previously entered data rather than starting over. If I got the ZIP code wrong, I may just want to fix one digit, rather than starting all over. For a string as short as a ZIP code, starting over is a minor inconvenience. As the data they enter gets larger the price of restarting the data entry gets higher. So try to find a way to save the user’s work so they can reuse the majority of it.

Handing user errors is a challenging area. Read more about it in an old article of mine in Embedded Systems Programming magazine called To Err is Human

How many jobs can one button have

April 5th, 2008 by admin

Sometimes it makes a lot of sense for a button to do more than one thing. An on/off button turns a device on if it is off, and turns it off if it is on. Obviously there is no need to have both possibilities available at the same time. The on/off button is a toggle button. A ‘select screen’ button could allow the user to iterate through each available screen, so each press of the button brings the user to a different screen on a GUI. When the last screen is reached, pressing the button again brings you back to the first screen.

An idempotent operation is one which has the property that if the operation is repeated then the result is the same. Pressing the number 1 button on my car radio is idempotent. Pressing it once brings me to channel 1. Pressing it again will bring me to channel 1 again, which changes nothing ( we will ignore the fact that some radios might change to channel 11). So idempotence is almost the opposite property to that of a multifunction button.

So when do multifunction buttons get us into trouble. Let’s look at a few specific examples. Many slide projectors have bulbs that take several seconds to warm up. If you turn the projector on, and then look at the screen, you may wonder if the device has turned on – maybe you did not press the on/off key hard enough. A natural reaction is to press the button again. If the on/off key is a toggle (i.e. a multifunction button), you have now turned off the projector, and will possibly start to think that the device is not working.

If this projector had a separate on and off key, then the on key would be idempotent and pressing it a second time would have no effect.

The stereo in my bedroom has a ‘function’ key which changes mode from FM tuner to CD player to tape deck and to Auxiliary input. Each time the button is pressed the small dark LCD displays the name of the current function. Unless you remember the order of the functions, you will not know what function you are about to get when you press this button. That is not a big deal, since you can press the button until you arrive at the function that you want. If the user presses the button once too often, and they go past the desired function then they have to go all the way around again. This is annoying, but is not the crux of the problem that we want to address here.

Consider the case where you can not see the LCD – it might be at a bad viewing angle from your armchair, or you may be listening to music in the dark. Now there is no reliable way of selecting the function. You could press the button and then listen, and hearing a talk-show host would obviously mean that you were at the FM tuner function, but that is not very satisfactory. Had the designers placed one button per function on the remote control then each of those buttons would have been idempotent and the user would have had a quicker, more reliable interface.

My cordless phone has a toggle button which allows it to go on-hook or off-hook. Such a simple toggle should cause little confusion, but it does. When I pick the phone up I often think “well I have picked the phone up, so I just have to talk, since that is how I answer a corded phone”. On this phone the call has not been answered by lifting it from its cradle – the on-hook/off-hook state is controlled only from the toggle button. Since this differs from the majority of old-fashioned corded phones, I pause to remember that I have to press the button. During that pause I think to myself “if the phone is off-hook now, then pressing the button will hang up, and I lose the call, and probably cause marital strife”. So I wait for the phone to give another ring before I am sure that it is on-hook before pressing the button. A good interface should not leave me so hesitant to press a button. Two separate idempotent on-hook and off-hook buttons would resolve this – many phone code these keys as red and green. With a dedicated off-hook button, I could press it, and if I was already off hook then no harm would occur.

Multi-function and toggle buttons do save space, but be aware of the drawbacks, and sometimes the right call is to use several buttons instead.

Kiss: Keep It Simple Stupid

March 1st, 2008 by admin

In one of my articles, available at http://www.embedded.com/story/OEG20011220S0060 I discussed how engineers like to present lots of data on the user interface, so that they user can derive further information for themselves. This is a slant that people of less technical professions might not appreciate. Typical users do not want to be blinded by lots of data, no matter how well presented. They want the data to be pared down to the minimum amount that they need to make their next decision

Always presenting lots of details does not suit all users and I came across an example of this recently. The system being analyzed was an ambulance tracking system that stored the locations of a number of ambulances which transmitted their positions to a central server. Third party mapping applications make it straightforward to display the position of all of the vehicles on a map which is displayed via a browser. This is obviously a far better way of presenting location information than simply providing longitude and latitude. Of course this looks fairly cool too. But a little further investigation showed that the better solution for many users was far simpler. At the hospital, they are only concerned with when the next patient is arriving, so they can ensure the people and resources are ready to treat him or her. So the only bit of information they want is the number of minutes before arrival. Again third party mapping applications can provide this data based on the current position. The challenge of the user interface, from the developers and from the users point of view has been greatly reduced, since now they have a simple number of minutes to display instead of integrating a mapping system into the application. The lesson here is always listen to the customer’s needs carefully to ensure that you chase the simplest solution, rather than getting lured into making things that look flashy but may make it harder to interpret the really useful information, which in this case was time to arrival.

Very often you end up implementing the flashy stuff as well, because that is needed for the sales demo that gets you in the door. But that is very different from what is useful to the end user.

Making fun of Usability Specialists

February 24th, 2008 by admin

I recently encountered http://www.usabilitymustdie.com/ which is a site that satires some of the feedback that might come from dilbert-esque usability specialists. While most of it is over-the-top and can not be taken too seriously, it is a good thing that there is someone who who will call into question the value of, sometimes expensive, usability reviews by outside consultants. And the site is also a good laugh too.

While I was reading it, it set me to thinking about the real value of advice given by outside reviewers. One thing that occurred to me is that specific improvements to a single design are often of little value, especially if, as the design matures, that specific piece of the design vanishes. It is of far more value to teach the client how to recognize problems for themselves. If you can teach the reason for a specific improvement then the client can do many similar improvements for themselves. Looking at it from the other side, if you are the client, and improvements have been suggested, you should always ask ‘Why?’, if the consultant has not already provided the reason. Getting at the motivation for the change which will allow you to learn more.

Ironically teaching clients how to do usability for themselves could be doing yourself out of a job, but, hey, if you are adding real value then there should be no problem finding more clients.

Integrating the GUI and Off-screen Controls: Camera Example

January 6th, 2008 by admin


Quite often the GUI on an embedded device is driven by the software team while the off screen controls are designed by the mechanical or electronic designers. Sometimes this leads to a system were these two parts of the same device are not well integrated. I have seen cases were icons or names used on the GUI are not consistent with those used on the housing.

On the other hand some devices do a beautiful job of marrying the two types of input. On my Sony camera, there is a dial which allows the user to choose the mode. The dial contains small icons. When you turn the dial you get to see the full name and a description of the new mode. This vanishes after a few seconds, so the extra information does not clutter the image of the picture to be taken.

By also showing a rounded outline around the icons being selected, the on-screen image looks like an extension of the physical dial. In other words, rotating the off-screen dial also rotates a disk that is displayed on the GUI. While this is tricky to describe the brief video below makes the idea clear.

While many other cameras only repeat the icon on the GUI, Sony make this feature far better in two ways. One is that the extra text means that the user can learn the meaning of the icons without resorting to the user manual. The second aspect is the smooth integration of the on-screen and off-screen controls makes this device feel like a single user interface, rather than two distinct interfaces to two different parts of the device.