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.
How did DevOps come to be?
DevOps is widely regarded as a natural progression of agile development practices and lean principles. As the values from both were applied to software development and project management, it eventually became apparent that the same values could be applied to IT operations.
What are Lean Principles?
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.
What is Agile Software Development?
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 gathering helped spawn the dozens of agile tools, methodologies and frameworks that exist today. Some of the more popular ones include Scrum, Kanban, Scaled Agile Framework® (SAFe®), and Extreme Programming (XP). Some are geared more toward project management and others are focused on developers and engineers, but these methodologies collectively aim to provide a framework for highly effective and efficient software development. The idea of incorporating iteration and continuous feedback into software development provides a vehicle to successively refine and deliver software. At some level, the methodologies involve continuous planning, testing, and integration as a means of continually evolve software projects and practices.
Where did the name "DevOps" come from?
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!
Goals of DevOps
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.
The Values of DevOps
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.
Heading Down the DevOps Road
Part of continuous improvement is introspection. How can we apply agile & lean principles to deployment and maintenance of the software?
What does your deployment process look like?
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.
Repeatable processes should be automated!
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.