Code freeze, in which no changes are permitted to a software system, is a policy often used to reduce risk. Any changes to code or configuration may have unintended consequences and introduce bugs. Code freezes help to ensure that the system will continue to operate without disruptions. They are for example commonly used in the retail industry during holiday shopping season when systems load is at a peak.
While reducing risk, code freezes also have negative consequences:
- Business agility is impacted as business is constrained in what they can ask software teams for during the code freeze.
- Time to market is elongated as feature deployments are delayed till after the code freeze.
- Software team productivity goes down. Any bug fix deployments are more time consuming while complying with the code freeze policies, code merges can become more complicate, system integration and QA of new features is disrupted or at least delayed.
- Subsequent release becomes more risky as a larger backlog of features gets deployed after the code freeze.
This begs a question. Can code freezes be avoided? The answer is yes. State of the art is continuous deployment – multiple production releases a day, five days a week, every week, i.e. no code freeze required.
Code freezes can be eliminated if there is a high level of confidence that software deployments will not have unintended consequences. This requires:
- Comprehensive test automation including unit, integration and performance testing.
- Diligent code reviews.
- Zero downtime release process. This requires particular attention to any database changes.
- Robust monitoring with warnings issued when system’s health deteriorates but well before it becomes a real issue, and critical alerts sent when the system requires immediate attention.