In our IT dept we develop multiple systems in parallel, the systems are deployed to different environments, and they talk to each other using SOAP and REST. It's all ASP.NET but we're not in the cloud. I'm trying to find a way of streamlining environments to reduce complexity.Simplified view, let's say there are 3 systems in production: A,B,C. They communicate like this:Prod: A 1.0 => B 1.0 => C 1.0We mirror that in a test environment like this:Test: A 1.0 => B 1.0 => C 1.0If there's an urgent production bug in B, we would make a fix to B and deploy it to the test environment. Test: A 1.0 => B 1.1 => C 1.0and if integration tests pass we can release it to production:Prod: A 1.0 => B 1.1 => C 1.0Now let's say we develop a new feature which means A and B both need to change. Both A and B are being deployed to test.Test: A 2.0 => B 2.0 => C 1.0During this development period, if an urgent production bug is found in B, we would have to make a fix to B and deploy it to test environment:Test: A 2.0 => B 1.2 => C 1.0Obviously this is shaky ground now because the test environment does not resemble production. And what about when B 2.0 has a breaking change - in this case the A 2.0 will fail when pointing to B 1.2.So what we've done is create another environment for emergency fixes, called Patch. So we can have:Test: A 2.0 => B 2.0 => C 1.0Patch: A 1.0 => B 1.2 => C 1.0Now A, B and C each have different delivery cycles, so what tends to happen is that at different stages of the project, the Patch environment is abused in order to test different versions of each component for the current release or for the next release. We end up doing crazy stuff like pointing Test A to Patch B, or pointing Patch B to Test C. And this obviously generates huge confusion. Not to mention that this is a massively simplified version, in reality we have at least 8 systems involved here, with 6 environments. The TeamCity summary page is like spaghetti junction. Also some environments talk to each other (in my example above it would be like A => B => C => A).Please help me understand how this type of scenario can work.
Strategies to manage unruly system environments
deployment;configuration;release management;environment