Our team is experiencing some growing pains with regards to source control. We use Team Foundation since it integrates so easily with our existing infrastructure, but are definitely open to other options. We deliver a software service to 15+ very different clients that require constant code updates. Right now, we have 3 branches: Development, Testing, and Production. The biggest problems we have are merging between Development -> Testing and Testing -> Production.
Our code is really a representation of business objects that are either shared between or exclusive to individual clients. Because a lot of the underlying code in our service is shared between many clients on many different versions, we constantly update our code to account for an endless list of ever-changing scenarios. Our clients will usually request a change and have that change deployed into production that week, so we have production deployments multiple times every week across clients.
We frequently encounter merge conflicts where two people made updates to the same file in either the development or test branch, and this generally causes us to need to manually merge the file into Test or from Test into Production. Unfortunately, simply enforcing check-out locks and preventing two developers from checking out and working on the same file is not an option for us because it would only create further delays and waste more time, the opposite of what we’re looking to do. We’re confident that another team has had similar issues and found a novel way to overcome this problem, and so we’d love to hear feedback on what we can do to improve our code management and development lifecycle while having minimal impact to our clients and, most importantly, our existing business process.
We are not able to operate by sprints, milestones or on a scheduled release cycle because the nature of our business requires updates to meet our clients' changing (i.e. by the day) needs. We understand that this methodology may break a lot of set rules when it comes to software engineering best practices, but most of this is mandated by the nature of our business. We’re a very successful organization, and our current method works – we just thought we should research if there are other methods for our unique model.