If you have the letters “IT” in your job description, you have probably worked with programmers, web application developers, and DevOps experts, but have you ever wondered what it really takes to make a DevOps project successful? Here’s a brief primer on DevOps.
DevOps is more than software development practice. It’s an umbrella term that denotes an application development culture. As the name implies, DevOps is a combination of development and operations. Originally coined by Patrick DuBois in 2009, DevOps encompasses people, tools, and processes to enable better collaboration and automation in enterprise software development.
The term DevOps has evolved from a loosely defined buzzword to a universally recognized approach to promoting efficient enterprise application development. Gartner defines DevOps this way:
DevOps represents a change in IT culture, focusing on rapid IT service delivery through the adoption of agile, lean practices in the context of a system-oriented approach. DevOps emphasizes people (and culture), and seeks to improve collaboration between operations and development teams. DevOps implementations utilize technology—especially automation tools that can leverage an increasingly programmable and dynamic infrastructure from a lifecycle perspective.
There are a number of buzz phrases in that definition, but the key points are that DevOps emphasizes agile software development and a collaborative culture that brings together operations and development teams.
Agile Software Development
Agile software development was designed to be, as the name implies, agile, adjusting to changing application requirements. Rather than working to one predefined software specification, agile software development creates applications in increments, testing and adapting code at each step to meet newly defined needs.
The agile software development approach was created specifically to promote collaboration across cross-functional teams, such as development and operations. Each stakeholder in an enterprise development project has different criteria and priorities, and those criteria often change rapidly. By using an incremental development approach, team members perform adaptive planning, continuously improving and testing an application to accommodate evolving requirements. Agile software is adaptive (as opposed to predictive), with each new code iteration written and tested to accommodate changes. The result is an evolutionary code development process that encourages early delivery and continuous adaptation and improvement.
More than an approach to coding, agile development is a mindset with its own set of values that define a new approach to application modeling, emphasizing:
- Individuals and interactions. Agile is built around collaboration, so it is better to have individuals communicating throughout the process than teams working in isolated silos. Collaboration is central to agile processes.
- Provide working software. Rather than presenting documents for clients to review, comments are made in the code itself to minimize external documentation. This makes it easier to track and document changes in a rapidly evolving software project.
- Customer collaboration. While every project outlines requirements at the outset, those requirements change. Involving the client and end users in the development process provides immediate feedback to guide iterative code development.
- Response to change. Agile software development methods respond to changes in scope and functionality, continually evolving and improving.
Since DevOps is collaborative across cross-functional teams, DevOps processes are structured to be cross-functional as well. Rather than using a single set of tools, there are multiple toolsets designed to promote collaborative, iterative software development.
There are seven stages in the software development and delivery process:
- Plan: Define the business value and application requirements. This involves a variety of IT personnel, including the application owners, software architects, security professionals, and the team responsible for maintaining the IT infrastructure.
- Create: This includes building and coding the application, and configuring the software development process.
- Verify: Testing and quality control is part of each development cycle, including acceptance testing, regression testing, security analysis, and performance testing.
- Packaging: Following testing, each software build is made ready for deployment. This step, also referred to as staging, requires approvals and steps to prepare for release. These first four stages are part of application development, the “Dev” of DevOps.
- Release: This is a transitional stage that hands the application from development to operations—“Ops”—for evaluation.
- Configure: Operations assume responsibility for IT provisioning and configuration.
- Monitoring: Once the software is released, it has to be monitored to understand the impact on end users, including performance problems. Feedback is offered to inform the next software release.
A Day in the Life
What does a day in the life of a DevOps professional look like? It mostly consists of coding, building, testing, deploying, and retesting. Since DevOps is an iterative process, there is a lot of back and forth assessing each code configuration and deployment, fixing bugs, defining the next iteration, and testing.
Successful DevOps relies on maintaining a collaborative culture committed to continual improvement. It requires embracing agile development values and practices, as well as automated coding and testing tools. It also requires a commitment to shared responsibility, where everyone takes an active interest in project success, without finger-pointing. Feedback is also highly valued to identify problems and suggest improvements.
At the same time, a DevOps culture promotes autonomous teams. To maintain tight production schedules and fast turnaround on code changes, developers and operations staff have to be able to make strategic decisions in the moment, without waiting for a lengthy chain of decision.
The benefits of DevOps are the focus and flexibility it brings to any project. Increased communication and collaboration make it easy to implement changes without losing sight of the project objective. It also tends to promote a culture of trust between all parties involved. This makes it easier to experiment with new ideas and apply new methodologies that could yield better results. Just ask anyone involved in DevOps.