Longhorn, Leopard, Indigo, Poseidon, Gran Paradiso, Yukon, SharpFreedom, Supertanga, Revolution, Lightning, Lambrate, Orcas, Q98, Fiji, Pendolino, McKinley.

What does all these names have in common? Apparently nothing... but they are all codenames for various kind of software.

Apple codenames his OS releases with big cats names, Microsoft after places, Firefox with natural parks (next release, 3.0, will be named Gran Paradiso, my favorite Italian National Park), Subtext names are submarines names, Nic's company is naming its releases after cocktail names.

Why is important to have codenames for software release?

Decouple marketing name from the internal name

When you start developing a new product you have to decide a name, the filename. And this must be done a lot of time before the marketing dept decided the real name of the product.
This is also true when releasing new version of the product: the developer team works for the next version named "abcdef", no matter whether the marketing decides to name it v3.6.9 or v4.0.

Give name to sub-projects

Most big product are made up of different applications: a client and a server. Or maybe a core host application, some plugin for the main host application, some server. Are they less important than the complete product? No. So you should name them properly.

Developers want to have fun

So, why relegate them to speak about xyz v3.5?
"I'm working on Subtext Shields Up" is cooler than saying "I'm working on Subtext 1.9.3", isn't it?

How to choose a codename

I think that the best solution to find a codename is to decide a topic or thread, and stay with it: this helps choosing a code name for every release because it reduces the number of the choices.

If you are not creative enough to find a interesting topic for your codenames, here are two tools that will generate Lambrate beercodenames for you:

At Calcium we just decided to give up the boring version number and start using codenames: we are 3 non-kiwis out of a team of 5, so we decided to codename internal releases after non NZers places.

So, the internal name for the next version of the product I'm working on (HotProspect v 2.2) will be Lambrate.

Lambrate is a suburb of Milano, and also the name of a beer produced in a local brewery. I decided to choose Lambrate instead of my birth place (Gallarate) because I spent most of my time in Milan around that suburb: university, my wife's house before living with her, our previous home, my previous job, my current house in Milan, all are around Lambrate (here the map).

And what do you think about codenames? Which topic did you choose for your software?

kick it on DotNetKicks.com

UPDATE: I changed the original picture because I noticed the author had set it to "all right reserved"... now I'm using a picture available under the creative common "some right reserved". The picture of "Lambrate by night" is by pacomì