Ramsay's rules applied to software
by jegeblad
Over the last couple of years I have enjoyed watching the English chef Gordon Ramsay's Kitchen Nightmares. That's the show where he travels all over the world and tries to help restaurants in need.
The formula he applies consists of the following:
- Reduce menu. Often the restaurants have in the order of 100 meals to choose from. As a customer that is a hopeless set of options. I was in a pizzaria in Italy once which had more than 150 pizzas to choose from. I ended up spending 25 minutes just looking at the menu, and in the end I was still speculating if I chose the right pizza.
- Increase kitchen efficiency. Ramsey does this both by reducing the menu -- A shorter menu will make the kitchen staff's work simpler -- and by looking at the work-processes taking place in the kitchen. I.e. are people communicating enough? Is it clear who has responsibility over what? Are the right people doing the right things? Are people using the right tools (pans instead of oven)?
- Get proper produce. A lot of places Ramsey goes to uses frozen and canned produce when they could use fresh. Of course, Ramsey's motivation is that fresh tastes better.
- Focus. Often he will suggest that the restaurant specializes in pasta, steaks, fresh seafood, etc. This further helps to reduce the menu.
Although I think the shows have become repetitive I still enjoy watching them because they are often about how people are reluctant to change and how it can be hard to see things properly when you are in the middle of them.
The point here though, is that the exact same formula can be made to consumer software. In that case Ramsey's software rules would be something like:
- Reduce feature set. Have a short list of important good sollid features/options rather than a long one. Users prefer to have 10 good features than 100 they never use. This is especially true for iPhone apps which users are not going to spend a long time getting used to. If an app has a lot of features make sure they are easily accessible. Do not make long and confusing menus. Select the right and exciting features.
- Increase efficiency. It doesn't make sense to implement complicated features unless customers are going to appreciate them. Do not try to implement features you have no idea how to do properly -- Accept your limits. Also, there are right and wrong ways to implement individual features. Use the right tools for coding, automating tasks, drawing, etc. Identify the right programming language for each task. Use libraries, but be careful that they are the "fresh" and not the "canned/frozen" kind.
- Make the proper code. Make sure your program code is clean and avoid making hacks. Just as a customer can sense if a meal is based on quality produce, a user can also feel if an app contains many hacks and is only hold together with bubble gum, or if it is based on a solid foundation.
- Focus. Focus on one area. Do not expand from that. Do not expand!!! Good applications that do many things focuses on solid core and let their users extend on it (TextMate has bundles. Photoshop has plugins).
I recently watched one of Ramsey's shows and it struck me that I had not followed those four rules. In fact, I have been doing the exact opposite the last 3 months or so. I opened up Lifecards immediately after the show and it hit me like an express train. With Lifecards there are hundreds of cards to choose from. Not the 10-15 categories with 10-15 in each which would have been optimal. The original reasoning was something like: since I am not a designer, I cannot focus on quality so I have to focus on quantity. I also added features over the summer that I suspect no one uses, e.g. image filters, transparent text, and speech bubbles. I added those because I already added them to Lifestrips (where they make sense), so since the apps share codebase, adding the features to Lifecards happened automatically. Although the foundation code is quite clean, some of the GUI and OpenGL code has become a bit more dirty than it should have been. Voice alarm also suffered a little bit from feature explosion.
It is kind of interesting to look back at because I've known those four golden rules for years. Still, I somehow got carried away and started thinking:"If only I build this feature, the customers will come.", "If I add 100 card templates, they'll come". So now I am trying to figure out how I can apply Ramsey's rules to my current apps, but the hard part isn't realizing what is wrong. The hard part is figuring out how to fix it and fixing it.
I think what confused me was that I started working with computers when features were really important. In the early 90's applications which had a limited set of features really annoyed me. I actually liked applications which lots of features to explore, where I could do exactly as I wanted. However, even back then I hated applications that tried to more than their focus area. Like adding drawing tools to Word for Windows 6.0 -- What a stupid idea. Let users use proper drawing tools for their drawings. I suppose, the trick is to identify which features are important, implement them elegantly so they do not get in the way of the user but the application still feels accessible.
The last of Ramsey's shows I saw contained a segment in which the restaurant owner refused to remove meals from the menu. "People use them", he said. "They expect to be able to order them". Of course the reality was that there were no customers in the restaurant. I understand his view completely, because now that I know I should cut back and clean-up features, I tell myself:"No, I cannot remove that feature. People expect it to be there now." I guess it is much easier to see other people's mistakes than your own.
08/27/09 10:32:12 am,