It seems today that everybody wants to be a DevOps engineer or, lesser animal, the platform engineer; these two roles offer a challenging and rewarding career path that requires a combination of technical and interpersonal skills. In this article, I will share some of my insights and tips on becoming a successful DevOps Engineer, based on my journey in rebirth from the Virtualisation guy to the DevOps guy.
We have travelled this road several times, but you know me, I like my definitions. For a fuller understanding of the DevOps ethos, read the following articles:
But if they were TLDR: let’s quickly define what DevOps is. DevOps is a set of practices and culture that aims to improve the collaboration and communication between software development and IT operations teams and to automate and streamline the software, application and infrastructure delivery processes. DevOps enables faster, more reliable, and more secure implementations and upgrades to environments while reducing costs and risks. Do you recognise this definition? Most likely not, as it has been diluted over the years and refocused on the hard skills rather than the process as it has become vendor-driven.
DevOps is not a specific role or title but a mindset and a way of working; even so, some organisations do have dedicated DevOps Engineers responsible for designing, implementing, and maintaining the DevOps tools and processes. By the scale of their potential scope, these engineers need to have a broad range of hard and soft skills to perform their tasks effectively.
Hard skills are the technical skills that you need to perform your job. For a DevOps Engineer, these include:
Programming and scripting languages
You need to be proficient in at least one programming language, such as Python, Ruby, Java, or Go (I learnt the Go and Python languages) and one scripting language, such as Bash, PowerShell, or Perl (I was already reasonably proficient in Bash and Powershell) to write code, automate tasks, and integrate tools. There is also Infrastructure as Code and Configuration as Code to consider, so choose one of each, either Terraform or Pulumi and one from Ansible, Chef or Puppet (My choice was Terraform and Ansible). You should also be familiar with common frameworks and libraries for web development, testing, and data analysis.
Operating systems and networking
You will need to have a solid understanding of how operating systems (such as Linux, Windows, or MacOS) work, how to configure them, how to troubleshoot issues, and how to secure them. You also need to know the basics of networking protocols (such as TCP/IP, HTTP, DNS, or SSH), how to set up and manage network devices (such as routers, switches, firewalls, or load balancers), and how to monitor network performance and security.
Cloud computing and virtualisation
You will also need to be comfortable with using cloud platforms, both Public, Private and hybrid (such as vSphere, Cloud Director, AWS, Azure, or Google Cloud) to deploy and manage your applications and infrastructure. You should also know how to use containerisation technologies (Docker, Tanzu, OpenShift, Kubernetes, or Vagrant) to create and run isolated environments for development, testing, and production.
Software development tools and methodologies
You must know software developers’ tools and methodologies to plan, design, code, test, debug, and deploy their applications. Get used to seeing this and intimately understanding at least one product for each sector
These include version control systems (such as Git or SVN), code editors (such as VS Code), IDEs (such as Eclipse or Visual Studio), testing frameworks (such as JUnit or PyTest), debugging tools (such as GDB or PDB), code quality tools (such as SonarQube or CodeClimate), build tools (such as Maven or Gradle), package managers (such as NPM or Pip), deployment tools (such as Jenkins or Travis CI), configuration management tools (such as Ansible or Chef), orchestration tools (such as Terraform or CloudFormation), monitoring tools (such as Prometheus or Nagios), logging tools (such as ELK stack or Splunk), and alerting tools (such as PagerDuty or OpsGenie). You should also be aware of the software development methodologies (such as Agile or Scrum) and what is considered good practice, for example, doing code reviews or pair programming.
DevOps principles and practices
You need to understand the core principles and practices of DevOps, such as continuous integration, continuous delivery, continuous feedback, continuous improvement, infrastructure as code, automation, collaboration, culture change, value stream mapping, lean thinking, systems thinking, etc. You should also be able to apply these principles and practices to your projects and workflows.
The skills listed above are not fixed or exhaustive and can vary depending on your organisation and team’s specific needs and preferences. What is important is that you are willing to undertake a life of continual development and continual improvement to learn new skills and technologies that can help you improve your DevOps capabilities.
More important are the soft and interpersonal skills needed to work effectively with others. For a DevOps Engineer, these include:
As a DevOps Engineer, you must communicate clearly and concisely with the different stakeholders in a project, such as developers, testers, operators, managers, customers, board, etc; you should be able to explain technical concepts in simple terms, understand the needs and expectations of others, give and receive constructive feedback, resolve conflicts, negotiate solutions, and document your work.
More importantly, you must work well with others in a team, share your knowledge and ideas, listen actively, build trust, and support each other.
You need to be able to analyse complex problems, identify root causes, generate alternative solutions, evaluate pros and cons, implement the best solution, and verify the results.
As a DevOps engineer, you must think outside the box, find innovative ways to overcome challenges, adapt to changing requirements, and continually optimise your processes and tools.
You need to be able to learn from your own and others’ experiences, seek feedback, research new topics, take courses, attend webinars, read books and blogs, watch videos and podcasts, join communities and forums, and keep yourself updated on the latest trends and developments in DevOps.
These soft skills are not optional or secondary. They are essential for a DevOps Engineer to succeed in a dynamic and collaborative environment. You must always strive to improve and demonstrate your soft skills daily.
One of the key challenges to becoming a DevOps Engineer is to balance the two aspects of DevOps: development and operations. Depending on your background and experience, you may lean more towards one or the other. However, you must not neglect or ignore the other side. You should aim to become a well-rounded DevOps Engineer who can confidently and competently handle development and operations tasks.
If you initially have a background in development, you may be more comfortable writing code, testing applications, and deploying software. However, you may lack the skills and knowledge required to manage and maintain infrastructure, such as operating systems, networking, cloud computing, virtualisation, etc. To bridge this gap, you should:
- Learn the basics of operating systems and networking, such as installing, configuring, troubleshooting, and securing them. You can use online courses, books, blogs, videos, podcasts, etc., to learn these topics. There are plenty of always “Free” cloud services you can practice on for example, the AWS Free Tier or the 55+ services on Azure. You could even go old school and use VMware workstation player or Parallels and create a virtual machine.
- Learn how to use cloud platforms and virtualisation technologies, such as creating, deploying, managing, and scaling your applications and infrastructure on them. You can use the official documentation, tutorials, guides, etc., of these platforms and technologies to learn them. You can also use their free or trial versions to experiment with them.
- Learn how to use configuration management and orchestration tools, such as how to automate and standardise the provisioning and configuration of your infrastructure across different environments. You can use these tools’ official documentation, tutorials, guides, etc. to learn them. You can also use their open-source or community versions to practice with them.
- Learn how to use monitoring, logging, and alerting tools to collect, analyse, visualise, and alert on the performance and health of your applications and infrastructure. Again, you can use these tools’ official documentation, tutorials, guides, etc., to learn them. You can also use their open-source or community versions to practice with them.
- Learn how to collaborate with operations teams, such as how to understand their needs and expectations, communicate effectively with them, share responsibilities and accountability with them, and support them in case of issues or incidents.
If you come from an operations background, you may be more comfortable managing and maintaining infrastructure, such as operating systems, networking, cloud computing, virtualisation, etc. However, you may lack the skills and knowledge required for developing and deploying software, such as programming languages, code editors, IDEs, testing frameworks, debugging tools, code quality tools, build tools, package managers, deployment tools, etc.
To bridge this gap, you should:
- Learn at least one programming language and one scripting language commonly used in DevOps projects, such as Python, Ruby, Java, or Go for programming languages and Bash, PowerShell, or Perl for scripting languages, also consider learning an Infrastructure as code product and a Config as code product. You can use online courses, books, blogs, videos, podcasts, etc., to learn these languages. You can also practice them on online platforms such as Codecademy or HackerRank.
- Learn how to use software development tools and methodologies commonly used in DevOps projects, such as version control systems, code editors IDEs, testing frameworks, debugging tools, code quality tools, build tools, package managers, deployment tools, etc. Again, you can use these tools and methodologies’ official documentation, tutorials guides etc., to learn them. You can also use their open-source or community versions to practice with them.
- Learn how to use continuous integration and continuous delivery (CI/CD) tools and practices, such as automating and streamlining the software delivery process from code to production. You can use these tools and practices’ official documentation, tutorial guides, etc., to learn them. You can also use their open-source or community versions to practice with them.
- Learn how to collaborate with development teams, understand their needs and expectations, and effectively communicate with them, share responsibilities and accountability with them, and support them in case of issues or incidents.
I think that you can see the journey to becoming a DevOps Engineer is not an insignificant task. It requires mastering multiple skills, but also hard work, dedication, curiosity, creativity, learning, collaboration, problem-solving, communication skills and more. However, if you are up to it and willing to put that hard work in, it is also an enriching career path, not just financially, it offers many opportunities for growth development, almost daily innovation, and a direct impact on customer and user satisfaction.