Say you have a big bloat of enterprise software and for every customer a different setup in terms of amount of appservers, search cluster size, webservers, database, loadbalancers and application-related staging functionality (edit -> live systems).
Of course, you want to be as narrow as possible to your production environment within your UAT environment, where acceptance testing is done. Possibly you may want to do extensivly automated testing in this or any previous stage.
But, as a matter of fact, mirroring production like environments into testing stages is much to expensive, simply due to the resources necessary.
So my question is, if there are any good best practices to keep this gap between production and testing environments as small as possible, or good techniques to bridge that gap