You may not want to hear this, but there is no single best way. Having said that, I will tell you what we do.
We do nearly all development in the default view. When we are close enough to releasing one version of a product that we want to start working on the next version, whenever that happens to be, we make a derived view for the version to be released. The derived view is set to branch on change.
We continue development of both the version to be released and the next version in the default view. When there is a bug fix or feature which needs to be included in the version to be released, there are two possibilities:
- The only thing which has changed in that file is the bug fix or feature which we want in both the version to be released and the next version.
- There have been changes made to the file which are intended to be included in the next version, but not in the version to be released.
In the case of (1), we go into the derived view, right-click the file, choose Advanced->Behavior, and change the Configuration such that the file includes the changes we've just made. In the case of (2), we check the file into the default view (so that the changes will be included in the next version) and into the derived view (so that the changes will be included in the version to be released, and, of course, only including these changes), causing it to branch.
To be clear, we do nearly all of our work in the default view. We rarely have to manually branch or change the configuration of files in derived views, because we do not create the derived views at all until we are very close to release.
This is not too far from what you propose doing for your customers, but the important point is to work in the default view and avoid having to do bulk merges up or down into the derived views. StarTeam's view compare/merge tool is just not that great. (We are using 2005; it may have improved since then.)