DevOps can mean different things to different people and this can make it a difficult topic to explore. Here we will give a quick overview of the origins of DevOps, discuss some predecessors and examine what DevOps practitioners can hope to achieve.
Toyota’s influence on automotive manufacturing can’t be overlooked. Their idea of “improvement kata” gave way to the idea of continual improvement of daily work, among other things. As the ideas of Lean were further refined, the Lean Enterprise Institute was founded and they arrived at what they refer to as the 5 key principles of Lean: value, value stream, flow, pull, and perfection.
While the values behind the agile movement aren’t new, they weren’t really codified until a group of developers gathered at The Lodge at Snowbird in Utah to put their thoughts together and create what is The Agile Manifesto. The Manifesto is a lightweight set of values & principles credited with dramatically increasing productivity within software development organizations.
This talk at O’Reilly’s Velocity Conference is considered to be the initial genesis of concepts behind DevOps. Later in 2009, the first devopsdays event was held in Ghent, Belgium which further helped establish the term. As discussions on Twitter progressed, the #DevOpsDays hashtag was eventually shortened to #DevOps. A movement was born!
In order to be competitive in the marketplace, organizations are looking for ways to improve deployment frequency, achieve faster time to market, minimize issues with new releases and shorten lead time between releases. Investing in and implementing a DevOps strategy across your organization can help you reach those goals.
It's not all about the stakeholders, though. Developers value fast feedback, working iteratively and improving continuously. They want frameworks that enable seamless communication with stakeholders throughout all phases of a software development project, from planning to development to delivery. A successful adoption of DevOps practices can help achieve these goals.
Like the Agile Manifesto - which expresses values in terms of “this over that” - the practice of DevOps has roots firmly planted in a specific set of cultural ideals. Many of those ideals are very similar to those in the agile community. When you take agile practices and apply them post-development, you begin to build cultures that value and enable increased collaboration, shared knowledge and responsibility, autonomous teams, improved quality, frequent feedback and increased automation. Tools that support this kind of culture generally include configuration management systems, automated test systems, build/compilation systems, deployment tools, virtual infrastructure and monitoring systems.
Part of continuous improvement is introspection. How can we apply agile & lean principles to deployment and maintenance of the software?
How do your project teams get their code off of their laptops and onto servers, or onto the desktops of testers? Think about how many steps it takes. Are all of those steps necessary? Are any steps missing? Introspection of your processes goes a long way here.
We can’t overstate the need to automate repeatable processes. There is no real business value in having your engineers manually deploy code, configure servers or perform other housekeeping operations every time there is a new release for testing or production. Your developers should be concentrating on the hard problems! What about getting a server for your web application? How many weeks - or months - does that take?
Humans will make mistakes. It happens. So why do organizations insist on having large teams of people that do nothing but manually provision environments for software projects? How many times has a server been configured only to realize that the associated software doesn’t "work quite right?" Computers are very capable of handling repetitive tasks the same way every time. This is where Continuous Integration and Continuous Delivery come in. Also, Virtual Machines, Containers and Infrastructure as Code provide better automated ways to manage your computing infrastructure without needing constant human intervention.