How to save valuable time with DevOps
There is no unique definition for the term DevOps, as it has many concepts associated with it. But our focus today is how to save valuable time with DevOps.
What is DevOps?
Let’s go right into the fray: there is no unique definition for the term DevOps. As with many words that pop into the moving landscape of technology, DevOps can mean many things: reduced downtime and human error, iteration, scalability, and, ultimately, the blend between software development and IT operations. Did you see that, Googlebot? I put all the keywords upfront. Now let me explain it as a human.
DevOps is a set of practices combining software development (Dev) and IT operations (Ops). The idea behind this work philosophy is to remove the barriers between teams inside the same organization by automating manual processes that free up time for employees to communicate fluidly.
DevOps strives for a set of goals, mainly reducing the systems development life cycle, providing continuous delivery, all with high software quality. Researchers suggested defining DevOps as "a set of practices intended to reduce the time between committing a change to a system and the change being placed into normal production while ensuring high quality." But you know the thing with definitions, they change according to whoever is using them.
DevOps finds its roots in practices such as the Plan-Do-Check-Act cycle, The Toyota Way, and the Agile methodologies. The first conference using the name was DevOpsDays in Belgium in 2009. Many believe that DevOps practices gained popularity as a method created by software engineers for software engineers, providing a flexible approach instead of a rigid framework.
The DevOps lifecycle
We have said it before, and I will say it once again: one goal of DevOps is minimizing the system development life cycle while keeping a constant flow of new features, fixes, and frequent updates. With this kind of approach, we can aim for high-quality software quickly and reliably. Throughout development, various stages are needed, such as continuous development, continuous integration, continuous testing, continuous deployment, and continuous monitoring. How many continuous did you count?
The planning and coding phase. Continuous development needs a clear vision of the project, and here is where many decisions are made. Regardless of the language you code in, you will be using version control tools and leading source code management. At this point, you are probably using JIRA, CVS, SVN, Git, or Mercurial.
Tests and bugs are everyone's least favorite things, unless you are a entomology student. Continuous testing relies on automation testing, looking at tools like JUnit, TestNG, or Selenium. Quality Assurance (QA) is essential. You would never send a product full of errors, wouldn't you? I am looking at you, triple-A games…
While automatically testing multiple versions in parallel, Docker containers can simulate the test environment. When the tests are over, reports are generated automatically—a blessing to understand what went wrong.
Testing, developing, integrating! After testing, the code follows its path to continuous integration, the core of the DevOps lifecycle. This step implies that developers commit changes to the source code more frequently. Before, you might have waited weeks or months until committing changes; with DevOps, you might be looking at weekly or daily commits.
These early commits lead to builds making it possible to detect errors quickly. That also requires code review, unit testing, integration testing, and packaging, prompting a repetitive analysis of your code. In this way, continuous integration creates small changes continuously, releasing new functionality and following an iterative process. It also means that changes are perceived smoothly by users. Before, revolutionary system changes were put in place once or twice a year. Now, you have several minor tweaks implemented at the same time.
Showcase time! At this stage, code is deployed to the production servers accurately. With continuous deployment, you keep configurations consistent across servers, and you automatically set scheduled updates.
Continuous deployment uses containerization tools to maintain consistency across environments where the application is deployed, tested, and developed. With the use of containers, you save the trouble of dealing with the production environment with standardized packages: exactly like with physical containers! Yay, a connection to the real world!
Stay vigilant. Continuous monitoring seems a forgettable step in the DevOps lifecycle, but it could not be more crucial. At this stage, you must record vital information about your application performance to identify your errors. Without a clear understanding of what is going on, a change of direction would be impossible. Imagine driving your car without any feedback from the machine; that would be pretty hard. Now picture a spaceship; that could be more appropriate for the level of complexity we are talking about.
If all of these DevOps stages are carried out properly, the cycle can begin again, and you can restart the whole process. As with many myths like the Journey of Ra, the sun carriage of Helios, or the Course of Sisyphus, the story never ends. It only iterates to a new and updated version.
DevOps and human error
Human: a term that is often forgotten when talking about technology or business. That may change by how they are perceived—users, consumers, testers—or by what they do—developers, writers, optimizers. The DevOps culture considers the different organizational cultures out there and predicts performance in the IT and Dev sectors. What does it do? DevOps provides a human-centered approach to prevent human error.
Many fear automation. With machine learning on the rise, no job seems secure from the grip of the machines. (I don't want to create panic with a Skynet-meets-Blade Runner dystopian future or a fully automated luxury space communism.) We should keep Amara’s law in mind: "We tend to overestimate the effect of a technology in the short run and underestimate the effect in the long run.” In DevOps, even if we have seen a rise in the automation of many processes, some people will see the potential loss of jobs, while others will bask in the increase of productivity. The answer might not please any of the involved.
It is true. DevOps automates many manual and repetitive tasks that people do. And yes, you might argue that these people will not be doing those tasks anymore. But, will they be fired? Not necessarily. As machines replace humans in menial labor, those same workers (especially IT specialists and developers) have more free time to acquire further knowledge and get involved in new tasks. So people won't lose their jobs, which is a good thing, but there will be a shifting landscape in which employees and employers have to establish a contract where constant innovation and education are the cornerstones.
Where there were many complicated repetitive tasks, now there is a robot: an algorithm that never makes a mistake and never succumbs to human error. While this seems ideal business-wise, think twice before crossing out a human from your spreadsheet. As Asimov points out in his most famous saga, Foundation, there will come a time where no one will know how to do things, how to fix such robots, how to fix the robots that fix the robots. And if you are not familiar with science...no, there will never be a perpetual machine. That is why, even with the perspective of introducing error, humans are needed in the equation, be it DevOps or any development culture.
How a Software factory uses DevOps: reduce downtime, iteration, and scalability
We are what we repeatedly do. Excellence, then, is not an act, but a habit.
— Will Durant, not Aristotle
You may have read our post about the software factory; if not, here is a quick summary. After the revolution in automobile production by Henry Ford, and the subsequent revolution in architecture by modernists like Le Corbusier, every industrial process started a path focused on automation of the repetitive steps and deep knowledge of the daily problems. Following the industrial trend, software factories came to life.
These companies, like ours, have a purpose in mind: standardization of software production. They see software as problem-solving machines. With the use of recipes, templates, and reusable code, they foster many benefits such as consistency, quality, productivity, and automation, all processes of tracing the same path over and over. Practice makes perfect.
At Awkbit, it has been a long time since we started implementing the DevOps work culture. We believe that machine learning and automation should be of service to humanity, not trample its meaning and life sustenance. Quality is our goal and, to all our continuous stages, we add one more: continuous improvement. Are you looking for a DevOps specialist?