A recent post, highlighting some best practices for DevOps, caught my attention. While the author made some very valid points, and shared some smart ways to ensure DevOps success, I tend to disagree with the way some of these practices were prioritized.
The author outlines the best practices in the following order:
Active stakeholder participation,
Integrated configuration management,
Integrated change management,
Integrated deployment planning,
Application monitoring and
Based on my experience, for the same reasons the author ranked Automated Testing higher than Continuous Integration, I strongly believe that practice #9, Application Monitoring, must take a higher priority over practice #7, Continuous Deployment. This is the only way to ensure that changes across the environment – both to software applications and the back-end databases that support them – are fully synchronized.
The DevOps approach is centered around smaller, more frequent rollout of changes, designed to minimize risk and increase efficiency. But, in order for these quick deployments to be smooth and seamless, developers must:
- Know what changes have been made
- Understand the reasons behind each change (which are typically stored in third-party change management systems)
- Have the ability to resolve conflicts (which often occur due to the competing priorities of Development and Operations teams)
- Be able to deploy specific changes based on user stories
These capabilities are usually in place for those who manage changes in software application environments, but are often lacking in database change management scenarios. I’ve always felt that a big contributor to this “gap” were DBAs who fail to follow version control methods because of time constraints or technical challenges.
But the growth of DevOps presents a great opportunity to bridge the gap between application development and database development. The best way to accomplish this is with a database change management solution. Such tools will help incorporate database change processes into application lifecycle management, ensuring that both database development and source code development are well synchronized and coordinated.