My name is Ram Rachum, and I'm a software developer based in Israel, specializing in the Python programming language.

This is my personal blog. I write about technology, programming, Python, and any other thoughts that come to my mind.

I'm sometimes available for freelance work in Python and Django. My expertise is in developing a product from scratch.

GitHub profile

Personal Website

24th October 2010


Thinking of your software as a butler is difficult but important

Short version:

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.

Example of good, butler-like behavior: Google Chrome’s tabs

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.

Examples of bad, un-butler-like behavior: 99% of all software

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:

  • Programs which show splash screens that take up half a screen and stay on for 10+ seconds, hiding the program you are trying to use.
  • The Java tray icon, which pops up some balloon notification every time I run a Java app, reminding me I’m using Java.
  • The AC unit in my home, which moves the wind-directing flaps downwards automatically every time I change from “Fan” to “Cold” or vice versa, even though I always set the wind-directing flaps upwards. Why are you moving them back?

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.

My theory on 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.

All content in this website is copyright © 1986-2015 Ram Rachum.
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License, with attribution to "Ram Rachum at" including link to
To view a copy of this license, visit: