Design Blog

Notes on design in Android and how I create beautiful software

The three parts of a great error message

If you’ve ever looked after a baby, you know how annoying it is when different problems result in the same error message. You feed it, change its nappy, wind it, try all kinds of guesses, but still, you get the same loud noise of distress. Eventually it turns out there is nothing wrong at all.

With some software it’s the same. There’s some kind of error indication, but it doesn’t tell you what’s wrong. Or maybe it does tell you what’s wrong, but in technical jargon, so you still don’t know how you can fix it. Even if the error has a helpful message, it’s very common for it to sound patronising, or as if it’s telling the user off. “You have performed an illegal operation” is an infamous example.

The chair-pull: I was going to click on that!

A funny prank… the first time

In the nineties, when there was a trend for “prankware” which you installed on people’s computers behind their back, there was one particular genre of prank. It would pop up a dialog box asking the user, “Are you gay?” perhaps phrased a little more colourfully, or some other potentially embarrassing question originating in the schoolyard. There would be two buttons, “Yes” and “No”, but when you move the mouse pointer over the “No” button, the button would jump to a different location, so you couldn’t click on it. This way, it would prevent you from answering “No”, and you’d be forced to give an embarrassing answer to the question to make the dialog go away.

(I hoped to find an example screenshot/animation of the above, for anyone who doesn’t remember the awful things, but was unable to find one. If you have an example I can use, please do leave a comment so I can add it here.)

Luckily, times have changed—both in software and homophobia—and that kind of practical joke has gone to the great shareware site in the sky. But sometimes it seems like the people who designed that prank are still making software. How many times have you gone to click on something, but then the screen has rearranged itself, and the button or link you wanted moved out from under your finger or mouse pointer? It’s like someone offering you a chair and pulling it back as you go to sit down. If you’re lucky, the result is that you click on empty space, but it can happen that another button moves into the place you’re clicking, and you end up performing an unwanted action, or going to the wrong page.

Quoting in messages

When I was younger, I played a racing game called Lotus Esprit Turbo Challenge (as well as its two sequels). It had a two-player split-screen mode where both players, and a lot of computer-controlled cars, race for first place. In this mode, when you got close behind the other human player, it would warn you on the screen: “DAN AHEAD”. At least, that’s what it said when I told it my correct name. Perhaps the earliest hint of my hacker tendencies was that I found it hilarious to enter my name as “SLOW DOWN”. Then, when my human adversary was in danger of catching me up, the game would be fooled into giving them a very unhelpful warning.

Upsell is not a town in Sweden

It’s the time of year when sons, daughters, and fathers of infants panic, and mothers too wait in uneasy anticipation of getting a breakfast tray tipped all over them in the morning. Florists and chocolatiers rub their hands together in glee, but even on Mother’s Day, stock doesn’t sell itself. So today we’ll be taking a critical look at an online shopping workflow, with a seasonal example.

Launch animations

One of the driving principles behind the design of Shadowburst apps is that every computer should look as attractive as computers do in films. One of the biggest things Android does to get the ‘Movie OS’ look is to animate transitions between screens, whether that’s swiping between tabs, animated scrolling, or sliding menus. Transitions aren’t just there to be pretty. Just like in the movies themselves, a smooth transition is less visually jarring than a simple cut, and it can help the user to see the relationship between the old and new screens. This article is about the transition between activities.

The Back Button

The back button in the Android interface is one of its most distinctive features. People have very clear ideas of what they want it to do: it goes back to the thing they were looking at before. They don’t want to keep the GUI state around, but they also don’t want to lose data. In most ‘productivity’ apps, pressing back from an editor window saves a draft.

Hanc marginis exiguitas non caperet

For some years I have had a marvellous idea for a computer game. Each player takes control of a civilisation, and has to guide its scientific and cultural development. Starting from the earliest days with iron tools and the invention of writing, through the development of experimental science, and of philosophy, through to post-modernism and the internet age, and beyond, the player carefully shepherds his race, facing competition from the other races over resources and cultural superiority. As the game proceeds into what to us would be the future, the play area expands to the stars, with each player’s civilisation becoming a vast galactic empire.

The winner is the player whose race is first to prove that they are living inside a computer program.


Consumer grade

Goods are often distinguished as “consumer” or “professional”. The two biggest examples I can think of are cameras and sound recording and reproduction equipment. The distinction has traditionally been that consumer-grade goods are cheap, but produce inferior output, and don’t interface well with other components. Professional goods are more expensive, connect to other professional devices, produce brilliant output, and often have more controls the user can adjust.

In software, we have another category: “enterprise-class”. Particularly server products and web apps are given this ill-defined quality. The intent is to define a sort of quality hierarchy: enterprise-class products are the most robust and scalable, then professional-level, then consumer-grade. But consider the following.

Products targeted at consumers aim to be used by many people. They need to be easy enough for the layperson to use. Customers generally hear about them through recommendations from friends, which means the product has to be very good for word of it to spread. Usually the person who uses the product is the same person who chooses which to buy. Consumers and hobbyists are very intolerant of software that runs slow, is unreliable, or doesn’t interoperate. They have little enough information that it’s easy for them to switch products. Security, while not at the forefront of users’ minds, is more vital when your product has a large install base. Consumers generally want free support.

Professional users tend to choose products based on reviews written in inclusivist trade magazines that don’t want to annoy manufacturers. They have expensive computers fast enough to tolerate slow software. They know about what they want to achieve, and can use the software in a sophisticated way, so ease of use is not as important. Because they use the software as part of their full-time work, they are more willing to put in time doing manual tasks that consumers would require automating. They are easier to lock in to one product because they have so much data. They tend to expect a hefty manual, but are willing to buy a book on how to use the product effectively.

The people who choose enterprise products are usually not the same people who have to use or administer them, and the choice is based almost entirely on marketing material and sales patter. The buyers are willing to throw at the product whatever hardware is needed to make it fast enough. In use, the product will be behind a large firewall with a strict access-control policy, and there will probably be a mechanism for ensuring timely security updates. If the system is mission-critical, there will be a failover system, so reliability is less important. Customers expect to have to pay through the nose for service contracts to configure the software, and are willing to hire consultants to make it interoperate. They have lots of data and expect lock-in as a matter of course.

Our conclusion must be that the traditional distinctions are misleading. Far from being a badge of quality, “enterprise-class” is a measure of a product’s shortcomings. Rather, the discriminant of quality must be scalability, not just in the strict sense of how much data you can handle, but the wider sense of what sort of customers you can appeal to. If you can be nice enough for a single user that he’ll recommend you to others, and you can handle the picky administrators employed by enterprises, you must be a well-engineered system.

But ease of use means fewer support contracts. Efficiency means your software is licensed for fewer CPUs. Interoperability makes it harder to sell ancillary software to existing customers. Lack of lock-in makes it easier for competitors to lure away your customers. Free updates make it harder to generate repeat sales. It is, I think, a great shame that the very properties that enhance your product, hurt your business.

Games of skill

The most enduring board games are the ones where adults and children can play together on a level playing field, usually ensured by adding large doses of randomness to make skill affect the outcome less. I’d like to see this taken to its logical extreme with games where the players’ actions can’t at all affect who wins (if there even is a single winner), only how stylish the victory is. The aim is not just to give ‘weaker’ players a chance of winning, but to make people take the outcome less seriously, to make them play for the taking part, not the winning.

But I think the perception of the skill/chance balance is more important than the balance itself. Strategy games (both turn-based and real-time) are widely seen as being pure skill, but players still complain that they lost because of the smallest chance factors, like starting location or prevailing wind.

Without some external factor like gambling, there is no reason to want to win. Nobody would play Russian roulette with a cap gun, because there is no tension at all. But with games of skill, winning is a proof of skill, a way of showing off. For very competitive people, this can be more important than a monetary bet. Even with a large chance element, such as in Risk, Monopoly, or poker, the bragging rights of winning are worth enough to make the game worth trying at.

Nintendo’s Mario Kart games are a great example of how hard it is to get this balance right. Driving makes it a game of skill, but they add the chance elements of blue shells, lightning bolts, &c., to give weaker players a chance to win. Some players think they went too far with Mario Kart Wii, making it too chance-based, but on the whole those are the hardcore, skilful players: not the grandparents playing the game with people two generations younger.