At Bitsum, years ago, we introduced new version control over legacy products. At that time, we used Subversion. Then we did the same reset when we switched to Git. Every change to any line of our product is therefore tracked and reviewed before being committed.
Git works well, but man is it slow. We may have to rework it a bit.
However, that doesn’t cover *everything*. What about the Platform Toolset and build tools? Some random issue with the build machine? That’s why we supplement our VCS with VM snapshots, which we can clone and continue work on at any point. We use VMWare Workstation, which has served our needs. It’s not free, but well worth the small expense.
This is a very efficient setup ensures good QA and gives us the capacity to issue minor back-ported fixes or language updates if required.
More importantly than all that, we use a highly incremental development strategy. New features and fixes are added to the frequent minor updates we issue. We don’t save the big stuff for some big major version. v8.0, for instance, would be the culmination of everything since v7.0. That said, usually the major versions do have some new major change, just to show that something major was added or changed.
This does take some of the ‘bang’ out of new major versions, but we believe it is a better strategy.
EDIT: This post was updated on 03/24/2015.