I work at a major public academic health sciences center and have faced a similar challenge. We set up separate environments for development, test, quality assurance, production, and in some cases, reporting. It may seem like a lot of environments, but each one serves a critical purpose. Development is used to develop new applications and as an initial location to install a new commercial application and become familiar with the product and the technology infrastructure. Test is used by the development team to perform integration/system level testing/debugging. Quality Assurance is used by business analysts and end-users for user acceptance testing. Production is production. And, Reporting is used for ad-hoc reporting that would otherwise slow down the Production database. In some cases we host the application and database for an environment on the same machine when resources are tight, but otherwise we have a separate application and database server per environment. We have co-hosted two environments, like development and test, on the same servers when resources are tight too. The key is to provide separate environments to isolate development/testing activities and to allow separation of duties so that only developers can access development and test, business analysts and end-users can access quality assurance, production, & reporting, and change management personnel can access all environments to implement code and data changes as needed. I hope that this answers your questions.