Design Blog

Notes on design in Android and how I create beautiful software

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.