The power of a name

Often I find it difficult to come up with names for a software project. The name often ends up becoming a dull descriptive name (i.e. Java Assembler) contractions of a descriptive name (i.e. Jasm) or some mythical name that has only passing relevance to project at hand (i.e. Daedalus). I have similar problems when naming versions or branches of a product. Sometimes the version names are arbitrary numbers and at other times an arbitrary number combined with prefixes and suffixes.

This page just documents some suitable possible conventions to help kick start the naming process.

Version Names

Triplet Form

One way to version a component is to represent it by three dot-separated integers in the form “<major>.<minor>.<micro>”. The micro field can be optionally elided when equal to zero. Some example versions include 4.0, 4.0.1, 4.1, 4.1.1, 4.1.2 etc. The fields have the following meaning;

  • major: The major version changes when backward compatibility with previous releases is not granted or major new architectural features are added to the product.
  • minor: The minor version changes when backward compatibility with previous releases is attempted (may be partial) or minor new features are added to the product.
  • micro: The micro version changes when small forward compatible bug fixes or documentation modifications are made.

Naming Major Releases

Another approach that has been used is to associate a name with either a major release or a major.minor release. The names often follow a theme. So the release “4.1” may be the Bogong release, “4.2” Howitt release, “4.3” Feathertop etc.

Suffixes

Another approach is to stage each release and mark it with suffixes so that it goes through a period of ALPHA, BETA and RC releases before finally being released. i.e. The 4.3 version may actual go through a series of releases (4.3-alpha, 4.3-alpha2, 4.3-alpha3, 4.3-beta, 4.3-beta2, @4.3-rc) before being released as 4.3. Some products also use the snapshot or dev suffix to indicate that the release a snapshot taken on a certain day (i.e. 4.3-snapshot-20081228) or at a certain revision (i.e. 4.3-dev-r1234). The suffixes will generally have the following meaning;

  • alpha: Developer testing: Preview of new version. May include half-baked, half implemented features. Not stable. Very early on in development.
  • beta: Client testing: Further on in development but features still being added and removed.
  • rc: Release Candidate: No more features being added, used to shake out any bugs before the final release.
  • dev or snapshot: A snapshot of product at a certain time or revision. No guarantees about quality or feature completeness.

Name Themes

Often a release, branch or set of related products are named using a theme. The themes can be derived from arbitrary things but heres a few ideas;

  • place names: i.e. Mountains in Victorian Alps include Bogong, Feathertop, Howitt etc.
  • colors: i.e. Rainbow colors red, orange, yellow, green, blue, indigo, violet
  • characters out of a play/book/movie: i.e. Serenitys crew Mal, Zoe, Wash, Inara, Jayne, Kaylee, Simon, River, Book
  • building materials: i.e. Straw, Wood, Brick, Concrete
  • animals: i.e. Lion, Tiger, Bear

Note: A long time ago I wrote a similar document which also included a bunch of names.