Tuesday, October 11, 2016

DevOps – A Snapshot Overview

• At Agile 2008 conference, Andrew Clay Shafer and Patrick Debois discussed "Agile Infrastructure” in August 2008.

• At O’Reilly velociry conference 2009 , John Allspaw and Paul Hammond gave their now-famous talk entitled, “10+ Deploys a Day: Dev and Ops Cooperation at Flickr.” in June 2009.

• The term "DevOps" was popularized through a series of devopsdays starting in October 2009 in Belgium.

DevOps is a culture and practice that emphasizes the collaboration and communication of software development team, QA team and IT operations team while automating the process of software delivery and infrastructure changes. It aims at creating an environment where building, testing, and releasing software can happen rapidly, frequently, and more reliably.

Collaboration, automation, continuous integration, continuous testing, Continuous Delivery, continuous monitoring, and rapid remediation are common in all successful DevOps practices.

Common DevOps Steps & Activities


• Continuous Integration -

Changes are done in small increments and changes are immediately integrated to the larger code base as soon as they are done by the developers in CI practice. Each member of the development team integrates his/her finished code at least daily into the main branch of the code. Once integrated an auto build and auto test is run. Any issue reported in auto build and auto test is addressed by the developer immediately. Notifying the integration issue and fixing the issue subsequently is kept transparent in the team. The team communicates each other more frequently. Rapid feedback, resolving the integration issue early, frequent and open communication in the team enables the team to learn faster and deliver faster.

• Continuous Testing -

Continuous testing is not only a QA function. It starts early with developers delivering an error-free code. Development also helps QA team with test data preparation and configuring the test environment as similar to production environment as possible. Operation team being aware of production usages and loading of the application helps QA to build load and performance testing. Test environments are created and configured using virtualization eliminating the cost & schedule bottlenecks. Automated testing scripts are used as much as possible to speed up the continuous testing. Small changes are tested and deployed into live constantly and development and testing processes are refined through the continuous user feedback.

• Continuous delivery -

Continuous delivery is the next logical step of continuous integration and continuous testing where small incremental changes are pushed into production constantly. Rapid and constant feedback of end-user is used for the course correction. Real-time monitoring and rapid remediation are used to minimize the failure impact. Flagging technique is used to undo and redo the changes and introducing a large change into live environment on incremental basis.

• Continuous Monitoring -

The purpose of continuous monitoring is to detect the service unavailability quickly, understand the underlying reason, apply the learning to anticipate the problems before they occur and be ready with remedial actions. Continuous monitoring start at development by using the same tools to monitor development & QA environments what are used in production environment.

Automation should be used as much as possible in testing and deployment process using DevOps tool-chain. A successful DevOps requires business, development, testing and operation teams to play significant role in each phase of the application lifecycle. A healthy collaboration among these teams is essential in eliminating the unnecessary silos.

Scaling in DevOps adoption:

Success of DevOps adoption is dependent on transforming the culture of collaboration across the teams and quickly learning from rapid feedback and experimentation. Some common steps are -

1. Improvement in quality & speed of feedback to development & testing
2. Blameless postmortems of the issues
3. Reduce the time & resources in creating functionalities from start to complete
4. Improve the repeatability in build & test processes
5. Testing should be not only automated but analyzed also
6. Remove the duplication of work in development
7. Quality and speed in test data & test environment readiness
8. Seamless flow of features from development to live environment

No comments:

Post a Comment