Many news media reports about Devops cite a failure rate of 70%, or in some cases, a similar level of dissatisfaction that Devops has actually improved the development, deployment and operational management, of software and applications.  These statistics are however, misleading.  Devops is not a product, a brand, or even a certified method.  It is a philosophy of how to create code and build software applications.  It is thus elastic, mutable and prone to misuse and misunderstanding.  Quite often, Devops is simply not understood that well by firms who are supposedly engaged in Devops, and neither is it managed properly.

So what is Devops?

At its core as a philosophy, Devops is trying to achieve the following:

  1. Improvement of software quality
  2. Deploying metrics to measure quality, functionality and usability
  3. Ensuring that Production remains ‘static’, meaning you will not touch production until all code is tested and pass.  Everything flows through development.
  4. Reducing time to deploy new functionality
  5. Eradicating the silos of the development lifecycle namely, development, QA, deployment and operations
  6. Stopping the deployment new versions over a weekend and move into a continuous delivery cycle measured in days or weeks [or in the case of Netflix and Amazon, hours]
  7. Responding more quickly to business requirements and introduce a ‘fast failure’ development culture which feeds into learning and building quality into software development.

 

These 7 points are the essential aspects of the DevOps philosophy.  The goal of DevOps is to remove the inefficiencies that exist throughout the development, deployment, and operations pipeline, while promoting higher quality of operational code. Some of the traditional ways of developing, deploying, and operating don't hold up to the constant change that modern software systems undergo.

If we accept these main tenets, then a major aspect of the Devops philosophy is culture.  DevOps provides a better way to look at the development, deployment, and operations pipeline, through promoting a culture of collaboration.  A collaborative culture is empowered through the automation of the key aspects of building software.  Along with this automation, we also employ metrics to measure quality, successful deployments and to learn from failure. 

Devops has 3 main areas which form both the collaborative team, and the use of automation. 

  1. Development

Continuous Integration or CI

Jenkins

  1. Delivery of code

Continuous Delivery or CD

Jenkins for eg

  1. Operational Management

Infrastructure as Code or IAC

Chef

 

  1. A simple example of Continuous Integration or CI:

Imagine I am deploying an application written in Python used by the sales team.

 

  1. Continuous Delivery or CD:

CD means that we can ‘push a button’ and deploy code that has passed through the CI process.  My python code has passed and all bugs are now fixed in a continuous cycle as given above.  Now I want to deliver my code into the central repository for deployment.

 

Once the software is delivered, it will be operationalized and used within the infrastructure by a tool such as Chef.  Chef is a best of breed code repository which contains all the source code, which entails versioning and close control.  This allows collaboration and rollbacks to be effected easier and more quickly. Chef is essentially the configuration automation, deploying the application stack to the targeted server estate.  

Devops is thus the combination of a cultural change with automation.  It is a compressed lifecycle of development which attempts to professionalize and enhance software development quality.  This is what makes Devops hard.  It is as much a philosophy of being a professional, as it is a concrete path to enlightened engineering.  The benefits of Devops are many, but the failure rate with Devops is quite high. 

The main reasons why Devops will fail are the following:

  1. Skill base – you need to understand OOAD software principles and best practices in coding.
  2. No training on the automation tools such as Jenkins or Chef.
  3. You will need to know Python and Ruby.
  4. Devops is good for Cloud native applications, but maybe not necessary for all projects.  Make sure you need Devops and that it can help you with your projects. 
  5. Project Management and Change Management skills are lacking or in most cases non-existent.
  6. Agile or SDLC methods still need to resolve business requirements and this necessitates complete architectural, logical and code documentation.
  7. Culture.  Many firms have silos and the people in those silos do not want to lose power, control and relevancy.