Between September and November 2021, together with the Krakow Cloud Native Group, Rzeszów Java User Group, and Kielce Java User Group, we organised three discussion groups inviting both experts and beginners in the Cloud Engineering field. Based on the insights exchanged during these interactive sessions, we created a guide on how to get started in this field.
What is Cloud Engineering?
Cloud engineering is a dynamically growing field. It covers a broad spectrum of technologies and different modes of working. It arouses the interest of people starting their careers as well as those in established positions related to software development and systems administration.
To illustrate this, you could put a photo of the cloud native technology landscape map from Cloud Native Computing Foundation (CNCF) here, or at least the figures from them: You are viewing 1,005 cards with a total of 2,919,901 stars, a market cap of $ 17.1T, and funding of $ 26.9B.
In broader terms, we can also call this Cloud First Computing. It’s a way to build applications so that the cloud approach is the primary approach. The application itself is designed to run natively in the cloud ecosystem. Cloud Engineering leverages its own methods, tools and processes for developing, operating and maintaining cloud native solutions. These will be outlined later in this article.
How does Cloud Engineering differ from DevOps?
To demonstrate the difference between Cloud Engineering and DevOps, let’s start with the latter’s definition. DevOps combines the dev part with the operations part, meaning one team takes care of both the application in development and provides support in production. Therefore DevOps is the whole process connected to the application’s life cycle. Meanwhile, Cloud Engineering is designed to provide a foundation, a platform and solutions to accelerate delivery by application teams.
Although there is a difference between DevOps and Cloud Engineering, there is visible overlap. Cloud Engineering focuses more on the foundation work related to enabling teams to build cloud native solutions. DevOps can be described as part of the application development and delivery cycle. So, at the end of the day, it all comes together. To sum up, DevOps is part of Cloud Engineering, but Cloud Engineering is more than just DevOps.
The role of the Cloud Engineer in a team
Cloud Engineering is, therefore, a broad range of different skills and responsibilities. The duties of a Cloud Engineer vary between teams as they are often combined with other roles such as:
- Cloud Specialist / DevOps Engineer – the part of the dev team that helps automate infrastructure as code and CI/CD. Everything that’s needed to deliver and run software in production.
- Platform Engineer – designs, builds and operates internal platforms for developers to reduce entry barriers to cloud infrastructure. This helps them deploy and monitor their services in a highly available environment that is often centrally managed by the operations teams.
- Site Reliability Engineer – manages live systems and platforms. Monitors performance and security aspects. This area usually requires people with Systems Administration experience.
- Solutions Architect – helps understand the problem space and designs proposed solutions, usually in a public cloud space. This requires a deep understanding of the technology landscape and effective communications skills.
The main goal is to support the engineers to deliver software in production more efficiently.
Why Cloud Engineering
More and more companies are transforming their practices to the cloud. Instead of applications being run on their own servers, applications are being moved to the cloud or to hybrid solutions. The market is growing. For more details about the Cloud Computing market, check this report.
On the other hand, for people starting out in the journey to become Cloud Engineers, the amount of knowledge required and the sheer vastness of the technology landscape is discouraging as it’s hard to know where to start.
The Path to a Cloud Engineering role
There are many diverse ways to become a Cloud Engineer. You can start with test automation, systems administration or software development in Java. With different backgrounds come different skills but the most important thing is a can-do attitude.
The best way to learn a cloud is by practicing. You can choose a cloud provider, set up a free trial and explore its functionalities. With the experience gained from one cloud, it’s easy to move and quickly adapt to another one.
Another option is to look into the certification path. Not necessarily to pass the exam, but it’s beneficial to understand the subject matter and to gain knowledge. It will help structure the way you learn. This approach is also good for self-assessment.
Skills required to start in Cloud Engineering
One of the most fundamental skills needed is to be able to work with source code. Once you can do that, you can write code in any programming language. Start by installing the Linux operating system and running commands in the terminal. Then learn how to install, run and configure complex applications using Docker containers on the local machine. It will be the first step towards understanding how things work in production.
In addition, you should have a basic understanding of the following concepts:
- Networking and Operating Systems: Starting with the ISO/OSI layer model, subnet calculations, network layouts and protocols used in different layers to encryption, firewalls, network monitoring, tracing, debugging and troubleshooting.
- Public Cloud: Basic understanding of available resources and how to create them programmatically using an API or Infrastructure As Code. Identity and Access Management (IAM) is the fundamental block of any cloud. Understanding roles, identities and permissions.
- Kubernetes and containers: Start them on your own computer using Minikube.
- Understanding of software development lifecycle and microservices – see Twelve-factor app methodology.
- Basic knowledge of any programming language: Being able to write Bash scripts is a must-have. It is mainly used for integration between different systems and solutions. Sometimes Python is used instead. Many DevOps tools (such as Docker, Kubernetes, Terraform among others) are written in Go. Knowing Go helps with finding and fixing issues in those tools. Rust also appears in low-level scenarios.
- Able to look up information: e.g. by reading documentation
- An interest in automating repetitive tasks.
- Being open to technological changes and going far beyond the current ecosystem.
Over time you can explore more advanced concepts such as high availability disaster recovery, scaling and performance. However, this is not necessary at the beginning of the journey. The desire to understand how things work and fit in cloud environments is more than sufficient.
In addition to technical knowledge, developing soft skills is key to successfully being part of a team.
Transitioning from different technology fields to Cloud Engineering
If you’d like to transfer from a different technical area such as Frontend, Data Science or Java within your current company and try Cloud Engineering, begin with:
- Understanding the cloud native technology landscape and current market trends.
- Starting your own small projects in your free time or on weekends.
- Finding out if there is a need for a Cloud Engineer in your team or organisation. If so, the opportunity is just around the corner.
- Joining meetups and conferences about the area you’d like to explore.
- Talking to people.
- Learning to automate manual processes.
- Contributing to open source projects. Start small with documentation or tests and eventually expand your knowledge.
Upcoming trends in Cloud Native
It’s safe to say that Kubernetes has become a de-facto major technological trend. The container ecosystem highly influences the way we build and run applications. It has led to many emerging technologies in this field. For example, due to the growing number of micro services, service mesh technology tries to address the problem of inter service communication at scale. Additionally, it provides full observability and advanced security features. It’s definitely worth taking a look into.
We also talked a lot about the hybrid cloud approach. Most companies these days use more than one cloud platform. This adds complexity and requires more effort from engineering teams. This is mostly because of different technologies and different ways of working between cloud providers. So it is essential to understand the full picture of the public cloud.
Senior and what’s next?
What is your ultimate goal in Cloud Engineering? Wrapping up our conversation, what’s most important is that you should feel satisfied with your work. The speed of technology changes is mind-blowing and it’s hard to keep up with the latest trends. The best option is to specialise in one particular area. This usually results in becoming a sage who can mentor other people.
- Senior Engineering role: A more technical direction. Stay close to the day to day engineering activities. Develop deeper expertise and mentor other people.
- Solutions Architect: Work at the crossroads of business and technology. Keep up to date with the latest technologies but require less hands-on engineering.
- Leadership Role: Take responsibility not just for a single project but also for an entire department and multiple initiatives. Sometimes, it might require relocating close to headquarters and competing with other people with the same ambition level.
The final decision comes down to your personal preferences and natural predispositions.
At the end of the day, listen to yourself. Do not chase the job title. Instead, develop skills in this direction or focus on helping your company to advance. Remember to keep a work-life balance and to stay active outside of work. Hang out with people. IT is not the most important thing in your life. 😉