I have gone through the TFS rangers guides before posting this.
I have the below requirement in our project:
Currently we have a code base in TFS under CODE, where developers code. The above is branched to DEV to mirror dev environment code DEV branch is branched to QA branch
In case a hot fix is required, then it is fixed directly on QA branch, and then later reverse merged to below branches.
This was fine till first time development, but I feel this needs to be re-structured to be better scalable for future release development.
Current issues:
Keeping all the above in mind, i am thinking of redesigning our TS branching stategy as depicted below:
As per this approach:
Development would happen on a dev branch such as DevRel1 branch only
If a developer needs to work on a big feature, he would work on a
branch such as Feature 1 branch, branched from Dev branch. On
completion he would merge back to dev branch.
Is this getting too complex? can it be simplified, does this look fine process wise, or does it need correction?
We are using TFS 2008 at the moment.
My advice would be to keep things as simple as you can. IMHO the main things to avoid are:
So you should definitely use branching to support your dev needs, but try to keep your scheme as simple as possible.
We use a similar, but simpler, approach to yours. That is:
Our other key strategies are:
Use Continuous Integration, Unit Tests, Regression Tests, Gated Checkins and continuous QA testing to keep the Dev branch as stable as possible. Our aim is that any daily build "should" be good enough to ship straight to a customer. In reality there are occasional short periods (a few days) where that stability is lost, but most of the time when these happen we are still within a few days of having a releasable build.
Defer making branches until absolutely needed. In TFS you can retroactively create a branch from any point in the codebase history. So when we are ready to start a release branch, we don't actually create the branch but just send the current release build to the QA department for testing. If they are happy with the quality of that build, it goes to customers as is, with no branch having been created. It is only when we need to fix a bug for that release that we actually create the branch (from the point in time where the original release-candidate was built, so we know it starts from the well tested code snapshot) and incur the (small) costs that entails.
As a side note, we also tried a Dev branch, with gated checkins to QA branch with gated checkins to Release branch, but this worked poorly (Primarily we found that it added a considerable overhead to all development. We like to check in frequently and the two extra test-and merge steps for every checkin are expensive. In the worst cases, if you delete, move or rename files in TFS it becomes very flakey and even simple merges fail - these are difficult and time consuming to sort out. We decided that merging in TFS is still not lightweight and robust enough to support this sort of approach unless you are prepared to invest a lot of time into managing the branches. On the other hand, if devs are careful with their checkins, there is far less need for such a "rigorous" approach. So we swapped back to the above lightweight approach, which increases the risks but minimises the need to merge - for us (with a smallish and disciplined/competent team) this approach works better.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With