Development > (deploys to) Test > UAT/Regression Testing > Production
So how do you coordinate multiple developers working on multiple projects at different stages of release? One way we make this easier is with the concept of packages. Whatever you develop in development can't make it out of development until it is packaged into a release candidate. This packaging could be merely conceptual or you could actually move files around, but a package is generally defined as the set of data, metadata and bi objects for this application. (this includes all database changes, etls, OLAP objects, scripts, etc for that version of the application to function in production) This candidate can then move through the other environments and eventually into production, but only that package. Any failures in the testing stages, for example, would need to be addressed in Dev and promoted as a new package. This also lets me know what's in what environment as I can refer to them as packages (HR v1.2.1 is moving to test, Accounting v1.0 is moving to production, etc). We do some other neat tricks for version management with subversion tagging, documentation and a change control software for Cognos items called Motio, but this is the heart of my change management procedure. Only whole packages can move out of development or into the next stage! Here's what that workflow might look like.
In my next post I'll talk about the numbering scheme I use for packaging. Hold on to your seats!