The goal of a software product is to serve human beings. A good software product caters to the user’s whims, even if it means doing something hard and technically complicated just to save the user one click while he is watching pictures of lolcats. The way a good software product treats the user is kind of like the way a butler treats his master.
Now, we software developers have a well-paid, prestigious and intellectually-satisfying job; These attributes are almost the complete opposite of those of the butler’s job; this is why it’s so easy for us to forget that our software’s job is to be just that, a butler. And this is why we should make it a point to remember this: Our software is a butler.
In this post I will talk about an interesting point that I think every programmer should consider. It’s about thinking of your software as a butler.
When I say a butler, I mean a servant, a waiter, or whatever other word you call it. A person whose job is to serve you drinks, clean up your messes, do all the dirty work for you, and get out of the room the moment you don’t feel like seeing him anymore.
A butler’s job is to serve his master. If the master wants a drink, the butler will have a tray ready with a variety of drinks for the master to choose. A butler is encouraged to have a nice appearance, (i.e. wear a nice suit,) but not in the same way that a businessman might wear a suit. The butler has no ego— he is here to serve and get out of the way.
This is exactly how a software product (or a gadget, or any kind of technological device) should treat its users.
To understand, let’s look at an example of a program behaving like a butler.
A good example for butler-like behavior is Chrome’s tab behavior, specifically the way that the close button is positioned and the way tabs change their width. This is explored in this nice piece by Basil Safwat. Here’s the important part:
Now, Chrome will resize the tabs to fit the remaining space, but only after the mouse has left the functional area at the top of the browser; that is, after the user has finished interacting with the tabs and has moved their attention elsewhere. Here it is, before and after:
When the mouse moves from the toolbar area, the tabs resize. […]
If you’ll want to understand exactly what Chrome is doing here, I recommend you read the original, detailed piece, but in short: After you close a tab in Chrome, it will keep the widths of the other tabs constant, so you wouldn’t have to move your mouse if you want to close the next tab. If you move your mouse away to do other stuff, Chrome assumes you’re not interested in closing another tab, and only then will it enlarge the widths of all the tabs for maximum readability.
This is a great example of Chrome behaving like a butler for the user.
Sadly, in the current state of the software world you don’t need to go very far to find a program that doesn’t behave like a butler. Almost any program I use daily, from my operating system to my text editor to the remote control of my air conditioner— They all, on occasion, treat me like I’m the servant and they are the masters. (Of course, it’s not black and white; A program may have butler-like behavior in general, but in certain circumstances show un-butler-like behavior, and vice versa.)
What are some un-butler-like behaviors? I’ll list a few that annoy me:
I don’t have the heart to continue listing these behaviors— We are all painfully aware of them. Instead, let’s speak about why this is happening.
"Software developer" is a well-paid, prestigious and intellectually-satisfying job. Most good software developers have a sizable ego, and that’s okay— Having a big ego is a great motivator for doing outstanding work and creating great software.
But that kind of ego is problematic for someone who’s trying to be a butler, because an important trait of the butler is that he has no ego!
This is the clash: Developers have big egos, (and there’s nothing wrong with that,) but a butler can’t have an ego.
When a software developer is developing a program, he always needs to remember that even though his software may be a masterpiece of architecture and design, its job is to be an efficient butler which does everything to please the master, and then gets out of the way.
I think that if we all understand this ego clash problem, we’ll be more likely to notice it when it happens to us, and then we can catch ourselves before we create software that behaves like it’s the master instead of the servant.