# DevOps

## Summary


DevOps is the coming together of both development and operations teams into a coordinated workflow such that collaboration and productivity are improved to meet shared business goals. Building on Agile and Lean, DevOps enables the business to respond to changes and meet customer needs faster. Tools and automation are necessary enablers. Practices such as Continuous Integration and Continuous Delivery are often followed. 

Traditionally, products were monolithic in nature and release cycles were long. While developers focused on creating working software, it was operations who (manually) ensured that it could run in a production environment. Dev was all about adding new features. Ops was about stability and availability. Between these two were the testers. DevOps brings these teams closer so that releases can happen as quickly as necessary. 

DevOps has been described variously as a culture, a mindset, a framework and a movement.

## Discussion

### How did DevOps come about?

Until early 2000s, software release cycles were typically long. Even if developers could churn out features quickly, business folks would be wary of changes since software was considered brittle and deployments risky. At the same time, user expectations and competition forced vendors to consider shorter release cycles. Agile and Lean methods were used to do this. Even then, making frequent releases on a monolithic product was a challenge.

What really changed the scene was the arrival of cloud computing, SaaS and microservices. Products were delivered as web services and later as a bunch of microservices. This enabled vendors to make faster releases at the microservice level. But deploying a networked service is the work of operations, who were mostly ignored by the Agile and Lean movements. The result was that software that was ready would not go to customers until weeks or months later, waiting for operations to ensure it works properly in production environment. Also, operations now had to worry about security, virtual machines, containers, scaling, and more. It was no longer plain system administration for operations. DevOps has come to address these challenges.


### Can you define DevOps?

There's no single definition of DevOps:

    + DevOps is a cultural, professional movement focused on how we build and operate high-velocity organizations, born from the experiences of its practitioners.
    + DevOps is largely founded in an organization’s skillful collaboration and communication, and the culture that results.
    + DevOps is the practice of operations and development engineers participating together in the entire service lifecycle, from design through the development process to production support.
    + DevOps is ops who think like devs and devs who think like ops.
    + The point of dev-ops is that developers need to learn how to create high-quality, production-ready software, and ops needs to learn that Agile techniques are actually powerful tools to enable effective, low-risk change management. Ultimately, we’re all trying to achieve the same thing – creating business value through software.
    + The Devops movement is characterized by people with a multidisciplinary skill set - people who are comfortable with infrastructure and configuration, but also happy to roll up their sleeves, write tests, debug, and ship features.

### Could you dispel the common misconceptions or myths about DevOps?

DevOps is not just about using tools or automating processes, although these are important. DevOps is not just about people, culture or processes. DevOps requires all of these to work together. 

DevOps goes beyond just developers and operations. It requires support and alignment from sales, marketing and even executives. 

Having someone attend a DevOps conference or bringing a DevOps "expert" into your team doesn't make a project "DevOps compliant". For that matter, DevOps is neither a standard nor a specification. There's no certification to recognize DevOps experts. DevOps is really driven by practitioners and could be considered a knowledge-based movement. It's always evolving.

DevOps is not limited to using open source software. It does not eliminate IT operations (NoOps) or replace Agile. 

Continuous integration/delivery are not goals themselves. They're simply necessary steps in achieving DevOps goals. Neither is there a goal to make multiple releases per day or week. DevOps aims to release as often as necessary. 

DevOps is not just for web companies delivering SaaS products or companies working at scale. DevOps is for everyone. 


### Can you list some best practices for getting DevOps right?

Although DevOps is not a set of practices, the following may help newbies get into the DevOps movement: 

    + DevOps is about People, Process and Tools, in that order. Starting with tools will be the wrong way to do it.
    + John Willis gives us the CAMS formula: Culture, Automation, Measurement, Sharing. Again, culture is critical to successful DevOps. Everything needs to be automated and measured. For measurements, establish KPIs. Mean time to recovery is an example KPI.
    + Empathy is important to understand needs, break down silos and bring various teams together.
    + Start small on something strategic and then apply it on a large scale across the organization.
    + Invest in tools that give real-time visibility. Tool integration is essential. Multiple tools that don't work well together will hamper collaboration.
    + Increase the speed of deployment. To achieve this, invest in automation and practise Agile techniques.
    + Participate in community events and online channels to share and learn.
    + Improve feedback at every step, whether it's build, deploy, recovery or notifications.

### Can you describe some common DevOps terms?

Here are some terms often used in the DevOps world:

    + Feature switch: Ability to turn on/off features at code level and thereby facilitate Continuous Delivery.
    + Trunk-based development: A version control practice in which all changes go into trunk rather than isolated branches.
    + Container: An isolated environment at OS level where microservices and applications can be deployed and executed more reliably.
    + Shift left: Automated testing is built into the software methodology from the outset. The same can be done with deployment.
    + Orchestration: Method to manage and deploy applications and containers.
    + Staging: An environment that mimics production environment so that updates can be tested before going into production.
    + Deployment pipeline: An automated pipeline to get software quickly from version control to users.
    + Serverless: An architecture in which resources are allocated on demand without explicit server management.
    + Microservices: Smaller manageable pieces of an application accessed via standard interfaces.
    + Immutable infrastructure: Infrastructure that can't be changed once initialized for better robustness and reliability.
    + Infrastructure-as-Code: Describes automated provisioning, configuring and monitoring of infrastructure.

### What tools can facilitate DevOps implementation?

There are dozens of tools out there to automate every aspect of DevOps. These are commercial or open source. As of July 2017, some tools were considered indispensable: Ansible, Docket, Chet, Puppet, JIRA, Jenkins, New Relic, Visual Studio, etc. XebiaLabs curated a list of 100+ tools arranged as a "periodic table". They also published a list of open source tools. 

Since tool integration requires effort, some vendors offer suites of integrated tools. This can cause problems. Errors in them will propagate through the entire lifecycle. For example, throwing generic errors, tighly coupling pipeline stages to environments, showing ambiguous status or using terminology in the wrong sense can all be problems for a DevOps culture. Instead, adopt single-purpose, focused tools that use open standardized API. 


### How is DevOps related to Agile and Lean?

It's been said that to deliver quality products we need all three: Lean concepts, Agile practices, and DevOps mindset. DevOps is an extension/adoption of Agile because what Agile does for development and testing, DevOps does for operations as well. Agile is a powerful tool that operations can use. Agile was about automating build, test and delivery. DevOps extends automation to deployment. 

Lean focuses on end-to-end flow to address bottlenecks and wastages. Lean is also about early product validation via customer feedback. Agile on the other hand employs various techniques to build products faster. DevOps uses Agile practices but also talks about how to integrate, test and deliver the product into the hands of users. 

Just grafting operations to an existing Agile development process is not DevOps. Having a DevOps team separate from the development team creates silos and this goes against the spirit of DevOps. The Agile process has to be rethought to include operations from the outset. Theresa Neate put it nicely, 

> When you have a #DevOps team, you are not doing devops.


### Are there any specializations of DevOps?

**DevSecOps** attempts to bring security aspects into DevOps. With the growing importance of data analytics, especially in real time, **DataOps** attempts to apply DevOps to analytics and enable better data-driven decisions. While DevOps has been proven for individual applications, will it work for enterprises that use hundreds of diverse applications across private/public clouds and on-premises? This is being addressed by **BizDevOps** that's more operations focused and has less tolerance for risk taking. When it comes to collaboration, **ChatOps** is a model based on conversations to bring together tools, bots and people for transparent workflows. **NetOps** tries to achieve agility in operations without sacrificing availability. When IT operations are completely automated, though not eliminated, we have **NoOps**. Cloud providers offering PaaS ease so much of day-to-day operations for their users that they tend to use the term NoOps as augmenting DevOps. 

## Milestones

2006

Even before the term DevOps is coined, some companies start practising it. In an interview, Amazon's Werner Vogels states that their developers are also looking after day-to-day operations, interfacing with customers and collecting direct feedback. The goal is to improve quality of service. 

Aug  
2008

At the Agile Conference in Toronto, Andrew Shafer calls for a session titled "Agile Infrastructure". Only one person, Patrick Debois, attends this. He later meets Andrew and they together form the "Agile Systems Administration Group". 

Nov  
2008

Eric Ries refers to Steve Blank's book titled "The Four Steps to Epiphany". The basic idea is to release early a minimum set of features to the customer, get feedback, validate product-market fit and iterate quickly. This was the start of the Lean movement and had an influence on DevOps. 

Jun  
2009

At the O'Reilly Velocity conference John Allspaw and Paul Hammond present 10+ Deploys a Day: Dev and Ops Cooperation at Flickr. Debois watches this from Belgium. Inspired by this, Patrick Debois organizes DevOpsDays in Ghent, Belgium in October. By the time the event ends, twitter hastag *#DevOps* becomes commonly used, giving the movement its current name. 

2010

DevOpsDays is organized in Sydney, California, Hamburg and Sao Paulo. This is also the year when Jez Humble publishes his well-known book titled "Continuous Delivery". 

2014

Enterprises start adopting DevOps.