We’ve been hearing about DevOps for quite a while. In this article, we look at what the hype is all about.
The term DevOps is an abbreviation for development (Dev) and operations (Ops). Under it, people, processes and technologies come together to constantly provide benefits to customers.
What does DevOps mean for employees? It allows people working in disparate departments — development, IT operations, quality assurance and security — to coordinate their actions and jointly create better and more reliable products. By implementing the DevOps culture, along with the appropriate techniques and tools, teams are able to better respond to customer needs, increase confidence in the applications they create, and achieve business goals faster.
Teams that apply the DevOps culture, methods and tools become highly efficient, create better products faster and increase customer satisfaction. Optimising collaboration and increasing productivity is also a prerequisite for achieving such business goals as:
- Adapting to market conditions and a competitive environment
- Maintaining system stability and reliability
- Quick entry to the market
- Reducing the average recovery timeDevOps affects the application life cycle at all stages — from planning and development to delivery and operation. Each stage depends on the others, but the stages themselves do not depend on the roles performed by the company’s employees. In a fully implemented DevOps culture, everyone has a role to play at almost each stage.
The implementation of DevOps techniques allows you to automate and optimise processes using technology, but it all starts with the culture within the organisation and the people who work in it. To instil a DevOps culture, you need to radically change the way employees approach work and collaborate. If an organisation adheres to the DevOps culture, it can create all the conditions for the development of high performance teams.
In addition to implementing the DevOps culture, teams implement the DevOps approach by applying specific techniques throughout the application life cycle. Some of these techniques help speed up, automate and improve the execution of a particular stage. Others cover multiple stages, helping teams create holistic processes that help increase productivity.
Continuous integration and delivery (CI/CD): Continuous integration is a software development technique in which developers often merge code changes into a master code branch. Continuous integration uses automatic testing, which is performed every time new code is committed, so the code in the main branch is always stable.
Continuous delivery is the regular automatic deployment of new versions of applications in the production environment. By automating the actions required for deployment, teams reduce the likelihood of problems during deployment and create conditions for more frequent updates.
The result of both techniques is the CI/CD process, which includes full automation of all actions between code commit and deployment in the production environment. The implementation of CI/CD allows teams to focus on creating code, reduce costs, and reduce the human impact of performing routine steps. CI/CD also allows you to speed up the process of deploying new code and reduce the risks associated with it. In this case, deployments are performed more often and in smaller increments. This allows teams to increase flexibility and productivity, and also gives them more confidence in the correctness of the code being executed.
Version control: Version control is a technique for working with code in versions, that is, tracking fixes and change history to simplify code analysis and recovery. This technique is usually implemented using version control systems such as Git, which allow multiple developers to work together to create code. These systems provide a clear process for combining code changes in the same files, resolving conflicts and rolling back changes to earlier states.
The use of version control is a fundamental DevOps practice that helps development teams interact, share code writing tasks among team members, and save all code for quick recovery if necessary.
Versioning is also a necessary element in other methodologies, such as continuous integration and infrastructure as code.
Flexible software development: Agile is an approach to software development that focuses on team collaboration, customer and user feedback, and high adaptability to change over short release cycles. Teams that use a flexible methodology constantly provide customers with changes and improvements, collect their feedback, take into account their wishes and needs, and then adapt to these. The flexible methodology differs significantly from other more traditional systems, such as the cascade methodology, which provides for long release cycles with successive stages. Two popular concepts — Kanban and Scrum — are associated with the agile methodology.
Who is a DevOps engineer?
Development operations or DevOps is a step towards optimising interactions in small teams to increase the speed of application production. The idea is to strengthen the development team with the knowledge of procedures and approaches, in order to manage the product environment. In other words, developers must understand and know how their product works in certain conditions, must understand how to deploy their product, and know what characteristics of the environment to tweak to improve performance. So, for some time, there were developers who took a DevOps approach. They wrote build and package scripts to simplify their operations and make the production environment work.
However, the complexity of the solution architecture and the mutual influence of the infrastructure components over time began to worsen the performance of the environments. With each iteration, more and more deep understanding of certain components was required, reducing the productivity of the developer due to the additional costs of understanding the components and tuning the systems for a specific task. The developer’s own cost grew and so did the cost of the product along with it. The requirements for new developers in the team jumped sharply, because they also had to cover the responsibilities of the ‘star’ of development and, of course, the ‘stars’ became less and less available. It is also worth noting that few developers are interested in the specifics of packet processing by the operating system kernel, packet routing rules and host security aspects. The logical step was to attract an administrator who was familiar with this and assign this format of responsibilities to him or her, which, thanks to their experience, allowed the team to achieve the same indicators at a lower cost compared to the cost of the ‘star’ of development.
Such administrators were placed in a team and their main task was to manage test and production environments, based on the rules of a particular team, with the resources allocated to the latter.
A DevOps engineer is, therefore, a specialist who implements the DevOps methodology in projects. He must have knowledge of different fields — he is a developer, a manager, a tester and a technical support specialist.
The DevOps engineer’s responsibilities include:
- Deploying the release delivered by the developers in production
- Integration and deepening of development processes in the delivery
- Standardisation of the development environment
- Configuring the infrastructure for the features of the software being developed
- Preparing a productive environment for frequent changes
- Detecting and fixing problems
- Process automation
DevOps as a career path
Initially, DevOps had nothing to do with a specific position in the organisation. Many still claim that DevOps is a culture, not a profession, according to which communication between developers and system administrators should be established as closely as possible.
The developer should have an understanding of the infrastructure and be able to understand why a new feature running on a laptop suddenly brought half the data centre to a standstill. Such knowledge allows organisations to avoid conflicts — a programmer who is aware of how servers work will never dump all the responsibility on the sysadmin.
But what do recruiters and companies expect from a DevOps engineer? Often, they are expected to have a mix of skills such as system administration, programming, using cloud technologies and automating large infrastructure.
This means that you need to not only be a good programmer, but also perfectly understand networks, operating systems, virtualisation, and how to ensure security and fault tolerance. You must also know several dozen different technologies, ranging from basic and time-tested things like iptables and SELinux to more recent and fashionable technologies like Chef, Puppet or even Ansible.
How to become a DevOps engineer
In general, a DevOps engineer is more about experience than knowledge of specific software. DevOps people are constantly learning, studying and testing new projects and technologies. They must constantly ask themselves: will this technology improve our project? What is better to choose as a language: Ruby, Python, Go, or write in pure pluses? And how will we deliver the changes to production, so as not to break the working systems?
The main thing to understand is that the DevOps specialist has a really good outlook. To expand it, you need to constantly engage in self-study.
Technical skills that are needed for DevOps
Senior systems administrator: The idea is that you should have a good understanding of the environment in which your applications will run. How they start (init, systemd), what to do if you see too many open files, use or not to use swap — these are issues you should be able to address.
Networking — CCNA: You can’t write online services without understanding how the network works. No one says that you need to memorise the seven layers of the OSI model, but you will need to know exactly how IP, TCP/UDP and, of course, the application level protocol (for example, HTTP, HTTP/2) work. This will save you a lot of hassle when looking for the reasons for the Connection Refused error.
Junior developer: You have to understand how code is written, what OOP is, what threads are and a bunch of other things. In general, the more knowledge you have about all of these, the easier it will be for you to build and roll out the app.
Many people may disagree, arguing that the code should be written by the developer. But, if you don’t understand how a software product is created, how will you automate its assembly, testing and deployment? Will you be able to notice a bottleneck in an architectural solution before it gets to production?
The year 2020 clearly showed that the transition to online and digital transformation for many companies is not only inevitable, but vital. Those who can switch to DevOps have a better chance of survival. Surely, it is not so easy to become a DevOps engineer from scratch. You will always have to study, read, and try. But after the 10th iteration, you will get a hold of the concept. The new and unknown is always cool.
No matter what anyone says, go for it!