On my project at work, we’ve repeatedly had to grapple with the issue of what to call the various major components. Mostly we’ve been trying to make the names descriptive and unambiguous. For example, my component on a project at work was originally called a “repo” but other components already use that term for package-management repositories, so mine became a “warehouse” instead. Now another team member is thinking about issues like domain-name availability and search-engine visibility, and that’s making things even more difficult. This all brings to mind Zooko’s Triangle, but with a different twist when it comes to project names. Basically, it seems that a project name can have only two out of three properties. It can be:

  • Descriptive.
  • Memorable.
  • Unique.

Examples of various combinations abound. For example, it’s usually not hard to come up with an acronym that’s both descriptive and unique, so many go that route, but the results are often distinctly forgettable. As the acronym space gets fuller, ensuring uniqueness usually means ever-longer acronyms so the problem only gets worse. Microsoft gives us many examples of descriptive and memorable names, such as Windows and Word, but even with their level of market presence they’ve had to fight hard to make those names seem unique to their products and not other window-related or word-related products. For memorable and unique, look no further than some of the projects I write about there – Cassandra, Voldemort, Riak. Would you know just from the name what any of them were about? I wouldn’t. There are also projects that don’t even achieve two of these properties, of course. Anybody remember the fun when Mozilla named a project “Firebird”? It was never intended to be descriptive, it definitely wasn’t unique, and it was only slightly memorable. They really screwed up that time.

One approach is to take a name that’s either descriptive or memorable or some combination of both, then use a prefix/suffix to make it more unique. Microsoft has WinEverything, Apple has iEverything, Lin-this, K-that, and so on. I’ve used “plat-” or “platy-” myself this way a few times. In a way, though, this just pushes the problem from the whole name to the prefix/suffix. Maybe iPhone has (or had) all three desirable properties, but “i-” as a prefix only has the necessary properties because it’s Apple. I couldn’t realistically start a project name pStore and expect the “p” to make it more memorable or unique. I can’t even expect that with most longer prefixes; dolphinStore wouldn’t be much better.

I don’t have any general solution. That’s why I’m suggesting that it’s a triangle. For now, it looks like we’ll go with an acronym that’s reasonably unique and descriptive but certainly not memorable (meaning among other things that when it shows up in a process listing nobody will know what it is). Like everyone else, I wish there were a better way.