As software engineers we should be aware of the costs of dealing with versioning and tracking compatibility breaking changes.
And we should be able, in every software product, team and organization, to see where and when versioning is really needed, and so use it properly.
By a practical point of view, as is very effective in security to start with all permissions disabled and then enable only the really needed permissions case by case, in versioning I've noticed that is very effective to start with no versioning and begin to use versioning only when a real need emerges (e.g. through inspect-adapt loops).
A common misunderstanding that we software engineers have about versioning, is to believe that versioning help us to prevent mistakes in the code-build-test environment. So sometime we tend to use versioning to build walls, silos, that slow down developments and changes and require uneccessary efforts and never happens to be useful.
Instead versioning is useful in the deploy-production environment.
In my experience I've found versioning useful especially:
- when an application require an upgrade to the db schema to work properly, the application and the db must be versioned properly
- when a server application change the client-server communication protocol, the client and servers applications must be versioned properly
- when a module (= assembly = dll) are shrink-wrapped software provided by an external third party.
And not useful for modules developed by the same organizations or teams working for the organizations (e.g. off/near-shore, partners). In this case other approaches worked far better.
Do you agree?
Where/When have you found versioning useful ?