Three System Environments
- DEV - Contains latest code with a copy of production data. Shared sandbox for our developers.
- TEST - Contains copy of production code and data. Used as staging area for monthly service release, user training, and for troubleshooting current production issues.
- PROD - Production code and data.
Two Code Branches
- develop - Latest developer tested code deployed to DEV environment.
- master - Current code deployed to PROD environment.
Early this year, we successfully transferred the code base / maintenance responsibility from the vendor to our team. We loaded the system's code base into Git and as per best practice, isolated the current deployed production code (master branch) from the ongoing development work (develop branch). We use the centralized workflow model on the develop branch and the dictator (Deployment Manager) model on the master branch. This is done as per the long-running branches workflow described in Pro Git.
Developer Procedures
- Monthly Deployment Schedule - The big picture (see previous post).
- Commit Guidelines - Timely commits to Git with well formed commit messages.
- Standard Coding Deployment Workflow - Coding in the develop branch and DEV environment.
- Version Numbering - Numbering to fit our processes.
- Request Workflow - Working with the IT Request System.
The procedures are simple one page guides (KISS). They're designed to keep us (about nine of us developers) from stepping on one another and to minimize management overhead. Please note that these procedures continue to evolve to fit the unique and dynamic characteristics of our team / project.
So putting it all together, we have developers making incremental commits (1) to the develop branch for the upcoming monthly production release. Then monthly, the Deployment Manager updates the master branch (2) with that month's service release. Occasionally, the Deployment Manager updates the master branch (3) with an urgent hot fix from the develop branch code stream.