DevOps: Beyond CI/CD

DevOps: Beyond CI/CD

CI/CD has added considerable value to software development life cycle, perhaps it has become synonym of DevOps. However, DevOps is a more holistic approach to consistently deliver value to customers with shorter feedback loops. I will cover brief history of DevOps and CAMS model - coined by John Willi and Damon Edwards in this article.

History

Value stream, a Lean concept, is a set of activities performed to deliver value to customer. Software Development value stream broadly contains activities like requirement gathering, development, testing, deploying on production and support.

Initially, Agile movement was mainly focused on Business working closely with Development team to deliver value by iterative and incremental approach. The other part of overall value stream i.e. Operations and Infrastructure, was not given required focus. So the Operations became bottleneck in overall value stream. With "Agile Infrastructure" and "Agile System Administration" were being discussed in 2007-2008, Patrik Debois coined term "DevOps" for seamless integration of Development and Operation to deliver value to customer working as one team.

Unlike Agile, DevOps does not have set of values, principles precisely defined but over a period of time number of thought leaders in this field have contributed to define DevOps practices and values. John Wills and Damon Edwards have defined CAMS model highlighting key areas required to implement DevOps in any organization.

CAMS stands for Culture, Automation , Measurement and Sharing. Let's explore each area in detail.

Culture

Identify and implement processes and practices for seamless integration and collaboration between Development and Operations functions. Such as:

  • Define common set of goals for entire team instead different goals for Development and Operation. e.g Optimizing time to deliver a feature on production i.e. from requirement gathering to deploying feature on production for customer use.
  • Ensure shared understanding of common goals among all team members
  • Involve operations team members early in development life cycle during architecting and designing solution. This helps to discuss and consider views of operations' team members during design e.g., Logging, Need of alerting, ease of troubleshooting etc.
  • Ensure various operations tasks like infrastructure provisioning, configuration etc. are also part of product backlog and discussed during daily standup
  • Adequate amount of visibility of production logs, metrics to development team members which helps for quick troubleshooting and for solution designing
  • Encourage culture of ownership and problem solving by constantly raising bar

Automation

Automate entire value stream for reliable and repetitive delivery of product. This automation can be achieved by CI/CD practices like:

  • Appropriate branching strategy
  • Smaller commit to avoid issues encountered during merging
  • Automation of static code analysis and unit test cases
  • Build once and deploy everywhere. Same build is deployed on different environments like Development, QA,UAT and production. In order to achieve this, externalization of system configuration is required.
  • Automation of acceptance test cases
  • Automation of performance, security test cases
  • Infrastructure as Code(IaaC) i.e. Automation of infrastructure provisioning and configuration for all environments like Development, QA, UAT and Production.

The implementation of CI/CD practices will largely be depend on Business context and skill set available but it definitely helps, with adequate implementation, to ensure quality and reduced delivery time.

Below diagram gives overview of continuous deployment pipeline.(source: Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation by Jez Humble and David Farley)

No alt text provided for this image

Measurement

Define and capture metrics for entire value stream and optimizing entire value stream as a whole (One of the Lean principles - Optimize a whole). The metrics captured over a period of time helps to identify issues and bottlenecks and help to improve overall value stream.

As show in above deployment pipeline, each stage generates metrics which further can be utilized for continuous improvement. Some of the basic metrics are:

  • Code quality: Tools like SonarQube help to define quality gate. Also, peer code review is very important to ensure code quality
  • Unit Test: Quality of unit test cases can be enssured during code review. The code coverage gives idea of percentage code covered by unit test cases
  • Acceptance Test: Number of test cases passed vs failed. Capturing number of test cases automated vs manual testing helps to further improve on automation of acceptance test cases
  • Open/Close Defect rate: It helps to identify number of defects closed against raised. It also helps to identify whether unit test cases, automated acceptance test cases requires modification to ensure defects are minimized at the source.
  • MTTR (Mean time to repair): Average time to fix failure of system/application. The lower the number is better
  • MTBF(Mean time between failure): Average time between failure of system/application. The higher the number is better

Alerting along with metrics is also equally important to ensure required stakeholders are informed for anomalies and prompt actions are taken.

Sharing

Encourage open and transparent communication to for greater visibility of overall progress across the team. This helps to ensure entire team is working towards common goal. This can be achieved by:

  • Giving visibility of all important artifacts i.e. reports, dashboards etc. to entire team
  • Establishing effective communication channels. e.g. slack channel for entire team and integration with various tools for alerting

It also emphasizes on knowledge sharing and shorter feedback loops. Both help to correct and improve continuously.

Summary

Before DevOps, Development and operations were usually setup as two different functions with both having their own set of processes and practices defined which led to various challenges. DevOps emphasizes on effective collaboration between development and operation to achieve common goal of delivering value to customer consistently.

References:

  • DevOps Fundamental course on Linkedin by Ernest Mueller and James Wickett : This course gave me holistic view of DevOps
  • The Phoenix Project by Gene Kim, Kevin Behr, George Spafford: It's a very interesting book written in novel form. It not only emphasizes DevOps need in organization but also covers many other aspects of Lean , Theory of Constraint and few nuances of Management. Really nice read!
  • Continuous Delivery by Jez Humble and David Farley: This book covers all practices and principles to achieve continuous delivery.
  • Patrik Debois explains mental model of DevOps in this blog
  • DevOps history
  • These articles (article 1, article 2) give overview of various tools available to implement DevOps practices.

To view or add a comment, sign in

More articles by Sejal Desai

  • Estimation Techniques

    I have outlined product development phases recommended by Disciplined Agile Delivery & different models to capture…

    2 Comments
  • Product Development: Requirement Modeling

    In my previous article, I covered the overview of Scrum, XP and Kanban and some key learnings. These frameworks mainly…

  • Scrum, Kanban & XP: Overview, Interesting Facts & Key Learnings

    In this article, I will cover an overview of Scrum, Kanban & XP. Also, I will share some interesting facts I have…

Others also viewed

Explore content categories