DevOps – Let’s demystify!
Crime Scene:
Developers have adopted ‘agile’ methodologies and have added fantastic new features to existing application. They have closely worked with business to understand their requirements and have coded at phenomenal speed to deliver what business wants. They test it out in Dev and Quality environment. Quality Assurance guys and end-user tests the functionality. Everything works perfectly! Developers ask Operations team to deploy list of packages to production. Although skeptical, Operations team transports changes to production after green signal from QA team. Deployment is successful but 30 minutes later the system crashes! Operations frantically get into fire-fighting mode, revert changes and bring the system up and running. They still take about 15 mins to stabilize the system. End-users start grumbling – these IT folks always screw-up something! Déjà vu?
Partners in Crime:
In any IT setup, there are predominantly two teams – Development team aka BUILD team and Operations team aka RUN team. Developers/coders are part of the development team whereas System admins, DBAs, etc. are part of Operations team. Other group of IT professionals is the Quality Assurance group. Although development and operations are two sides of the same coin, their raison d'être is completely contradictory to each other.
Developers are more concentrated on architecting changes to existing business functionalities whereas Operations team strives hard to achieve stability of the system. For Operations team, any change in status quo equals potential instability.
WWW - What Went Wrong?
Although agile methodologies really compressed the software development cycle time, deployment of those changes is still a challenge. A lot of deployments fail in production environment due to incorrect deployment sequences or manual errors. Root cause of this roadblock is lack of co-ordination and collaboration between development team and operations team. It has been observed that more than 50% of the deployment failures are due to manual errors or incorrect deployment sequence. His is precisely why a lot of deployments happen only over weekends so that operations team gets enough time to troubleshoot failures / roll back to steady state. The code is rapidly developed but it stays stuck in transport queue due to long deployment schedules. This is where continuous development gets shoved into discrete delivery. End Result – Business still gets newer features after months!
The Way Out?
This is where DevOps comes to rescue. DevOps is condensed term formed from Development and Operations. If you conduct an open search, you would discover a resounding theme – DevOps is a cultural change. Although it sounds like a bombastic statement, it’s really the crux of DevOps. DevOps recommends stronger collaboration between Developers and other IT teams such as Admins and QA guys. But, how do you do that? Use tools that enable tighter collaboration between various IT teams. Eg. Notify QA team as soon as new version is transferred to quality environment. The other part of the problem is reducing manual errors by deployment teams. Again, technology is the savior. Deployment procedures can be automated with tools so that manual errors are eliminated. Further these tools are intelligent enough to handle various scenarios that may arise while deploying changes to production environment. Eg. Aborting long running thread, infrastructure monitoring, restarting certain servers, etc.
Benefits:
“All this sounds great, but What’s in it for me?” says business. If you successfully implement DevOps – benefits are immense! I’m enlisting few of them -
- Increase in deployment frequency. You can now realize continuous delivery
- Faster time-to-market for newer applications and features
- Reduction in deployment failures
- More stable operating environments
- And most importantly, less fights between Development and Operations teams!
I believe there’s lot more to DevOps than this candid post. Do share your experiences below!
Disclaimer: The views expressed here are of the author only and should not be treated as the views of the employer.
Vijeth Hegde
I am quite sure if we just want to implement and solve the agile approach on DevOps layers we make a huge mistake. Agile's final goals are completely different. Agile has to be an end-to-end product focus. DevOps is an integrated part of it and not a distinct collaborative silo within the product delivery.
Nicely put Nikhil. However, I would disagree with the statement "..precisely why a lot of deployments happen only over weekends so that operations team gets enough time to troubleshoot failures / roll back to steady state." Weekends are chosen for deployment coz 1) few customer/user affected during the deployment downtime 2) Less load on the server makes the job easier. And the difficult part to it is that it is quite painful at times to collaborate with the cross functional team in case of unforseen/unexpected issues during the weekend. Not everyone likes/enjoys to spend the weekend with office at home.
Absolutely Manoj. Apart from automation tools and on-the-fly provisioning of environments, an important enabler of DevOps culture is IT professionals with cross-functional skills. QA guys must be up-skilled to manage few aspects of coding. Similarly, developers need to understand how exactly is the code deployed in production environment. Throw-it-over-the-wall approach needs to change and this will take time. I would love to hear more from Practitioners.
Good one Surve. Now that most of the companies have sorted development side with agile methodologies, they are focusing on developing inherent instability capabilities in operation systems through mirrored systems, test environments on fly. Indeed, interesting times ahead.