1 June 1994
10 February 2001
2 January 2002


      I give each release a major number, a minor number, a stage, an iteration number, and a feature-set name. For example, "2.4 alpha 3 (rectangular)", or "2.4a3" for short, or "rectangular alpha 3" for memorability. The major and minor number (or the name) indicate a particular predetermined set of features.

      I usually like to have some sort of theme to the names, to make versions even more memorable. Ideally, the names of minor releases are somehow specializations of their corresponding major-release names. I usually don't name iterations, since what I'm really naming is a feature set (and it can be hard to maintain continuity over a long succession of hierarchical names :).

      I start major numbers at one and minor numbers at zero. The stage can be one of four things:
  • alpha, meaning "this release doesn't implement all the scheduled features". I sometimes add to the current feature list during this stage, but never after (only to the next feature list).
  • beta, meaning "this release implements all the scheduled features, but has problems"
  • gamma, meaning "this release implements all the scheduled features, and will be declared final if no more problems are reported within a certain length of time"

    or

  • final, meaning... final.
      If the minor number is zero, I usually omit it, e.g., "release four beta three". I sometimes spell out the numbers too, as in the previous example. I start iteration numbers at one. If the iteration number is one, I usually omit it unless I'm fairly sure there will be a second iteration. There is only one iteration for a final release. :)

      I give each patch a release version, the stage "delta", and an iteration number. For example, "2.3 alpha 3 delta 4", or "2.3a3d4" for short. The release mentioned is the most recent one in which the patch applies. If a newer release comes out and a patch still applies, I'll release a new patch with the appropriate new name, including the same iteration number, and the same content. For example, given patch 2.3a3d4 and the subsequent release of 2.3b1, I'd create patch 2.3b1d4. Patch iteration numbers start over with each new major or minor release.

      A patch usually conveys a fix (as opposed to a feature). Ideally, final releases aren't patched, but they sometimes are. I never patch a final release with a feature; I just make a new major or minor release. I usually don't patch a final release with a fix either, since there's usually an impending major or minor release with new features that convey an appropriate fix.