Whether you are in the IT sector, you have heard of DevOps regardless of your role. It’s the buzzword (just like Agile was at the time), and every organization wants to embrace this new concept. However… Are we prepared? Do we know what DevOps is? Do we know how to obtain the benefits that DevOps gives us? In today’s post, we will provide an external review of this not so new concept and what DevOps practices we can (or should) carry out to grow in this direction.
DevOps, beyond a culture
Let’s briefly recall what we understand by DevOps. If we go to the semantic part, the word DevOps is a combination of two words in English: Dev (development, development) and Ops (operations, operations), referring to breaking the classic silos in which development teams and teams of operations (where the tasks of integration, deployment, maintenance, etc. typically fall) forming a single approach: DevOps. A new system where people, technology and processes come together with a single objective: to constantly offer value to users or customers.
Is it a new team then? No, it is a change of culture, of doing things. You have to change the system for this to happen. The collaboration of traditionally separate teams (development and operations) is sought where there are no barriers. To do this, we must embrace this new culture of frequent delivery to the user through collaboration and use of DevOps practices and tools such as continuous integration, continuous delivery and those that we will see next.
Today’s post will rescue some of the most widespread and shared DevOps practices in the IT sector. Of course, any new practice that helps us improve and add more value to the user can come under this umbrella:
Let’s say that I, as a developer, have finished the code for a feature. And at the same time, the rest of the people on my team have also been developing, with which new code has been generated. How do we make it reach the user without breaking anything? Do we wait until the developments are ready in flight to launch it? According to DevOps, this is where continuous integration comes in. There are many tools today that allow us to integrate changes (if possible small), guaranteeing optimal levels of security and quality, in such a way that, in our example, as I finish my code, it could be integrated directly without causing a significant problem.
Another of the objectives of continuous integration is the prompt detection of errors (Lean already told us about this using the Poka-Yoke technique). And how do we get this? When we talk about integration, we talk about the compilation and the execution of automated tests of the entire project or software. Therefore, it is essential to keep these test batteries consistent and up-to-date, ideally at high coverage levels.
DevOps advocates delivering sooner rather than later. And small pieces of code. As long as we are aligned with the business strategy, the possibility of producing and deploying in a productive environment (or not) in an automated way will be enabled. Without having to wait for other developments or manual deployments. The certainty that the delivery we make has passed standardized test controls, eliminating the probability of failure.
Currently, thanks to Cloud technology, it is pretty easy (and profitable) to automatically set up and dismantle test environments on-demand on which we can, apart from unit tests, be able to launch load, third-party integration or security tests. All this, like continuous integration, has the objective of delivering as soon as possible, but with zero surprises, to ensure the quality of what is offered and increase our frequency of deployments. Our system is the best guarantee of success.
Logging and monitoring
To ensure we can safely integrate and deliver as often as possible, a critical DevOps practice is logging our software activity (whether web apps, mobile apps, or a simple blog like the one you’re reading). Why? To be able to monitor everything. As Lean tells us, this will allow us to anticipate possible problems and solve them before reaching the end-user. Also, we can see load levels, system scalability, etc.
The objective is to be able to have complete supervision in real-time. This last aspect is crucial since it implies real-time supervising the entire process (from development through deployments and the status of the applications and infrastructure involved). This also means creating a system of thresholds and alerting for the most critical points to anticipate problems at any time in the process, whether in pre-production environments or, of course, production.
Infrastructure as code
Although it is a slightly more advanced and complex practice to implement than the previous three, it is a practice that contributes a lot. The idea is, just as with code, we have a version control system that we can “play” with. We should also be able to do it with infrastructure. The idea is to build systems on-demand with versions that interest us in being able, for example, to test, analyze, review and, of course, reverse it just as we would do with the code.
In subsequent posts, we will expand with more complex practices to implement and, although less widespread; they will help us on our way. Finally, remember that, even if we have systems that embrace the above practices, DevOps is nothing without a culture that supports it. Communication and collaboration are the central focus of the teams and the people that comprise them.