I’m known among my friends and co-workers as the guy to help name your project. Coming up with good names sounds like a trivial talent, but it’s neither trivial nor a talent. It’s a completely understandable skill you can practice. A good name not only helps other people understand what you’re building, the exercise of naming a thing helps you understand why it exists.
Things decompose into mechanisms, implications, and consequences. The mechanism is how it works. The implication is what it does. The consequence is what it means for the lives of the audience you’re trying to reach. I choose one of those three to work from and try to tie it back to a simple analogy, soundalike, paradox, cultural reference, or some other hook to evoke an emotional response, which is the only way to get distractible monkeys like us to remember anything. Really make an effort to empathize with your audience and their interests. A name is a pointer to identity, but the arrow goes the other way. A good name doesn’t point to the thing, it points to you.
Mechanisms: How it works
The first step in naming is to identify the core mechanism(s) that underlie the project. There’s usually something technically clever under the hood worth talking about. Engineers tend to prefer mechanistic naming because it reinforces their group identity as people who care about how things work. (Names as cultural clues is an overlooked idea in general.)
At Facebook I once helped build a system to collect stack traces from many thousands of computers doing real-world work and feed them into a visualizer. The purpose was to get a real-time, detailed view of what was consuming compute time across the fleet. It was important to disturb these systems as little as possible. Imagine aliens studying humans. Even random glimpses would say a lot about how we spend our most precious resource, time. One third of the time people are sleeping. One twelfth, preparing and eating food; another twelfth sitting in their cars. A large fraction staring at screens. One sixteenth of their observations show small humans sitting in groups in front of a large human, and so on.
That’s basically what we did with the computers. We wrote a program that woke up at random times for about a minute each hour. While it was on, it would “freeze” the computer every millisecond or so and take a picture of what bit of code was running at that moment. Repeat that billions of times and aggregate the results. This created a probability distribution of what was consuming our most precious resource, computer time. The more often a bit of code was run, the more pictures of it we gathered, the higher its position on the list. We could measure to the dollar the cost of a particular line of code.
This was an internal tool. To sell it to our audience, which was infrastructure engineers, the best bet was to capture their imagination with a name based on the mechanism. The analogy I used was how turbines and other fast-spinning things are studied in the lab. If a turbine spins around 100 times per second, you set up a special camera and flash to take pictures 99 times per second, which creates the illusion of slowing it down.
We called our tool Strobelight. It worked pretty well.
* * *
A fun one: my former boss at MemSQL had a neat idea for a series of tshirts to give away at conferences. We were pushing our in-memory database technology, and he wanted to play on the generic COLLEGE shirt joke from the movie Animal House: a plain grey shirt with MEMORY written in that distinctive block-letter style. Funny, in the right direction, but not killer. All of us in marketing and product took a day or two to noodle on it in the background. Animal House was too long ago. I’m 37 and I barely got it. Our 20-something target audience was unlikely to get it. But there was something there. College snobbery. Irony. Memory. But we weren’t just a memory company anymore, were we? We use all kinds of solid-state storage. Oh!
As a test we printed a run of both the MEMORY and SOLID STATE UNIVERSITY shirts, and left them on a table during an event. The SSU version won hands-down. Just a tweak, but an important tweak, to bring the joke home.
* * *
Another internal tool practically named itself. It was a log-processing system I built with my colleague John and our intern Mohammed. In programmer jargon the start of a log of events is called the “head”, and the end is the “tail”. New entries are continuously added to the tail; it’s a moving target. A very common thing you have to do is to read new entries as they are added and do something with them, such as update account balances or click counts. Programmers like to verb nouns, so this is called “tailing the log”.
Facebook’s logs are gigantic. It’s not unusual to have to process millions of new entries per second, far more than a single computer can handle. So the simple-seeming task of tailing a log becomes a daunting coordination problem. And since this is a very common kind of task, it made sense to automate as much of it as possible. Ideally, to create a new log tailer all you’d have to do is write the special bit of code that handles only one entry of whatever log you are interested in. The infrastructure around it would handle all of the rest of the greasy details: provisioning servers, distributed execution of your code, keeping things in order, checkpointing, and failover.
We called it TailerSwift. And the checkpointing function, which ensured that work was completed before moving to the next batch, was of course imma_let_you_finish.
Implications: What it does
Mechanistic names are only relevant to people who want to know how something works. Maybe your audience doesn’t care. They just want to know what it does.
As a side project my friend Greg requested a dump of historical parking ticket data using the Freedom of Information Law. Given times, dates, and locations, he built a probability map of the odds of getting a ticket all around San Francisco. You can search for likely spots and times that tended to not get ticketed.
It’s not just parking rules; it’s parking practices. In front of my house, for instance, you technically can’t park on Mondays, Wednesdays, and Fridays between 9 and 11am because of street cleaning. But we know that the meter maid taking point in front of the street cleaner generally doesn’t swing by our block until 9:45, and they almost never come back. Why clean a street twice? His tool brought that kind of local knowledge to everyone.
The mechanism by which his software made predictions didn’t matter. And while the data was good, it wasn’t a guarantee. So you need a name, something now, something to hook the imagination, to describe what it does and stick in the memory. Find a hook to a prevailing meme, like a baby spider catching a breeze on a strand of silk. Ah! Call it ParkRoulette.
Consequences: What it means
Another naming exercise at MemSQL stumped me and everyone for a week. We had built a tool to process continuous streams of data and save them to the database. It could do the gee-whiz stuff like machine learning as well as the boring extract / transform / load (ETL) processing that is the bread-and-butter of data engineering. Its purpose was to make all that donkey work easy, wrapped up in a full-featured, polished product, accessible to a broad audience.
The working name was Pipeliner, which was OK. The other product manager Steve, and I, along with the rest of the team, kept batting ideas around and doing polls and failing to reach consensus. If a name doesn’t capture people’s imaginations and end dispute, then you’ve probably got the wrong name. That’s the difference between lightning and a lightning-bug. Keep looking.
I went for a walk, trying to think of puns. Implications. No, this is for execs. Think consequences. Machine learning is a red herring. The real value for people in charge of budgeting for large systems and teams is making ETL simple. It streams data…
I left a Post-It on Steve’s monitor: “Stream Engine! CHOO CHOO MOTHERFUCKER”.
Ha ha, but not quite. Stream. No one wants an “engine”. More modern. But classic. Well-designed. This is a tool to make everything easier end to end. It smooths the way.
Call it Streamliner.
* * *
Sometimes the name drives the idea instead of the other way around. A few years ago I decided to write a children’s novel about computer science. I had no idea where to start. What I did have was an irrational fear of giving my characters the names of real people. (Spare a moment of pity for all the men and boys in the world actually named Harold Potter.) The names had to be fake but plausible. This turned into a case of the tail wagging the dog, but it was fun so I ran with it. The first character was Eponymous Bach. I just liked how it sounds. So who is she? She’s a Bach, so she must be a composer… but not of music. She composes ideas. She puts little ideas together to make bigger ones. Then she names them after herself, eponymously. Of course.
The hero’s name came from an in-joke shared by programmers of a certain age, who made the jump from commercial art to programming way back at the dawn of time. The standard filler text we used for layouts was a bit of garbled Latin that starts with “Lorem ipsum dolor sit amet…” Nonsense text allows you to concentrate on the design and not be distracted by the words.
In a similar way, programmers often need a fake user to make screenshots and put code through its paces. That’s how “Lauren Ipsum” became our fearless first tester and slayer of assumptions. Miss Ipsum pops up in the oddest places. If you have an Android phone and good eyesight, you can see her on the icon for the Contacts app. All I had to do was tell her story.
* * *
Sometimes you can get away with real subtlety. There was a system at Facebook for measuring the consistency between various caches and the source of truth in our databases. Think about the like counts on a post from President Obama. You really don’t want to have to count up millions of likes each time someone sees the post in their news feed. So from time to time you write down the current count in a cache, which is the computer equivalent of a Post-It note stuck on the fridge, and use that instead. The cached count and the real number diverge until the cache is refreshed.
Now imagine that little drama playing out for billions of pieces of data. When you’ve got a distributed database that’s being updated constantly by a large fraction of the entire human race, perfect consistency between caches and the real numbers becomes more of a statistical aspiration than a realistic goal. The system, called Emerson, measured that divergence.
I had nothing to do with this system, but its seemingly-random name bothered me like an itch. It wasn’t a mechanism and it wasn’t an implication. What could it mean? Months later it finally hit me: “A foolish consistency is the hobgoblin of little minds.”
An obscure joke, sure. Still a brilliant piece of art. All art has an audience. Even a silly song a child sings to herself has an audience of one. Creativity is easy. The hard part is to correctly gauge the audience, to become them well enough to find a link. The arrow points to you.
A Worked Example
Take a hypothetical new product, say, an electric minivan for large families in the city. It’s the world first Green SUV. Let’s give it a name.
Electric is the mechanism, the technology, the gee-whizery, the how it works. It’s a minivan which implies it can carry lots of people and things; that’s what it does. You can cart around Mom, Dad, Madison, the twins, the neighbor kid, and all their hockey equipment while still feeling good about the environment. The consequence of a product is what it means for the audience, who in this case is a largish upper-middle-class family trying to fit into the metropolitan reconquista.
You may have seen suburbanites struggling to navigate their monster machines through the miniature streets of San Francisco or Portland, like a linebacker in a bouncy castle full of kids. You won’t have that worry in this car. You’ll sail those narrow city channels with a tight turning radius and smooth acceleration, while keeping the high wheelbase and the feeling of safety and control you expect. It’s zero-emissions but you don’t need to shout about it. You sail along, at ease among the Civics and Minis, smiling as you see someone trying to fit anything larger than an ottoman into their Prius. You belong. This is the Chevy Urbino.
Runners up: the Chevy Glide and the Chevy Marina. I almost settled on Marina until found out it was the name of a truly awful line of cars from the 70s. Then I remembered the little town of Urbino in Italy, its history of enlightened & elegant living, and that its name means “little town”. Agree or disagree, or come up with a better name if you like. If you are well-read enough to pass the GRE you are more than qualified for this kind of work.
Epilogue
There’s delicious irony in that my editor and I went five rounds over the headline of this piece. Most arguments over names are actually arguments over your different conceptions of the audience, which since you’re trying to empathize with their identity, can become an argument over identity, which is a negative-sum game. That’s why editors get final cut over headlines. They decide, and in return allow their writers to complain about it.
Good name, Carlos, good.
Very good stuff! I wrote an article on naming things (“nominology”, I called it) a few years ago that you may like: http://messymatters.com/nominology/
I love the name Eponymous Bach. Interesting thoughts about the cultural reference point of names from the pov of programming language.
A subconscious take-off of Hieronymous Bosch?
In most of the companies and products I’ve helped create, I get accused of spending far too much time on naming. I used to defend myself with the usual arguments about how strongly consumer behavior is influenced by names. Then I realized I just really enjoyed the process. Now, in retrospect, I’m back to defending the process, but now I think it’s less because of the way consumers will receive the name, and more because of the importance of discovering – via name discussions – exactly what we were building and why.
Nice article and some great names here, BUT – I feel almost like you are trolling us with the car names at the end. “Urbino” somehow conjures images of agility, roominess, and green-ness? I don’t think it evokes anything to a non-Renaissance nerd, except maybe continental affectations. Glide? Sounds like a toothbrush or a razor. Marina? In general, you want to avoid implying your car handles like a boat. Names borrowed from romance languages also have a very passé feel to them, like wood-paneled station wagons or porn mustaches.
How about a real life example? The Leaf – light, nimble, the essence of vitality. Or Chevy’s own Volt. However, we also want some overlap with the idea of roominess. How about Kangaroo? We know it’s green because it’s from nature. If “Kangaroo” is too long it could be shortened to “Kanga”, “Roo”, or most any marsupial name. Of course, we could go even stronger on the electric concept with “Echidna” or “Platypus”, referring to their use of electroreceptors. But why stop there? “Pikachu” is copyrighted, but “Pika” is a real animal. The Chevy Pika. It’s totally not an eating disorder.
I can’t think of the process of choosing car names without thinking of this: https://www.youtube.com/watch?v=x97DBQBbDcQ
Classically, ‘naming things’ is one of the two hard problems of computer science, along with cache invalidation and off-by-one errors. Most people genuinely don’t seem to be very good at it, and resist the need to think about it – hence the use of acronyms or other lazy options. Yet good names do seem to have genuine utility, and if naming things is a skill that we can learn, then it would seem that most people are under-investing in that skill.
I’m not totally sold on the value of names, though. There are truly self-defeatingly bad names – inappropriate, vague, misleading, offensive or difficult to parse in some way – but these are comparatively rare, and a name has to be very bad before it causes harm. Most popular software projects have names that seem quite arbitrary – ‘Ruby on Rails’ gives you some idea of what the thing is, ‘Django’ is equally popular and doesn’t, ‘NodeJS’ sounds like it should mean something but probably doesn’t, and nobody seems to mind. ‘Go’ is a terrible name for a programming language, and that doesn’t seem to have done it any harm (given the popularity of C and its derivatives, one might almost believe there’s an inverse correlation between language popularity and the objective quality of the name of the language). ‘JavaScript’ is a simply awful name, the language having no connection to Java beyond some syntactic similarities (all of which derive from their shared similarity to C anyway), but it’s still absurdly popular.
Having worked in various corporate environments where pieces of software have been given code names (‘Mercury’, ‘Adrenaline’, ‘Immediate’), it often feels like the name exists simply because there has to be a name, and the harder the name-chooser tried to suggest some particular characteristics by their name-choice, the more suspicious everyone else became of the underlying reality. If you have to resort to using the name to imply that your system is fast, powerful or efficient, then you’re probably not very confident in the ability of the system to speak for itself. Pun names are good for programmer in-jokes, but I’m not sure they’re as useful in the wider world as we’d like to imagine.
Reminds me of one my favorite jokes: “How do you know if someone is a programmer on the internet? Don’t worry, they’ll tell you, and then bore you to death and beat you over the head with their shitty programming humor.”