Definition in depth
The term DevOps is being used in several ways. In its most broad meaning, DevOps is an operational philosophy that promotes better communication between development and operations as more elements of operations become programmable. In its most narrow interpretation, DevOps describes the part of an organization’s information technology (IT) team that creates and maintains infrastructure. The term may also be used to describe a culture that strategically looks at the entire software delivery chain, overseeing shared services and promoting the use of new development tools and best practices.
The best way to define it in depth is to use a parallel method to the definition of a similarly complex term, agile development.
Agile Values / DevOps Values
Individuals and interactions over processes and tools
Working software (service or software fully delivered to the customer ) over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
Agile Principles / DevOps Principles
Our highest priority is to satisfy the customer through early and continuous delivery of valuable functionality. (more general than “software”.)
Software functionality can only be realized by the customer when it is delivered to them by sound systems. Nonfunctional requirements are as important as desired functionality to the user’s outcome.
Business people, operations, and developers must work together daily throughout the project
Simplicity–the art of maximizing the amount of work not done–is essential.
Agile Methods / DevOps Methods
Scrum with operations, Kanban with operations.
Agile Practices / DevOps Practices
Continuous integration and continuous deployment, configuration management, metrics and monitoring schemes, a toolchain approach to tooling.
Agile Tools / DevOps Tools
Jenkins, travis, teamcity, configuration management (puppet, chef, ansible, cfengine), orchestration (zookeeper, noah, mesos), monitoring, virtualization and containerization (AWS, OpenStack, vagrant, docker) and many more.
it’s incorrect to say a tool is “a DevOps tool” in the sense that it will magically bring you DevOps
Under a DevOps model, development and operations teams are no longer “siloed.” Sometimes, these two teams are merged into a single team where the engineers work across the entire application lifecycle, from development and test to deployment to operations, and develop a range of skills not limited to a single function
History of DevOps
Some relevant points:
2007: Patrick Debois, a software development consultant, had a goal of learning all aspects of IT. He worked as a developer, network specialist, system administrator, tester and project manager. Patrick had always been bothered by the differences between how Dev and Ops worked, but he became particularly frustrated with the challenges of managing work across the two groups on this datacenter migration. Continuous integration was gaining popularity in the agile community and was moving Dev closer to deployment, but there was still nothing out there that fully crossed the divide of Dev and Ops.
2008: Andrew Shafer posted an idea for an agile infrastructure “birds of a feather” session at the Agile 2008 Conference. Patrick Debois saw the post and went to the session. Unfortunately, he was the only one who showed up. The idea was so poorly received that Andrew didn’t even show up to his own discussion.Andrew and Patrick decided to start a Google group named Agile System Administration.
2009: John Allspaw, senior vice president of technical operations at Flickr, and Paul Hammond, director of engineering at Flickr, gave a presentation at the O’Reilly Velocity Conference in San Jose, “10+ Deploys per Day: Dev and Ops Cooperation at Flickr.”
DevOpsDays, in Ghent, Belgium. [Patrick Debois]
What is DevOps Not?
It’s Not NoOps: It is not “they’re taking our jobs!”. some parts of operations need to be automated, that means that either we ops people do some automation development, or developers are writing “operations” code, or both.
It’s Not (Just) Tools: DevOps is also not simply implementing a set of tools. A tool can be useful in Agile (or DevOps), but if you don’t know how to use it then it’s like giving an assault weapon to an untrained person. (principles)
It’s Not (Just) Devs and Ops: And in the end, it’s not exclusionary. Some people have complained “What about security people! And network admins! Why leave us out!?!”. DevOps is a major step for one discipline to join in on the overall culture of agile collaboration that should involve all disciplines in an organization.
It’s Not (Just) A Job Title: Simply taking an existing ops team and calling them “The DevOps Team” doesn’t actually help anything by itself. Nor does changing a job title to “DevOps Engineer.” If you don’t adopt the values and principles above, which require change at an overall system level not simply within a given team, you won’t get all the benefits.
One fundamental practice is to perform very frequent but small updates.
Continuous integration is a software development practice where developers regularly merge their code changes into a central repository, after which automated builds and tests are run. The key goals of continuous integration are to find and address bugs quicker, improve software quality, and reduce the time it takes to validate and release new software updates.
Continuous delivery is a software development practice where code changes are automatically built, tested, and prepared for a release to production. It expands upon continuous integration by deploying all code changes to a testing environment and/or a production environment after the build stage. When continuous delivery is implemented properly, developers will always have a deployment-ready build artifact that has passed through a standardized test process
Microservices architecture is a design approach to build a single application as a set of small services. The microservices architecture decouples large, complex systems into simple, independent projects. This architecture reduces the coordination overhead of updating applications.
Infrastructure as code is a practice in which infrastructure is provisioned and managed using code and software development techniques, such as version control and continuous integration.
Communication and Collaboration, increased communication and collaboration in an organization is one of the key cultural aspects of DevOps.
BizDevOps (Business, Development and Operations), also known as DevOps 2.0, is an approach to software development that encourages developers, operations staff and business teams to work together so the organization can develop software more quickly, be more responsive to user demand and ultimately maximize revenue.
Decouple feature rollout from code deployment
Non-Technical + Technical Coordination
Faster, More iterative software delivery