I think that for a dynamic account, which has a lot of cross company changes, the best practice is to have 2 sand boxes, DEV & UAT.
This way DEV will never change and will always hold the source code, while the UAT will always be a mirror of the production so that the QA will be near real.