The Definitive Guide to DevOps
A Short History
In 2007, IT consultant Patrick Debois took an assignment with the Belgian government to help with data center migrations. Patrick is a systems administrator, project manager, and agile practitioner, whose role in the migration project was focused on certification and readiness testing. This required him to work with both the application development team and the operations team. His experience was difficult and frustrating because of the walls of separation, the lack of cohesion, and the constant conflict between the two teams. He hoped there was a better way and started to think about a solution.
In August 2008, Patrick met Andrew Shafer at the Agile Conference in Toronto, and they held discussions and shared ideas around the concept of an ‘agile systems administration.’ In 2009, Patrick saw a video of a presentation at the O’Reilly Velocity Conference presented by two Flickr employees. In that presentation, John Allspaw and Paul Hammond made the case that the only rational way forward to overcome issues between development and operations is for their activities and interaction to be seamless, transparent, and fully integrated. Inspired by the video, and with the support of others, Patrick formed his own conference called DevOpsdays in Ghent, Belgium. The term DevOps is a portmanteau, or combination of the words ‘dev’ for development, and ‘ops’ for operations.
DevOps and other terminologies
Patrick Debois may have been responsible for coining the term DevOps, but the concepts are rooted on known product manufacturing and business management principles, including total quality management (TQM). In broad terms, DevOps is an approach based on lean and agile principles. In this approach, development and operations, as well as quality assurance and other stakeholders (business owners, customers), collaborate to deliver software in a continuous manner. Their objective is to enable the business to quickly seize market opportunities and maximize the speed of its delivery of a product or service.
Other important terms are frequently encountered when discussing DevOps. Here are some of the terms that people need to be familiar with.
Agile – A software development methodology and philosophy that emphasizes rapid iterative development, user feedback, software quality, and flexibility to respond quickly to changes and new requirements.
Continuous Delivery – A software engineering approach in which software is produced in short cycles, ensuring that software can be reliably released manually at any time. It contrasts with continuous deployment.
Continuous Deployment – A software engineering approach in which software functionalities are delivered frequently through automated deployments. It contrasts with continuous delivery.
Continuous Integration – A software engineering practice of merging all working software copies to a shared mainline several times a day.
Continuous testing – A process of executing automated tests as part of the software delivery pipeline to obtain immediate feedback on risks associated with a software release candidate.
Deployment management – Planning, scheduling, and control over the movement of software releases in test and live environments.
Fail fast – A trial-end-error strategy that involves trying something, failing quickly, implementing feedback, and adapting accordingly.
The Benefits of DevOps
Implementing DevOps can produce several benefits. Technically, when the team uses continuous delivery, they are able to reduce complexity and quickly resolve problems. Culturally, the DevOps approach emphasizes collaboration. As a result, employees are happier and more productive, with increased employee engagement. Business-wise, organizations are able to maintain consistent service levels. This leads to improved customer satisfaction, reduced incident management costs, and increased efficiency. DevOps brings about:
- Enhanced customer experience
- Increased capacity to innovate
- Faster time to value
DevOps in detail
As mentioned, DevOps is an approach where business owners, development teams, operations teams, and QA collaborate to deliver software in a continuous stable manner. It streamlines software release cycles and improves software quality and security. It is a movement that improves service delivery agility in IT, and in the whole organization. Feedback loops enable dev teams and ops teams to get feedback early in the cycle. This minimizes release delays, and helps companies deliver the latest products to customers.
The goal of DevOps is to create a working environment in which building, testing, and deploying software can occur rapidly, frequently, and reliably. To completely achieve that goal, organizations must have a culture that promotes better working relationships within the company. It promotes communication and collaboration that unite separate groups, create interdependence and fluid communication among them.
The Need for DevOps
The business landscape is more competitive than ever. Companies pursue digital transformation strategies to become leaders, to disrupt their markets, or to remain competitive. There is a tremendous need for speed. IT is also undergoing a rapid change. Companies want to deliver functionality faster. For example, users are updating their mobile apps for new functionality on a daily basis. DevOps can solve this new requirement.
Any kind of system that needs rapid delivery of innovation requires DevOps. Moreover, a strong team of combined software developers and IT operations professionals can quickly identify problems and perform real-time system performance analysis to understand the impact of application changes. A DevOps team can resolve problems faster than separate teams of developers and operations teams.
Barriers to DevOps Implementations
Implementing DevOps has its challenges, as it can mean changing mindsets and practices in people. And even if an organization realizes the need to implement it, it can be a challenge to make it a reality because of lack of knowledge, tools, and/or capacity. Here are some of the top barriers to a successful DevOps implementation:
- Lack of knowledge to build a supportive DevOps culture
- Lack of test automation tools
- Lack of knowhow or alternatives in integrating new systems with legacy systems in organizations
- Lack of planning to account for application complexity or application architecture changes during deployment
- Missing an overall DevOps strategy, long term plan, or goals, and others.
The CALMS Solution
To overcome most of the barriers to implementing DevOps, people resort to the CALMS Framework.
Culture – The DevOps culture strives to remove walls and barriers between teams, so they can identify and address potential problems faster. A successful DevOps implementation starts with addressing culture.
Automation – Automation can help a DevOps team streamline its day-to-day tasks, and minimize downtime, outages, or other critical incidents. For example, automation can help teams eliminate manual configuration errors.
Lean – Lean principles applied to DevOps refer to striving for continuous improvement and accepting failure as part of a systematic approach to everyday operations. For instance, the importance of creating feedback loops and adaptation are core elements in DevOps.
Measurement – Measurement is vital for assessing the effectiveness of SOPs and identifying opportunities for improvement. With the right daily, weekly, monthly and annual metrics, teams can better understand its strengths and weaknesses, and explore ways to turn their weaknesses into strengths.
Sharing – DevOps teams operate in an environment where information sharing makes it simple for team members to stay updated on important issues. For example, they consistently share information to keep all team members informed about all aspects of an incident from onset to resolution.
Tips in Building an Effective DevOps Team
Adopting a new capability, such as DevOps, requires a plan that takes into consideration not only processes and technology, but people as well. Here are some recommendations to build a good team:
Start small and slowly – Develop a vision, identify goals, and map out the steps to achieve those goals. A slow and steady approach can minimize failures, be empowered by small victories, and develop the teams performance over time.
Promote a culture of learning – Build a DevOps team on a culture of learning and experimentation. Try new things even when there is a potential for failure. Experience and constant learning can be invaluable contributors to drive innovation.
Be ready to adapt – Organizations should be ready to adapt and provide the technology for their DevOps teams. With the right technology, they can then keep pace with the speed of evolving business.
Get organization-wide support – DevOps is complicated, so different departments should receive enough information about its importance and how to support it. If the DevOps team can receive organization buy-in, enough support, resources and budget, it can do its job well to make a difference.
Stop the blame game – Regardless of best efforts, incidents will happen, and can happen anytime. People should resist blaming any team, because a culture of cooperation and collaboration, as exemplified by the DevOps team, is the way to move forward. An organization that encourages a culture of learning from mistakes will be more resilient and agile.
DevOps can bridge the gap between siloed development teams and operations teams. A unified team can work better and faster, with increased productivity and efficiency. Ultimately, the culture of collaboration should go beyond the development-operations teams, and include other stakeholders.
DevOps did not come about on its own. It is a new solution to cope with other technology changes and consequent challenges that are happening, such as cloud technology, mobile applications, internet of things, and others. It is therefore important to keep a wider perspective.
DevOps and Agile are closely related, but they are not the same. They share the same goal of improved IT performance through rapid, iterative development of small software components. But DevOps can also use methodologies other than agile. While Agile addresses communication gaps between customers and development teams, DevOps addresses gaps between development and operations. Also, Agile helps in complex software development project management, and DevOps manages end-to-end software engineering process, including deployment.