Let’s start by explaining what the “DevOps” methodology consists of. This methodology seeks to bring development and operations teams closer together, optimizing processes throughout the software development lifecycle, from coding to maintenance. For this reason, many companies are looking for a DevOps expert profile: a professional with skills and knowledge in a wide range of topics, from software development to infrastructure operations. Currently, there is no official training to become a DevOps engineer, so here are some of the skills and knowledge that we believe this profile should have:
- Experience with scripting languages: To get into the DevOps world it is very important to have a solid programming base even without being an expert developer. The most relevant languages nowadays for DevOps-related tasks are Bash and Python, although at Geko we recommend having knowledge of some additional languages such as: Go, C, C++, PHP, Ruby, Node.js or PowerShell. Although we will not be programming, we will need to know the technologies that developers work with to be able to implement integration pipelines, as well as to develop our own tools for the automation of some processes.
- Containers and container orchestration: Many companies are moving away from traditional application deployment models to transition to a microservices-based environment (typically containerised systems). The advantages of using containers are manifold, from ensuring that the same thing that is tested in development will work exactly the same in all environments, to more easily automating the deployment of code in production. It is therefore important to be aware of tools for container administration and management, some of these tools include: Docker, Kubernetes, Docker Swarm, ECS and many more.
- Security Skills: This is one of the points that add the most value as a DevOps professional. Engineers must have the skills to write secure code to protect applications from unwanted attacks. Faster development times lead to a higher risk of more vulnerabilities being introduced into the code.
- Web servers: Web servers are used to satisfy users’ requests for content on a website. If you are interested in the DevOps world you have probably heard that there are different types of web servers, so we mention the most popular ones: Nginx, Apache, IIS and Tomcat.
- Infrastructure implementation as code: Regardless of the environment or operating system, good DevOps must have a solid knowledge of infrastructure and operating system management, and be able to automate the deployment and configuration of infrastructure using infrastructure tools as code. The most relevant tools in this sector are Terraform and CloudFormation, although the latter is only suitable for AWS.
- Configuration automation as code: Whether it’s provisioning applications and their configurations, creating users, resources, automating system administration tasks, configuration automation tools allow you to maintain a consistent state over time and across the managed infrastructure. Some of the most popular tools for this automation are Ansible, Chef, Puppet and Salt.
- Implementation of CI/CD deployments: For this role you will need a deep understanding of the essence of DevOps: the implementation of deployments, known as CI/CD. All code is merged and finally the build is executed and tests are automated. Deployment to production will mostly require the creation of new containers, automating the processes through scripting. Some tools you should be aware of are: Gitlab CI, GitHub Actions, Bamboo, Azure DevOps, Jenkins, Travis CI, TeamCity and Circle CI.
- Cloud Computing: Cloud and DevOps usually go hand in hand. A DevOps engineer is expected to know how to handle the different cloud platforms and their tools to better adapt to the needs, and find solutions for each client or project. In addition, they will also need to know the different cloud platforms to weigh the pros and cons of using IaaS versus PaaS services, and other managed services to design and recommend solutions. Platforms such as AWS, Azure, Google Cloud Platform, etc. should be familiar tools for a DevOps engineer.
- Infrastructure monitoring: One of the fundamental parts of the DevOps job is to know what is going on at all times in the development process. Therefore, monitoring the infrastructure is an essential task, as it allows users to visualize events and receive real-time alerts. Some of the DevOps tools for monitoring, which help development and operations teams work together effectively, are: Prometheus, Grafana, Sensu, SysDig, and New Relic Infrastructure.
- Agile methodologies: A DevOps engineer must master agile methodologies that allow iterative and incremental development. The core of this methodology is iterative development with an incremental and evolutionary approach. This means that software development is divided or fragmented into sprints or smaller tasks. For this reason, there are methods such as Kanban or Scrum, and tools that offer this type of methodology such as Jira.
- Soft skills: It is not enough to be good at coding and automation. A DevOps profile also implies that you must have soft skills such as communication, flexibility, learning, among others. As a DevOps engineer, you have to collaborate with developers, the QA team, operations teams and high-level stakeholders in the company. You may also have to involve third parties and, of course, the end customer. For that reason, soft skills are just as important as technical skills.
-
- Collaboration and Communication: Given his or her position, a DevOps engineer must have the ability to work as part of a team, so collaboration and communication are crucial. A DevOps engineer must provide cross-functionality, i.e. break down the barriers between IT operations and development. This means that DevOps engineers have to work closely with software engineers. This requires excellent communication and collaboration skills for anyone wishing to perform this key role of a DevOps engineer.
-
- Flexibility: To be a good DevOps engineer, being flexible is one of the most important characteristics, having the ability to continuously develop and integrate new systems and operations while adapting to changes in the code. In addition, engineers must be comfortable working in different areas as required in the application development process.
In conclusion, a DevOps profile can be a developer who has entered the world of system administration, gaining experience in operating system management, networking, software provisioning and configuration, etc.; or it can be a sysadmin who has entered the world of development, knowing at least a couple of programming languages and the requirements to make the software work. As you can see, the DevOps engineer profile is very versatile. At Geko, we consider a good DevOps has to be someone who has knowledge of both worlds, regardless of their background.
From Geko, these are some of the skills and knowledge that we believe a DevOps expert should have, what would you add or remove from this list?
In Geko Cloud we are experts in DevOps methodologies, if you want to know all the possibilities of having a DevOps team at your disposal, do not hesitate to contact us.