I am not sure if this is the correct place to ask my question. Please transfer it to the right forum if needed.
I have come across a real testing environment setup where we have SETS of environments QA (QA1, QA2, QA3), Stage(Stage1, Stage2, Stage3), Perf(Perf1). We have different versions of our product (customer facing app) in each environment. There are also back end apps and web services.
The strange thing is that QA environments share some (not all) of the backend apps/services/databases used by the Stage environment SET. As a result, if you want to test an app in QA, you need to know if its shared with Stage. Then you have to change your DB connections, endpoint urls etc. to point to the right environment. Eg. To test a QA service M which is shared with stage, you'll have to use a url for stage, not QA.
Of course, this can be frustrating initially. But, you once you know what is shared, its not so bad. But, I wonder if there can be any justification for a setup like this in a professional environment.
EDIT1 - Our revenues are in 100s of millions of dollars a year. Its good to minimize costs and be efficient, but I doubt that hardware costs are a problem for us. I have seen decoupled environments in companies with comparable net incomes. Never had any issues with urls and databases while testing in that other company.
EDIT2 - Can't we take a small subset of production data and put it into QA environment. This could help to reduce the hardware requirements/costs. Then, we could have an independent QA test environment. Edit- We will not use real customer data in test environment, we will either replace it with test logins and test information. We will only use publicly visible info.