One lesson of modern architectures (i.e. anything more recent than the LiveJournal-style Web/App/DB 3-tier stack) is that it is literally impossible to create and maintain a test environment that has enough similarity to prod to be useful.
One lesson of modern architectures (i.e. anything more recent than the LiveJournal-style Web/App/DB 3-tier stack) is that it is literally impossible to create and maintain a test environment that has enough similarity to prod to be useful.
So, I wouldn't use the word "lazy", but we could do better.
Not saying it's impossible, just not always feasible to have it actively "perfect".
I've found that an "ok" testing envrionment and solid unit testing / monitoring tends to do better.
And then b/g deploys and canaries :/
Building this out twice is either actually impossible, or so cost prohibitive as to be practically infeasible.
A lot of modern architecture is not like that.
And even the diagram there is something should be possible to replicate if the organization values it.
Today it doesn't even need to be too expensive as it can be deployed with terraform and torn down an hour later when the full system tests are finished qnd go back to running the integration tests.
Testing in prod means accepting this reality, avoiding the largely unproductive toil of building and maintaining a staging env, and making the production system observable, resilient, and operationally agile enough that you can deploy changes that can trigger unpredictable and emergent system behaviors while managing risk appropriately.
Most codebases are build and operated by 1-3 teams and if you are not able to reproduce your prod env as a test env, your architecture is broken.
Modern architectures look like this: https://github.com/donnemartin/system-design-primer
It is generally not feasible to recreate all of the elements of this design in a totally separate testing environment.
We have 2 GCP accounts. One for production and one for test. Same Setup, not an issue due to terraform and the cost is reasonable for a test env.
(Rhetorical questions. Of course the answer is no.)
All of these things have huge impact on the actual similarity of the systems, and consequently how they behave.
If it wouldn't make sense for us to have test and prod, we wouldn't do it but i can't imagine a scenario where this is NOT beneficial.
All of the pieces have complex and emergent behaviors as they interact with each other. Many (most?) are hosted, not even fully in control of the team using them. Recreating this environment in a hermetic way for testing is either actually impossible, or so cost prohibitive as to be practically infeasible.