My company is struggling with the question of maintenance releases versus "normal" releases, in the context of an application installed on-site at large organisations who pay for support. First let me define my terms:
- Imagine we've released versions 1.0, 1.1, and 1.2 of the product. These are what I call "normal" releases, i.e. they are the next release from the main branch of development, incorporating all the latest and greatest bug fixes and enhancements (possibly tens of each per release).
- Now imagine some bigshot customer on 1.0 reports a show-stopping issue that nobody's encountered before. The problem still exists in 1.2, and unfortunately 1.3 isn't due out for several weeks or months. So we branch our code at 1.0 to create a 1.0.1 "maintenance" release, containing just the one change that fixes the issue.
This approach makes the customer happy because we fix their issue within a day or so, instead of making them wait weeks until the next normal release. Also, because the maintenance release only contains one small change, they don't need to go through an extensive UAT process, whereas if they upgrade to the next normal release, which could be several versions on, they would be receiving maybe 30 or 40 product changes that (in their risk-averse opinion) require extensive UAT.
The problem is that:
- It's costly for us to create and support multiple versions of our software
- It allows stick-in-the-mud customers to fall too far behind the latest version
- It complicates the process of eventually upgrading those customers in the future, as their installation is subtly different from every other 1.0 customer (upgrading their database is particularly complicated if the maintenance release changed it somehow)
So I was wondering what is everyone else's stance on this issue? How do you keep the customer happy without making a rod for your own back through a proliferation of maintenance releases? For example, do you allow some categories of fix to be done as a maintenance release, but insist that other types are done in the next normal release?
Clarification: writing bug-free software isn't a total solution, because an "issue" in the above context could be an unforeseeable change to the behaviour of an external system upon which our product depends.