Are you making this restaurant service mistake when you code?

I visited two restaurants recently, and realised both made a common mistake. It made me feel frustrated, and generally unhappy about the experience. So what did they do?

They made it unpleasant for the customer (me) to buy and eat their food on their premises.

Case study 1: The Coffee Bean and Tea Leaf

Every weekday, I’ll go to the nearby Coffee Bean restaurant to take my breakfast before going to work. (The reasons why I do this is too numerous to explain. Perhaps in another post…) Recently, I started hearing some grumblings from the staff about students. It’s near exam time, and the students come to the restaurant, order a drink, down it to about halfway, and then sit in the restaurant for hours on end, supposedly studying.

The infuriating thing is, the students will come plop their stuff onto the tables and seats. Each student will effectively take up a four-seater-two-table place. If they’re happy, they might even share their table with another friend.

Now during peak hours, this is unacceptable to the restaurant. It is potentially losing four paying customers for one lousy-cheap-drink student. More importantly, I can’t have my chocolate brownie and Earl Grey tea on my off day weekends because of those students (there I’ve said it).

So the restaurant staff came up with a plan. One day, when I arrived at the restaurant for my breakfast, I felt a bit funny walking towards the ordering counter. Then I realised it. They’ve rearranged the tables and chairs.

All the tables were separated into single islands of one table with two chairs. They told me it was because of the students. It was a bit cramped actually, because the restaurant floor space was now reduced. I had to maneuver carefully to avoid spilling my tea.

I asked what if the students pushed the tables together. They said they’d tell the students they’re not allowed to join tables. After a few days, I asked them the results of their tactic. It seemed to have worked.

Now for the problem. Though aggravating, the students still represent a small percentage of customers. Why are they making all customers to have an unpleasant experience? From the front of the restaurant, the view looks kind of daunting, militant, uninviting even.

As immediate (and satisfying) as the table separation solution was, the long term solution should come from a management perspective, a design perspective.

Case study 2: McDonald’s

My nearby McDonald’s just underwent a renovation. Now it looks brighter, more woodsy-brown, different from it’s previous Hong Kong movie stars and music scene theme. The restaurant management also restricted the cashier line to just one, when they have three perfectly working cashier machines.

I’m guessing they’re trying to improve efficiency, since the staff at the sole cash register is working like crazy to get all the customers’ orders in. A receipt is all that represents the customer, which is pushed to one side while other staff scramble to fulfil the order.

This is like a multi threading problem, where before there’s three cashiers taking and fulfilling orders, and now there’s just one cashier taking orders with multiple staff fulfilling orders. In both cases, an attempt is made to move through the order taking and fulfilling process as fast as possible, in as parallel and concurrent a method as possible.

In theory, that should work. In practice, the user experience suffered. I would much rather that the one staff taking my order goes through all the way with fulfilling my order as well. Sure other staff can help out, but I want the same person serving me.

In the new method, my order was taken, and then I’m shunted off to the side, like some tool whose usefulness was spent. I don’t know who’s getting my drink. I don’t know who’s getting my burger. I don’t even know if anyone was doing anything for me. It sucks.

The coming together

When you go through your project requirements document (you do have one right?), do you simply want to get a certain function done, without giving any thought to how a user would experience it? Sure all the buttons are there, and all the display controls are there. But is it intuitive and easy to use?

I recently had this user explain to me how a screen from a legacy program worked. The sequence where she clicked buttons and checked output made no sense to me. She clicked a button on the bottom left first, then checked some data display, clicked another button on the top right, checked some more display, and clicked a button that was above the first button.

There was absolutely no logical flow to perform the task. Yet my user followed this pattern and was astounded that I had no idea how and why it worked. The user had conditioned herself into a negative usability pattern because there was no other way. I went back to my office, silently swearing at the programmer who originally coded the program. I swore even more after I saw the code…

Why was the user being subjected to this kind of service? As programmers, our users are like our customers. We should be treating them well, even if they aren’t paying us.

Are you making it hard for your users to use your application?

Mid-Autumn Festival, Mooncakes and Hidden Messages

The Mid-Autumn Festival is celebrated on the 15th day of the eighth lunar month of the Chinese calendar, which for this year is 25th September 2007. There’ll be much drinking of tea and eating of mooncakes. The mooncakes usually come in boxes of four. What is a mooncake? Let me show you:
Traditional mooncakes
It is made of lotus seed paste, usually with some lotus seeds mixed in, with a reddish brown outer crust. The ones I bought have a single (duck’s) egg yolk in their centers. There’s the plain (without yolk), double yolk and even the thoroughly sinful quad-yolk variety. They should then be quartered into bite sized portions, which are easier to hold with your fingers.

Here’s another variation, the snowskin mooncakes:
Petite sized snowskin mooncakes
The outer crust is flavoured. I bought small sized ones, each about the size of a quarter of the full sized mooncake. Mine are banana-, strawberry-, orange- and pandan-flavoured. Guess which of them they are?

Why are there mooncakes? The story goes that long long ago in China, a war was fought between the Chinese and Mongolians. The Chinese, faced with the impossible task of communicating with each other without the Mongolians knowing, came up with the ingenious idea of hiding secret messages in mooncakes.

The mooncakes were then speedily distributed and the Chinese leaders were quickly informed via the secret messages. The Mongolians didn’t suspect a thing. Word spread that the 15th of the eighth lunar month would be the day of the Chinese revolt. I guess the Chinese won.

My point, and I do have one

Why am I talking about mooncakes? Well, do you store text in hidden input boxes, but are supposed to keep them secret? The most common example is the password in plain text no-no. Even if the information isn’t exactly sensitive, having application-specific data flying around in digital space while the user is fiddling with the application is still bad.

Do you hide information in plain sight, like the secret messages in mooncakes?

Information knaves are getting smarter. If you dangle data in front of them, but use a simple trick to render data invisible, sooner or later, they’ll catch on. And when they do, you’d better have a backup plan.

Ok, I made my point. Now I’m going to go eat my mooncake.
Tip: Do not eat more than one whole sized mooncake at one go. My limit is half a mooncake per day, and no more than four per year.

Path of a Polymath Programmer Part 4

This is a continuation in a series of posts about my life experiences which eventually led me to be a programmer. As I look at my notes for the series, I’m thinking there’s enough material for a few more posts. Wow. You might want to do a recap of the previous posts:

Console games

I was an avid gamer in my pre-teens and teenage years. I remember going to my uncle’s place because he had a Famicom (or Nintendo, I don’t know the difference). A bunch of us boys would gather together and play on the console. The “in” thing then? Street Fighter.

By nature, I’m not a competitive person. But I like watching them play. They would take turns and pit their skills against each other. I could discern 3 levels of progression.

  • Learn to execute moves on the right side of your opponent
  • Learn to use a fighter other than your favourite one
  • Learn to use the joystick instead of the controller

The first level seemed particular important. They realised quickly that if they’re unfamiliar with the right side of the screen, they’re going to be sitting ducks as the other player whittled their energy bars and basically whooped their behinds. I watched with amusement as they struggled to execute moves on the right side, moves that they had no problems executing when they’re on the left.

The problem? A change of thinking, reacting and hand-eye coordinating was required. There’s a simple experiment you can try.

  • Fold your arms across your chest
  • Note the pattern, like which arm is over which
  • Now fold your arms the other way

It might feel weird the first time you do it. And that’s why the boys were struggling. You might want to try performing tasks with your non-dominant hand. Like brushing your teeth or writing or using chopsticks. Improves and increases neuron connections. Always a good thing in programming.

The other two levels of progression had difficulties similar to the first one. Both required a change of thinking.

So what was I doing while they’re struggling? Enjoying their company. I did spar with them, but it was on and off. I pack a mean punch with Ryu and they won’t know what hit them with my Chun Li slams. Heeyah!

The console wars

I don’t know what started it, but suddenly the other neighbours (some of which were the boys) bought their own consoles too. The Sega console was the next hot item. I think it was called the Saturn or Genesis then.

Some of the boys graduated to the different console (and neighbour’s house). It’s as though there was a fight for attention or something. Since a console was very expensive, and we boys were supposed to be studying and getting good grades, our parents weren’t too fond of buying consoles and the games.

Thus having a console and cool games became like a symbol of coolness. If you had one, then we’d flock to your house to play. It didn’t matter what console it was. If you offer cool games, we’re there.

The console wars eventually dispersed the boys, and even erupted in breakups of friendships. Granted, some of the friendships were tenuous at best, but we did have good times together.

My very own console

Well, my uncle was doing quite well then, and he likes me very much. So he said he’d buy me my own Famicom console! The console wars were just dying down, and I brought a schoolmate and my next door neighbour with me to those gatherings. My friends and I were suddenly out in the cold with no one to be with. And I didn’t want to impose on my uncle all the time. I think I even proposed that I’d buy my game, and he’d let me play on his console. That was how desperate (and addicted) I was.

He bought me a brand new Famicom console, and even gave me some of his games. Awesome! So now, my friends could come to my house and we’d play together. Ahh my very own posse…

Anyway, my friends played the action and fighting games. I joined in sometimes, but I’m really just happy to be part of the gang. [ok slowly bringing the focus to more relevant topics...] I actually found role playing games more fun.

I started playing lots of role playing games. My grades weren’t really affected, so my parents let me be. The thing was, most of the role playing games (and most of the games of other genres) were created in Japan and exported to overseas countries like Singapore. So the manual was in Japanese. The in-game conversations were in Japanese. The item, weapon and people names were in Japanese.

It took me awhile, but I started getting used to looking at the meaningless scrawls of hiragana, katakana and kanji characters scrolling along the screen until an action was required. Two options? First one’s probably yes, the second one’s a no. Anything more than that? Take your pick. If I chose the wrong one, I’d shrug it off, and made sure the next time I play, I would choose a different option.

The iconographical route to learning Japanese

Then there was this time, where I was just flipping through the manual of Super Mario Brothers. The manuals had colourful pictures, and though I couldn’t understand much, the graphics were nice to look at.

Super Mario Brothers textI was looking at the title Japanese characters of Super Mario Brothers, and then I had an epiphany. I could match Japanese characters to English alphabets! I started with the Japanese character “su” and matched it to anything that had an “s” based English phonetic pronunciation. Then I moved to add in other matches. Slowly I built up a Japanese vocabulary that was based in part on curiosity and in part based on an urgent need (I needed to understand what I’m playing!)

While I was playing these Japanese role playing games, I could pick out three distinct types of characters. Those that were wiggly and curly (hiragana), those that were straight or rigid curves (katakana), and those Chinese characters (kanji). I’m Chinese, so kanji was pretty ok, but there weren’t a lot of them and my Chinese wasn’t fantastic to begin with. My newfound ability to read katakana greatly improved my ability to understand the game.

Common RPG Japanese menuWhy would being able to read katakana be so useful? Because katakana is mainly used for foreign (as in non-Japanese) words, usually English. And there were enough of words used in role playing games that had foreign origins. Like battle menus.

My friends were astounded. There was this game where you play this Japanese soccer player named Tsubasa (means wings). There were power skills each soccer player could execute, and though they were powerful and pretty to look at, no one could understand what it was.

Then one of my friends, who attended Japanese lessons, helped out with the translation. Once, he got stuck at a word. He didn’t know what it was. It was in katakana. So I did my thing, voiced out the phonetic equivalent in my head, and translated it into an English word. It was “cyclone”. He stared at me in amazement. “How did you know?” Well, I was just pronouncing it in my mind. Sa-yi-ku-ro-ng. Cyclone. Simple.

The final translation frustration

Herb in JapaneseWith my two third knowledge of the Japanese language, I was able to breeze through most of the conversation in games (role playing or not). Like “Go to such-and-such town.”, “Find such-and-such item and give it to so-and-so”. I was just picking out katakana and kanji in keywords, and acting on them, while relying on my vast memory of known hiragana phrases to fill in the blanks. After playing for a while, I could match simple hiragana phrases too. Like yakusou for herb.

Then came the day where I was truly stumped. The game was Chrono Trigger. I was stuck in this square chamber with a clock in the center. And I had no idea what to do. I struggled for hours. I went around town and spoke to every single person. I went through my entire list of items to get clues. Nothing.

I was freaking out of my mind. So I did the only sensible thing. I bought a Japanese to English dictionary. Then I pored over every single Japanese character in the game conversation text, and translated them character by character, phrase by phrase.

It was with a cry of triumph when I finally set down the dictionary. So what was I supposed to do? Hugging close to the perimeter of the square chamber, I was to run three times clockwise. I can’t tell you how happy I was when I did that, and heard a satisfying clink, signifying that the correct action had been taken.

Conclusion

I would say that playing console games was an important part of my life. I’m not saying it works for everyone, just that they offer something of value to learn. If you can recognise it that is. Hand-eye coordination from fighting games. Critical thinking from strategy games. Problem solving skills from role playing games.

Ok, so that was a long post, and I’ve still got some stuff I want to highlight. Well, I’ll wrap it up here and we’ll continue in another post. See you!

Continue to part 5

BlogRush – the first rush

[Note: there are referral links in the post]
BlogRush widget capture I just read an article from Yaro about this new blog widget/technology called BlogRush. Intrigued, I went to take a look and after watching the introduction video, I was moderately interested.

But I was actually ready to abandon the whole idea, because it sounded a bit too fantastic. Then I thought that this was an excellent chance to do some blog traffic experimentation. So here’s a brief rundown of how it works.

  • Sign up for an account, where you’ll then be given some Javascript
  • Stick that Javascript code into your blog
  • Wait for traffic to come

That’s the easy part. Now for the technical part. Every time your page is loaded with the widget, you get one credit. For every credit you amass, your blog is shown on another blog’s BlogRush widget. So this means, the more your blog is visited, the more your blog is shown on other blogs, which brings more visitors.

Here’s the cool part. For every referral you make by getting someone to sign up for BlogRush, their credit is added to your own. And for every referral that person make, you get their referral’s credit too. It’s a multi tier thing, and it goes up to ten levels deep.

This was where my internal alert came up. I thought on it for a while, and decided that it could be marketing done well. It’s similar to other means of marketing, like MyBlogLog. So after deliberating for another few minutes, I decided to give it a go.

Besides, it might be fun to see how a startup technology perform. Here’s the link again: www.blogrush.com

[Update]
Just checked my inbox, and received an email from John Reese, the founder of BlogRush. Turns out the referral system isn’t one credit per referral all the way down the ten tiers, as I originally thought.

1st Generation Of Referrals (Directly From You) = 1:1 2nd Generation Of Referrals (i.e. Jen in the video) = 1:1 3rd – 6th Generation Of Referrals = 1:4 7th – 10th Generation Of Referrals = 1:8

1:1 means you earn 1 syndication credit for every 1 impression of the widget by your own traffic or by any users located on the 1st (direct) or 2nd generations.
1:4 means you earn 1 syndication credit for every 4 impressions of the widget by any user located on the 3rd to 6th generations.
1:8 means you earn 1 syndication credit for every 8 impressions of the widget by any user located on the 7th to 10th generations.

Anyway, after giving it some thought, BlogRush will need a really scalable system or they’re going to crash. Just remember Friendster. And this is going to be much more calculation intensive. I would think most bloggers have more readers as referrals than people have as friends. And this is supposed to be ten levels deep.

Crash and burn? Only time will tell…

Blog Action Day 2007 – Spread the news

Blog Action Day is an initiative to bring mass participation of bloggers to talk about one issue on one day. The topic this year is the environment.

The day is slated for 15 Oct 2007, so you still have time. There are 3 ways you can participate:

  • Post something on your blog about the environment on that day
  • Donate your earnings for that day to an environmental charity
  • Promote Blog Action Day

Check out who else is participating at the Blog Action Day website!