Branching advise for Modular development

Dec 17, 2012 at 3:33 PM

Hi guys; read the documents and they were very helpful. We have some heated discussion on the best way to revamp our branching strategy and wanted to find out how the experts were doing it. ;)

We are using TFS 2010 and mostly C# development.

Current setup: Under the project we have:

Dev-branch\ (where development of new code takes place, SME verification etc)

AIT\ (intial branch from Dev-branch, we now merge items from Dev to here by work item. We build this nightly and our internal QA group uses it to verify Tasks are done, Bugs are fixed, etc)

UAT\ (branch from AIT, merge by work item from AIT to here once the WI has been verified in AIT branch. This environment is built twice per week and deployed to machines for the end user to test. Typical UAT environment)

Problem List: Since it takes awhile sometimes for the Devs to complete work items and get approved sometimes we end up with smaller tasks ready to go up before the larger piece is complete. We almost have to (and sometimes do) merge only the particular changeset associated with the work item [cherry picking] but of course this causes alot of problems later on with dependencies not in place, etc. Alot of times a Task will work in DEV, AIT but not work in UAT. The Dev is very modular with gui typically first then backend services and DB work done. Also we are coming to the end of the development for this project (2-3 months) and will be in Bug Fix mode from then on.

Given all of that what is the best way to create a new branching strategy to stop our issues but will allow us to merge modular development up as needed. Any ideas is much appreciated. If you need more info I will be happy to help. Ive typically worked as ConfigMgr for Agile teams; this style of development is different than what Im used too. Also we did not use TFS work items from the beginning. We imported a spreadsheet into TFS as Tasks and use Bugs...nothing on a higher level.

Dec 18, 2012 at 4:09 PM


One possible solution is when you run into those smaller type tasks you are referring to is to cut a feature branch to handle those.  You could branch out 1 feature branch (call it "Misc Features" for this example) which would give you the isolation.  You could then move those in a single changeset upstream to UAT or main, eventually deploy, etc and continue work normally on the Dev branch at the slower rate.

Remember in TFS you can always branch "on demand" or as needed from an earlier changeset/point in time.  If it was the norm that I had a subset of smallish tasks that I wanted to bundle, I might introduce the branch in play full time though.