Agile teams strive to find the best release organization that will help them to release quality products in relative short iterations.
Without claiming that there is a one holy grail for every team I would like to describe one of the best I have used in recent years
Here is a simplified diagram:
And below is some more details:
- Main branch is the place where developers integrates their stories and fix most of the bugs. Here also most/some of the testing is happening.
- There may be developers branches for more complex stories. However at the end they are merged in the main branch
- Release branch is the place from where the releases are done.
- Features complete(FC) milestone is important - at this point we are ready to (re)create our release branch. We need to have well defined FC criteria in order to be consistent in our releases. Here are some ideas for good FC criteria:
- Stories are tested and working for the main scenarios.
- There are no known P0 and P1 bugs
- Automation tests are stable and green
- When testing in the release branch and P0 and P1 bugs are found they should be fixed in both branches.
- When FC is achieved and testing is focused on release branch developers are free to work in the main branch for the next release. In the same time testers are having calm time without commits in the release branch(except for P0 and P1 bugs).
- Handling inevitable hotfixes. There 2 types of hot fixes:
- the one that occurs right after release and before next FC. This is easy to handle. Just fix the problem in the release branch and do the release.(This is hotfix in the above picture)
- the one that occurs right after FC and before release. This one is more complex because release branch has too many new things and may not be ready for release. In this case we need to recover tagged version of the last release and apply fixes there and then to return back to current release process. If we keep FC to release time shorter we can fully mitigate this type of hotfix.
So that is. It simple and it is working.