Developers and operations commonly have opposite goals – developers are required to build things and deliver change, while operations keep things running smoothly. DevOps aims to bridge this gap by creating a culture of collaboration and interdependence among developers and operations through increased transparency, communication and shared processes.
As Einstein famously said, “The definition of insanity is doing the same thing over and over again and expecting different results.” Throughout the DevOps journey, processes are transformed to make it easier for teams to collaborate, and adopt practices such as Continuous Integration, Continuous Delivery, and Continuous Testing to ensure fast and consistent software delivery.
A better definition of insanity, as far as we’re concerned, is doing the same thing in different ways and expecting the same result!
Continuous Integration (CI) is a software development practice in which developers frequently integrate the changes they make to code in a shared code repository – often several times per day. Each change is then tested and verified by an automated build, instantly identifying and alerting you to any errors. The goal of CI is to increase the efficiency of development teams by making it easy to identify errors and conflicts as early as possible in the life cycle.
While Build Automation platforms focus on automatically producing executable code from source code, they fall short of extending this into the deployment stage as they lacks any built-in understanding of deployment packages, environment targeting or customisation. Deployment Automation tools, on the other hand, deal with the deployment of this executable code to the end-user. The steps involved in a Deployment Automation pipeline are more complex than those in Build Automation, since its requirements are fundamentally different to those of Build Automation pipelines.
The consumerism of IT has led to an increase in the demands on IT to deliver change not only faster but more frequently. Rather than releasing every few weeks or months, companies are releasing changes daily. Amazon deploys changes every 11.6 seconds. Consequently operations engineers have to provision and maintain more environments with more instances than ever before, and being able to provision consistently and validate as quickly as possible is vital. Infrastructure automation entails capturing and managing the configuration of your infrastructure as code, and versioning those configurations in the same way that you would code. This makes configuration management an easy to manage, automated process.
Test automation increases the volume of testing that can be performed in the same period of time and the consistency of execution. Test automation software controls the execution of tests and the comparison of the results with the forecast. Every build should be run through a set of tests, and the more complex the build, the more intensive testing should be. Automated test suites should be comprehensive enough to leave you confident in the quality of software being released. This is particularly critical with continuous deployment where successful test execution triggers automated deployment to production.
Application Performance Monitoring, or APM, is the practice of routinely making sure that the software you develop works as it should, both in terms of quality, performance and scope. Application monitoring software gives you the critical data you need, when you need it, to isolate and fix problems in your code. By unifying the data from your various monitoring in a centralised correlation engine and dashboard, your IT staff can eliminate error-prone, repetitive manual tasks and focus on delivering software that your end-users love.