Jun 26, 2008

Intuitive vs. Efficient

Many people, myself included, have complained about the lack of intuitive user interfaces in the Linux world when compared to the proprietary world. Here is my hypothesis on why this is the case.

First, what is intuitive? At reference.com, intuitive is defined as "direct perception of truth, fact, etc., independent of any reasoning process; immediate apprehension." Basically this means that if you fire up a new program, you should know how to use it right away.

What is efficient? From reference.com again, we see "performing or functioning in the best possible manner with the least waste of time and effort; having and using requisite knowledge, skill, and industry; competent; capable." For software, this means that we can do what we want with the least amount of time/effort.

Are these two things mutually exclusive? Not necessarily. For a low complexity interface, it can be both intuitive and efficient. Look at the Super Mario. D-pad to move, A to jump. Doesn't take long to figure this one out.
For more complex tasks however, it becomes more and more difficult to come up with a good interface. Generally to increase both efficiency and intuitiveness, there is an increased cost in time. So for some fixed amount of time in development, there is a trade-off in moving toward efficient or intuitive.

Proprietary software is usually made to provide revenue, usually by units sold or by advertising. Both of these are dependent upon the number of users using the software. So by making the software intuitive, you generally increase your target market. The time cost in developing software is better put to making the software intuitive, because it will increase overall revenue for the same amount of cost.

Compare this to open-source software. There is no revenue. Therefore, there is no real incentive to pick intuitive vs. efficient, since the developer really doesn't care how many people use the software. However, if the software being developed is to be used by the developer, there will be a time-cost in the future created from using an inefficient interface. Therefore, if a developer is developing an open-source program, they will focus more on making it efficient than intuitive. Many open-source programs follow this trend. They have a bit of a learning curve, but once you know what you're doing, the software meshes really well with the user in terms of productivity. An added benefit to being open-source is if there is a particular aspect that is slowing the user down, the user can modify the code itself to provide a productivity improvement.

Let's look back at the intuitive interface for a bit. Is there such a thing? Mario was pretty intuitive, but it does take some button pressing to figure out what does what. The B button doesn't do anything if you're standing still and don't have a fire flower, so that's not that intuitive. The only time you'll figure out that the B button does something is if you're moving while you push it, or when you get a fire flower.
Take a look at a word processor - we'll use Wordpad/Gedit as an example. It's pretty easy to write things, just type. By default, the cursor is in the editable area, so your text appears there. Then later on, you can move the cursor around with the arrow keys and backspace to get rid of text. You can even use the mouse to select text.
This interface, as it turns out, is horribly inefficient. What if you have stuff you want to move? Easy if you only have a few words to move, just delete them and retype them. But what if you want to switch Chapters 3 and 17? That are each 10-20 pages long? Here's where copy/cut-paste comes in. However, if you are just diving into a word processor for the first time, how do you know about copy-paste? Usually somebody has to tell you, you have to be shown, or some other way. You could muddle around with it yourself, but here's what might happen (note that when I say "click", it means "go to the edit menu and go down to the option and click it"): You click cut. Nothing happens. You click copy. Nothing also happens. You click paste. Again, nothing happens. Amazing. Now, let's try it when you have stuff selected on the rare chance that someone who doesn't know what they're doing has something selected when they try clicking the button. Cut: Removes the text. I remember doing this when I was like 8, and thinking that cut was a button to delete things, and never wanted to touch it again. Fortunately my wise father then told me how cut worked, and so I grew up with 1337 cutting skillz. Next, go to copy. Again, nothing happens. Copy doesn't do anything visible. Not very intuitive eh? Now here's where we figure things out. They click Paste. It pastes the copied text. So they go "aha!" - hopefully - and realize how copy-paste works. They still don't know where cut went, but hopefully they can figure it out eventually, based on their new knowledge of copy. However, the kicker here depends on the order that they click the actions. If they click cut or copy before they click paste, then they're in business. Other way around? Not so much. Fortunately many editors put it in this order: cut, copy, paste. So there is not really any problem. Some of them even grey out the paste button until there is something on the clipboard.

Now the next step is for them to figure out Ctrl+X/C/V. Ctrl+X and Ctrl+V aren't really that intuitive, but they are efficient since they are all in the same area and can be used with the left hand while the right hand is on the mouse. Some intuitiveness has been given up for the sake of efficiency.

The main point of this example is to say that even something that most of us consider basic (like copy-pasting) is not so basic to someone who has never done it before, and most of the time people need to be shown how to do it. Yet we don't go for something more "intuitive". Why not? Because people are capable of learning. People know that computers generally need some getting used to before you can get good at it. Same goes for pretty much everything else in the world. Want to play guitar? You have to sit down and learn it. Want to ride a bike? Gotta get on there and learn it. Want to drive? Get in there and learn it. Why should software be any different?

A second point I would like to make is that people confuse the two words "unintuitive" and "different". Take for example, vi. It predates the Ctrl-XCV standard. It even predates (to the best of my knowledge) people calling it copying and pasting. In vi, cutting is called deleting, copying is called yanking, and pasting is called putting. What are the keyboard shortcuts? d for delete, y for yank, and p for put. Comparing this to Ctrl-XCV, I would say that vi's shortcuts are more intuitive. However, since it is different, it is therefore labelled as unintuitive by most people.
Now I'm not saying vi is an intuitive piece of software. It has some other problems. There are two modes (I'd say there are even three modes, command mode has regular commands and : commands). People accustomed to other text editors don't like this. However, just like copy-pasting, it is something that can be learned fairly quickly when taught. So don't confuse unintuitive with different.

So next time you are writing a piece of software, think about whether you want to put more effort into making it intuitive or making it efficient. Many people nowadays seem to point to the intuitive side, but by moving to that extreme you may be crippling the power users (imagine playing Starcraft without hotkeys).
Also, next time you criticize a user interface for being unintuitive (I am very guilty of this, and I apologize), think to yourself if it is efficient or not. The developers may have cared more about their productivity than whether or not you want to use their software.

No comments: