Sunday, April 17, 2016

The 4 pillars of DevOps


Evolved from the concept of continuous improvement of the software delivery process, DevOps is a movement focused on improving communication, collaboration and integration between the software development and IT operation teams. DevOps emphasizes on bridging the gap between these teams by focusing on delivering software faster, and creating a success metric based on how often they can release rather than on KPIs or metrics that are in conflict of each other’s interest or areas of work.

The DevOps movement is built around a group of people who believe that the application of a combination of appropriate technology and attitude can revolutionize the world of software development and delivery, where the goal is to improve the flow from development to operations by working together and understanding each other’s challenges. These goals are achieved by creating a set of practices and patterns around 4 main pillars namely:

Communication

To create better software and do better releases, the team needs to constantly communicate with each other from the planning to release phase to solve impediments and improve the quality of the release process. The team needs to be physically together and need talk to each other and continuously learn from each other during the process. The communication process is often facilitated with the support of tooling like Slack, Trello etc.

Collaboration

Collaboration is key for a true DevOps approach. Better collaboration between the dev and ops teams help them achieve a streamlined process which helps the team in
  • Better understanding of the target infrastructure and be well prepared with the changes in the product required for the changes in the infrastructure
  • Prepare the target infrastructure with the changes needed for the upcoming releases of the software to avoid delays in the releases due to challenges in the environments.

Successful DevOps teams work effectively with collaboration platforms like Yammer, SharePoint etc. to facilitate this process.

Automation

Automation is the heart of every successful DevOps transformation process and the single biggest enabler for DevOps. The success of DevOps lies in stable environments, consistent build and test process and happy releases. Automation can be used to make the release process more deterministic and to bridge the gap between development and production. Development teams can learn from operations the value of automation and how to create automation scripts to improve the overall process. Together the team is responsible for defining the desired state of the infrastructure and convert this to code.

Tools like PowerShell DSC, Chef, Puppet etc. can  be used to automate almost anything and everything that the team needs. During the process, the operations learn about version control, testing, CI builds etc. when working together with the development teams.

Monitoring

Monitoring in DevOps teams are required to provide crucial information that ensure service uptime and optimal performance. It's important to measure the progress of the approach to know whether teams are improving or making progress. With the support of proper data and metrics, it’s easy for teams to inspect the current way of working and come up with ideas or processes to improve the overall CD/ DevOps movement. Measuring the current capabilities and process helps teams determine the problem areas and defined focus points for making a change.


An important DevOps practice is to work with application monitoring and insights to enable full end-to-end traceability in a product to provide both operational insights and  usage understanding. Tools and technologies like ELK stack, Application insights etc. can be used for effective monitoring.