What is DevOps?
DevOps = Development + Operations
DevOps = Development + (Testing + Release)
DevOps refers to an Agile practice in which development, testing and release can happen quickly, frequently and reliably.
Fundamentally, DevOps is the communication and collaboration between Product management, Development teams and the Operations team.
DevOps as a concept originated from the topic of “Agile Infrastructure” presented by Andrew Shafer and Patrick Debois in 2008. DevOps has gained popularity in recent times as more organizations adopt Agile Software development. One of the fundamental characteristics of Agile is iterative, incremental and short-cycle product development. DevOps has also grown in popularity with the proliferation of Cloud and virtual infrastructure.
Imagine a work environment in which software is being produced every week. This means an iteration or version needs to be released or deployed to the production environment every week. If that sounds far-fetched, then how about many environments that produce daily builds of software (Mobile Apps). Some cutting-edge organizations also release multiple builds into production every day. As beneficial as daily or weekly builds would be to the business, it would also be a nightmare to manage this process without a supporting culture and environment. This is where DevOps helps.
Goals of DevOps
Improvement of deployment frequency (from months to weeks to days)
Faster time to market (Accelerated Product Development)
Lower failure rate for new releases
Short lead time between fixes
Faster mean time to recovery (in System crashes)
What is driving DevOps?
Increasing use of Agile Software development approaches
Demand for an increased rate of production releases – from application and business stakeholders
Growing availability of virtual and cloud infrastructure that be scaled easily
Increasing data centre automation and configuration management
Increased automation of testing and continuous integration
Availability of best practices in DevOps
Core practices of DevOps
A fundamental characteristic of DevOps is to perform very frequent but small and incremental updates to software that are also less risky. An overview of the important DevOps practices is provided below;
Continuous integration is a software development practice where developers regularly merge their code changes into a central repository, after which automated builds and tests are run. The key goals of continuous integration are to find and address bugs quicker, improve software quality, and reduce the time it takes to validate and release new software updates.
Continuous delivery is a software development practice where code changes are automatically built, tested, and prepared for a release to production. It expands upon continuous integration by deploying all code changes to a testing environment and/or a production environment after the build stage. When continuous delivery is implemented properly, developers will always have a deployment-ready build artefact that has passed through a standardized test process.
Microservices architecture is a design approach to build a single application as a set of small services. Each service runs in its own process and communicates with other services through a well-defined interface using a lightweight mechanism, typically an HTTP-based application programming interface (API). Microservices are built around business capabilities; each service is scoped to a single purpose. Different frameworks or programming languages can be used to write microservices and deploy them independently, as a single service, or as a group of services.
Infrastructure as a Code
Infrastructure as code is a practice in which infrastructure is provisioned and managed using code and software development techniques, such as version control and continuous integration. The cloud’s API-driven model enables developers and system administrators to interact with infrastructure programmatically, and at scale, instead of needing to manually set up and configure resources. Thus, engineers can interface with infrastructure using code-based tools and treat infrastructure in a manner similar to how they treat application code. Because they are defined by code, infrastructure and servers can quickly be deployed using standardized patterns, updated with the latest patches and versions, or duplicated in repeatable ways.
Monitoring and logging
Organizations monitor metrics and logs to see how application and infrastructure performance impacts the experience of their product’s end user. By capturing, categorizing, and then analysing data and logs generated by applications and infrastructure, organizations understand how changes or updates impact users, providing insights into the root causes of problems or unexpected changes. Active monitoring becomes increasingly important as services must be available 24/7 and as application and infrastructure update frequency increases. Creating alerts or performing real-time analysis of this data also helps organizations more proactively monitor their services.
Communication and Collaboration
Increased communication and collaboration in an organization is one of the key cultural aspects of DevOps. The use of DevOps tooling and automation of the software delivery process establishes collaboration by physically bringing together the workflows and responsibilities of development and operations teams. These teams set strong cultural norms around information sharing and facilitating communication using chat applications, issue or project tracking systems, and wikis. This helps speed up communication across developers, operations, and other teams like marketing or sales, allowing all parts of the organization to align more closely on goals and projects.
Challenges impacting DevOps
DevOps is more than just a process or practice. It is an Agile mindset that needs to deal with and overcome conflict between various teams. The “Development” team seeks and thrives on change. The “Operations” team seeks stability. The “QA” team seeks reduction of risk. Obviously, “Change”, “Stability” and “Risk minimization” are all conflicting objectives. Getting these teams, with conflicting objectives, to work together is the biggest challenge for DevOps.
DevOps environments seek to achieve business objectives by automating and monitoring the process of software integration, testing, deployment and infrastructure changes.