Software maintenance is not a goal in itself. It is not a Good Thing. We should aim at avoiding it as much as we can: it is no more than a necessary evil! This is one reason for not having a dedicated SCM group, or even a dedicated Release Engineer in every project.
What we can try to do is limit as much as possible the amount of versions to maintain, as well as the size of the software configurations.
The second target should be reached through reuse. This is the same philosophy as the one proposed by Edsger Dijkstra, that lines of code should be counted as spent, not produced.
The first requires that we continuously update our software base to a common consistent state, that we can propose to our customers. We should try to refrain to offer fixes to distinct problems, but attempt to consolidate them into as few baselines as possible.
Also, options (or variants) should be identified as separate configuration items, not as different versions!