Admittedly, some of the techniques that we use in some of our projects are behind the times, but we are trying to get our workflow more up to speed with best practices, or at least a practice that will work for us.
We are moving towards being more Agile and releasing new code (both new features and bug fixes) weekly.
Our current setup:
Trunk – this is where all new development and bug fixes are done. We have a very small team of three developers and we all work out of here.
Release – this branch always mirrors production. When we have code that is ready to go out (whether it be a new feature or a bug fix that is already in prod), it goes into this branch which is then pushed to prod during our next release window.
We also have two QA environments. DEV and TEST. First, our development must pass QA on DEV (which is the trunk). Once it passes here, that code gets moved into the Release branch and is then pushed to TEST. Only after an item passes in both environments may it be pushed to prod. This is where we get hung up sometimes as something may be in TEST but not actually ready to go out in the next release.. but since we publish from the test branch, we either need to pull the code out or deploy it anyway.
This is generally fine for us, but I'm just curious how others do it and how we can improve.