What is DevOps?
It is easy to take today's rapid development processes for granted. Highly complex hardware and software systems can be designed, built, and deployed in a matter of weeks — even days. But it is only within the last 10 years that practices like DevOps and continuous delivery have made this possible. Many slower-moving or large enterprise organizations are still in the process of embracing these types of workflows.
At its core, DevOps refers to an approach to software delivery characterized by automation, a shortened systems development life cycle (SDLC), and deep collaboration between development (dev) and operations (ops). As an IT practitioner, you may have received a mandate from the executive team to undergo a "DevOps transformation."
The aim is to make software development more flexible, continuous, and cohesive. The ideal result is delivering features and updates reliably and at scale. Shorter feedback loops mean faster iteration — ultimately bringing more value to customers. But DevOps is not just a process or technology change.
It is a shift in organizational culture and cooperation. So unless the executives are technically savvy (lucky you), they likely do not understand the complexities that DevOps encompasses. This is why you need to be able to communicate all that DevOps entails when your executive team asks how the organization can move to a DevOps way of working.
The history of DevOps
DevOps evolved as an extension of agile development. As technology rapidly advanced, software development teams moved from releasing large, monolithic applications that were updated once or twice a year to iterative, incremental releases. Waterfall-style project management no longer fit with this quick style of building and agile emerged as a counterpoint. But it was operations teams and system administrators that pioneered the practices that would become emblematic of DevOps, including configuration management and automated deployments.
In 2010, early DevOps adopters John Willis and Damon Edwards developed the acronym "CAMS" to describe DevOps values:
Culture: Cross-functional alignment between development and operations
Automation: High degree of automation and repeatability, including treating infrastructure as code, to deliver faster, more reliable software and to reduce manual errors
Measurement: Objective metrics such as deployment frequency, lead time, and mean time to recovery (MTTR) that improve the software delivery life cycle
Sharing: A shared set of goals, tools, and processes across all teams responsible for releases — development, operations, quality assurance (QA), and security
These values have endured — more and more organizations are adopting DevOps practices to accelerate application and infrastructure development and to improve collaboration on the IT team.
What is a DevOps culture?
The emphasis is on collaboration. In some organizations, development and operations teams work in silos. Developers build an application, then hand it over to operators to test and release. The operations and QA teams identify errors and bugs and pass back a list of issues to repair. Rinse and repeat, as the teams work on opposite sides of the proverbial (or literal) wall.
In this siloed model, the two teams have conflicting incentives. Developers are measured by how quickly they deliver new code — with less concern for quality. Operators are charged with maintaining environmental stability — with less concern for speed. Mismatched objectives contribute to friction between the teams.
In contrast, DevOps requires collaboration from developers, operators, QA testers, and security teams throughout the entire software development process — from code development to deployment to monitoring. This is where the fundamental DevOps concept of “shifting left” comes in. Together everyone focuses on quality and speed from the start. Teams are testing and identifying issues early, as well as continuously deploying updates.
DevOps practices, such as continuous integration and deployment, are characterized by these attributes:
Iterative: Applications are built and improved incrementally, with new features and changes released frequently.
Modular and lightweight: Applications and infrastructure are developed with small, loosely-coupled components, such as microservices, which offer flexibility and speed.
Portable: Services can be run across a variety of software platforms and hardware devices, both on-premise and in the cloud.
Ephemeral: Components, such as virtual machines and containers, can be spun up and down on an as-needed basis.
Extensible: Through the use of APIs, software can be easily integrated with other services.
Self-service: Engineers can deploy and monitor their own code updates without relying on the operations team.
The focus on all of the above improves code hygiene so that applications and infrastructure are more scalable, responsive, and resilient. And teams have compatible goals and shared ownership — leading to a higher level of accountability and trust.
The benefits of DevOps
Of course, the benefits of DevOps extend beyond improving internal processes and relationships on the IT team. Ideally, DevOps improves customer experiences too. Higher-quality code released more often means customers receive better features and functionality. And with more time to innovate, IT teams can deliver even more value to customers.
Productive and happy development teams use Aha! Develop to customize the way they work. Sign up for a free 30-day trial to discover all you can do with this fully extendable agile development tool.
- What is agile software development?
- What is an agile roadmap?
- Common agile development methodologies
- Agile vs. lean
- Agile vs. waterfall
- What is the Scaled Agile Framework®?
- Best practices of agile development teams
- What is unit testing?
- What is DevOps?
- What are some DevOps best practices?
- DevOps and "continuous everything"
- What is an agile retrospective?
- Introduction to agile metrics
- What is a burndown chart?
- What is agile transformation?
- What is issue tracking?
- What is the role of a software engineer?
- Agile glossary