Software development in the past…
A long, long time ago, when all applications in the world were built by development teams in monolithic architecture, the Almighty Admin deployed these applications. Why “almighty”? The admin had enormous power, both in terms of equipment and its configuration. No wonder, then, that his authority was vast. At a time when cloud solutions did not exist, he had great responsibility for correctly configuring monolithic architecture in a production environment where traffic was often huge and the requirements in terms of reliability were high.
Such a division of responsibilities, however, created huge barriers between the software development team and the admin. The person who controlled access to server resources, locked up in their fortress, did not understand the problems faced by developers and often blamed them for all the problems which arose. It worked similarly from the perspective of the other side too, and the lack of communication could seriously slow down any project.
How do we do it today?
Today, we have many more possibilities in the field of software development and we are not afraid to experiment because, thanks to cloud solutions, we do not implement changes directly in the production environment. We work in an Agile manner, focus on communication and transparency, and build well-coordinated teams, paying attention to Time to Market. In the era of start-ups, there was also a need to start the development environment quickly and implement even the basic version of the application (MVP – Minimum Viable Product) in the production environment. This allows you to quickly check the correctness of business assumptions for the new application.
The high level of complexity of business requirements and the level of complexity of the applications being built, in turn, require greater specialization of members of the development team. The previous approach – one specialist being responsible for everything – no longer has any reason to exist today. No wonder that a programmer, who is focused on developing the application, no longer has enough time to implement it in a server environment. This is how the need to identify a specialist in the team who would have competences in both the area of application development and its implementation arose. And that is a DevOps engineer.
What is a DevOps engineer?
DevOps engineer is a role in which a specialist is or may be responsible for:
- Preparation of environments at various levels, which enable software development, tests, implementation in the development environment and implementation in the production environment respectively.
- Continuous Integration / Continuous Delivery (CI / CD) process – preparation of the process of building, testing, verifying the quality of the application code, and then implementing it in the server environment using dedicated tools (Jenkins, CircleCI, GitHub etc.)
- Installation, configuration and updating tools that support software development (repositories of docker artifacts and containers, Sonar, Elastic Search, databases)
- Infrastructure monitoring and checking alerts automatically generated by the system in case of anomalies
- Improving communication with the team responsible for the infrastructure (if such a team exists)
- Process automation, eliminating errors resulting from the “human factor”, i.e. IaC (Infrastructure as Code), using such tools as Terraform and Ansible
- Implementation of a scalable, flexible and self-healing application (mainly in the cloud)
Read also: DevOps monitoring systems
DevOps – various configurations
Although “DevOps Engineer” job offers are often advertised, some people say that such a role does not exist, probably because the scope of responsibilities of such a person varies greatly, depending on the size of the project. In practice, we can therefore come across various configurations of this role:
1) A DevOps engineer is a member of the development team
The infrastructure team is responsible for the server part, and the DevOps engineer is the “representative” of the software development team who contacts the infrastructure team.
- A DevOps engineer can play an active part in software development
- He can listen to the needs of the development team better
- He has less impact on what is happening on the infrastructure team side
- Communication with DevOps engineers from other teams is worse
Read also: Software Development Life Cycle: DevOps
2) DevOps specialists form a separate team, and each DevOps engineer is assigned to the tasks of one or two development teams.
- Better communication between DevOps engineers – previously implemented solutions are not replicated; greater consistency
- Higher work efficiency associated with improving software delivery processes
- Worse communication with the development team
Why is it worth having a DevOps engineer in the project?
As you can see, although a DevOps engineer is a specialist with a wide range of competences, he is nothing like an administrator locked up in a server room. Companies are willing to employ DevOps specialists or entire DevOps teams because of the specific benefits:
- Faster implementation of applications – a DevOps engineer, thanks to his knowledge in the field of implementation, unburdens developers who focus on programming
- Significant improvement in software quality – thanks to the multi-stage Continuous Integration process, which includes conducting various types of software tests
- Improving the security of the delivered solution – a DevOps engineer has extensive knowledge in the field of security. In the context of DevOps, the term “DevOpsSec” often appears – related to the word “security“
- High availability of applications – there are different ways to deploy applications on the server. When you deploy one instance of an application, if it crashes, the application becomes unavailable. Thanks to the implementation of the application by DevOps engineers in the so-called High Availability, there are several instances of it. In case one of them stops working, the other ensures the availability of the service.
- Scalability of the delivered application – DevOps engineers can implement a solution enabling an automatic increase in the number of instances of the application in the event of sudden increased traffic and its ability to repair itself in case of a failure (self-healing). For example, a DevOps engineer can implement a mechanism that checks, e.g. every 10 seconds, whether the application is running and automatically restarts it if necessary.
The speed of digital transformation means that the approach to software development is changing, and companies are looking for specialists who will improve and speed up this process. However, obtaining them is not easy, and last year DevOps specialists were third on the list of the most desirable competences according to the LinkedIn report. Not surprisingly, more and more companies are deciding to employ a DevOps engineer or a DevOps team, using the support of companies specializing in software development. The reasons are varied: the need for faster implementation of the application, the need to improve security and communication between project teams or to have high-quality applications. And what would your reason be?