I'm slowly going to be running a series of posts on running Concrete5 through multiple environments. There are many challenges to running a CMS in shops with strict development practices.
One of the challenges that immediately comes to mind is the ultimate need to create a release flow that affords you a stable production instance.
Smaller organizations tend to be limited on resources or talent and find themselves developing on the production server.
Most medium to large organizations soon desire to have more transparency in the development environment. They want to weigh in on technology and implementation decisions and ensure that stable products are released.
One of the first things you can do to improve your development environment is to create a multi-staged environment. Creating a good mutli-staged environment affords you a place to develop, a place to iterate and finally a place to serve production code. This generally involves providing an interface for changing settings between environments.