Scott Hanselman has an interesting note on product version numbering and naming. My response is too long for a tweet or a facebook comment, so I’m blogging it here and sending him a link …

I’m all for semantic versioning - the SemVer website articulates well a good practice.

Where things fall down with Marketing is, almost certainly, for good reason - that they want to make it easy for people to identify what’s compatible.

Calling the update “.NET 4.0 Platform Update 1” means that it’s still .NET 4.0 - and that means people searching for .NET 4.0 will still find it, where a search for .NET 4.1 would not. (There’s probably a corporate change control issue here as well - getting permission to install “.NET 4.0 Platform Update 1” may well be easier than getting permission for “.NET 4.1”.)

On the Semantic Versioning TwitPoll, Jeffrey T. Fritz writes:

The numbering scheme should also reflect which ‘lego bricks’ fit together.

Questions like “Can I use my.Net 2.0 library with a.Net 3.5sp1 ASP.Net website?”

should be simple to answer…

It’s exactly this kind of constraint that gives us very odd schemes, as people become adverse to changing the first two parts of the version number because they want to stay “in step” with some other component.

My suggestion is that these dependencies should be called out separately from the version number, but as a part of the “Marketing Name” for the release.

Some invented illustrations …

  • ASP.MVC 4.2.45 for .NET 4.0

  • StyleCop 4.6.4 for Visual Studio 2010 and Resharper 6.0

  • NAntContrib 2.3 for NAnt 1.4

Principles

  • Keep the version number of the product independent, following the SemVer guidelines

  • Explicitly call out related products in the title so they show up for searches and compatibility never needs to be guessed at

Comments

blog comments powered by Disqus
Next Post
What to ask users ...  15 Aug 2011
Prior Post
Equal Button Sizes in WPF  19 Jul 2011
Related Posts
Browsers and WSL  31 Mar 2024
Factory methods and functions  05 Mar 2023
Using Constructors  27 Feb 2023
An Inconvenient API  18 Feb 2023
Method Archetypes  11 Sep 2022
A bash puzzle, solved  02 Jul 2022
A bash puzzle  25 Jun 2022
Improve your troubleshooting by aggregating errors  11 Jun 2022
Improve your troubleshooting by wrapping errors  28 May 2022
Keep your promises  14 May 2022
Archives
July 2011
2011