Its 11:45pm on a Saturday evening and I’m waiting for the release of my application to the production environment. It was scheduled for 2:30pm but there was some delay with some other application. The production support team are almost ready to do my release but they have been saying that for 3 hours. Another torturous release weekend. It doesn’t have to be like this...
Having spent many years streamlining, standardising and simplifying complex deployment processes I have compiled a top 10 of best practises you need from a release process:
Automation. Reduce manual tasks to a bare minimum.
Audit trail. You need to be able to look back at who did what and when.
Visibility. You need to see what is happening now - to know the current status.
Promotional lifecycle. Only allow applications through the gate to the next level if they pass the tests.
Segregation of duties (SoD). Developers should not be gatekeepers to production. An access control mechanism should divide duties between different people or teams.
Reduce release notes to a minimum. The more steps in the release notes the more scope for human error.
Deploy with consistency across all environments. The first time you fully deploy your application should not in production.
Rollback strategy. Incase it all goes wrong you need rollback to the previous working version as fast as possible. In reality, what is usually employed is a partial rollback or an emergency release if the fault can be fixed quickly.
Deploy to the Disaster Recovery site. Frequently forgotten until its too late. Keep the DR site up to date. A flip-flop concept or a hot-hot concept will force this to be a priority and can work very successfully.
Keep it simple and keep it clean! Complexity is the enemy.
If you are lucky then you will have the time and personnel to redesign your entire release process end to end. In most cases the release process only gets attention when it gets really bad. Maybe the wrong application version is deployed or it doesn’t work as expected in production and the delays cross into the unacceptable. So the little resource that does get allocated to improvements needs to be well spent. A deployment tool that can be integrated in phases is essential.