DevOps surprises me as to how many different ways people interpret the term DevOps. When I talk to people from different teams, they have a variety of opinions or understanding of what DevOps actually means. Here are a few of them; DevOps is continuous Integration, continuous deployment and continuous delivery. Or DevOps is a team of developers and operations personnel, or DevOps is a cultural shift from waterfall to Agile, or DevOps is all about monitoring the team in an Agile world, Or DevOps is a movement, a philosophy, just a way of thinking to deliver the product differently, or, DevOps personnel can perform both Dev and Ops roles simultaneously and so on…
I have a different view of what ‘DevOps’ actually is. For me DevOps works on three core principles i.e. the 3Cs of DevOps:
Communication: Communication is the bonding agent that binds developers and operations, and other stakeholders in the entire process. Without a strong shared communication layer across the organization, DevOps becomes nearly impossible to achieve.
Collaboration: It emphasizes the performance of the entire system. Importance of collaboration is truly vital in an industry where they work in a distributed environment. It should be a natural formation of teams. If something goes wrong, it’s really easy to use that collaboration and relationship to actually bring a team together.
Culture: Creating a culture that encourages learning and understanding between stakeholders (business, development, operations, security, testing, performance engineering and other teams who all are involved in delivery).
At this point, to elaborate this further – I would like to mention an example from my past experience. After a critical production release – where there emerged some glitches – the blame game emerged. As many developers and multiple vendors were using this newly deployed backend feature, soon after the deployment – response time slowed down until the website stopped responding completely. The developers and vendors were panicking because this was one of the worst case scenarios. Developers started escalating saying this functionality was tested on all pre-production environments and worked perfectly fine on the environment, testing teams also claimed that this feature was working fine on all the lower environments hence it is the deployment issue, we (DevOps) claimed that we have just followed the deployment procedure and we are not the one who makes the configuration and other system related backend changes so it could be the backend issue, backend team blamed that their servers are working fine and working for other environments, so it could be the miss from the developers side that they have not packaged the correct version of configuration files.
Finally release manager decided that DevOps will have to troubleshoot this problem. After going through intensive round of troubleshooting we(DevOps) extracted tons of logs and came up with the conclusion that one of the backend service was down and in order to address the issue a restart of the service was required.
I think the above problem could have been shorted out promptly if the right culture had been in place in the organization, where everyone is committed to the success of the system not towards their individual performance and success.
I realized that rather than seeing these teams as different silos who keep on passing responsibilities to each other without any accountability for delivery, DevOps recognizes the interdependence of stakeholders and helps them deliver with a lower rate of failure.
Further, DevOps also helps in optimization with improved deployment frequency which leads to faster time to market, zero downtime and faster recovery.
Another popular topic whether Agile is equal to DevOps. My point of view on this is, DevOps came to compliment Agile, it acts as an enabler allowing DevOps to collaborate with teams to support a continuous flow of work.
In my personal experience, I’ve seen all of this to work only if the following attributes are inherited in true essence:
It is very important that the statement “It’s not my job” should be deleted from your vocabulary. That does not mean you’re going to assist everyone for every task. This is about either assisting, when you can, or pointing them to the right person who can.
You must be approachable. You must socialize with teams and work on issues together. Think of DevOps as a team sport.
In DevOps it is very important to place trust in your teammate’s performance.
Most important, “Think of Infrastructure as a code so that you can automate it”.
In order to change the overall culture of an organization so as to enable continuous assessment and dynamically adapt to the customer and market demands, the adoption of DevOps is critical. These 3 principles help teams to create a collaborative DevOps culture that welcomes and accelerates the overall delivery. If implemented properly, DevOps enables an early feedback from stakeholders to work into agile development, so that you can optimize competitive advantage and helps to improve customer satisfaction and revenue. By working collaboratively, stakeholders together can focus on various initiatives and stay ahead of competition.