DevOps. Platform Engineer. Cloud Engineer. So many terms and roles! But they all seem to mean the same thing. So when it comes to this new term Cloud Engineer. What do Cloud Engineers do all day? And do cloud engineers code?
The short answer to whether Cloud Engineers code is: yes. But, Cloud Engineers don’t write any old code, they write very specific types of code.
By the end of this article you’ll know what a Cloud Engineer is and whether they code (spoiler alert: they do).
With the increase in the popularity of Cloud technologies as a whole, the role of the Cloud Engineer has appeared more and more. If we look at the Google Trends we can see how the growth in search terms started to blow up around 2013…
Google Trend Results For “Cloud Engineer”
Whether you’re here because you want to become a Cloud Engineer, you’re looking to hire a Cloud Engineer, or you’re just curious about what a Cloud Engineer is. The most logical place for us to start on our investigation into the Cloud Engineer is to define it first. So let’s do that.
A Cloud Engineer is a specific type of Software Engineer. Cloud Engineers are typically hired for their skills in setting up and maintaining Cloud Services. A Cloud Engineer typically has a strong understanding of Cloud Platforms such as: Amazon Web Services, Google Cloud and Azure.
Cloud Engineer’s are expected to know these cloud platforms inside out to provide valuable insight to their businesses. Cloud Engineers are expected to advise and implement various Cloud topics such as:
- Structuring a Cloud Organisation for architecture and security.
- Which services to adopt and which to avoid (and why).
- Cloud strategies such as Cloud Native or Cloud Agnostic strategies.
- Best practices for software engineering in the cloud.
Despite having a better understanding of what a Cloud Engineer does we’re still no closer to answering our original question: Does a Cloud Engineer code?
And if you remember at the start of the article we said that Cloud Engineers do in fact code, but they code in specific areas.
Let’s quickly outline the areas that Cloud Engineers are likely to code in:
- Infrastructure As Code — Writing code that creates, updates or deletes cloud infrastructure.
- Serverless Functions — Writing small utility methods that can be used for tasks such as performing back-ups or log shipping.
- Build / Deploy Tooling — Writing code that works in packaging and deploying applications.
- Monitoring — Instrumenting applications so that they emit necessary information that can be used to remotely debug applications.
That’s a fairly high level description of some of the areas that Cloud Engineers code in. Let’s break these areas down to understand more about them.
Infrastructure As Code: An S3 Resource In Terraform
Infrastructure As Code is the practice of writing and storing infrastructure creation / updating / deleting instructions in code. Infrastructure written as code is worked with like any other application code: using build tools to verify the code is correct, and applying industry practices like code review.
Writing Infrastructure As Code is one of the main roles of the Cloud Engineer. The Cloud Engineer could either be writing Infrastructure code for other teams, advising them on the structure of Infrastructure As Code for the whole business — or even building a platform as a service that allows engineers to deploy code without implementing their own infrastructure.
Infrastructure As Code can be written in two styles: Declarative or Imperative. The declarative style will see Cloud Engineers write configuration type code, such as JSON or YAML files whereas the imperative style will see Cloud Engineers write code that looks like more typical procedural application code.
If you’re curious to learn more about Infrastructure As Code, check out the article: Infrastructure As Code: A Quick And Simple Explanation.
Serverless functions allow software engineers to write small pieces of compute without having to worry about provisioning infrastructure. [AWS Lambda] and Google Cloud Functions are good examples of this type of infrastructure.
Serverless functions are often adopted by Cloud Engineers as they can act like the glue that can hold different Cloud services together. In fact that’s one of the reasons functions were invented in the first place.
Cloud Functions are often used by Cloud Engineers for performing tasks such as scanning for vulnerabilities or misconfigured infrastructure, backing up applications and storing or modifying log files or backups etc.
Writing cloud functions is a lot like writing typical application code. Functions will need to be effectively tested, they’ll need a proper software pipeline and they’ll also need to be monitored for potential down time to keep services them running efficiently.
To learn more about cloud functions and serverless check out the Serverless Ultimate Guide: Serverless: An Ultimate Guide
Build Server Logos
Another area that Cloud Engineers are likely to code within are build and release scripts and tooling. A build tool is compute capacity (typically a server) that performs internal tasks that help automate, package and deploy software.
Build tools typically initiate test runs on software, and deploy it to remote environments. A Cloud Engineer may be writing code that helps these scripts run. That will typically be bash scripts or writing configuration files such as YAML or JSON.
Unlike Serverless programming, coding for build systems will be a lot more setting up configuration files rather than solving logical or procedural problems. However certain build tools may require more intricate tasks to be performed which will require true coding.
A CloudWatch Dashboard
The last area that a Cloud Engineer is typically going to write code for is in support of application alerting and monitoring.
Monitoring tooling helps software engineers know how their applications are performing remotely. Monitoring tells a software engineer if their server is up and healthy — or if it’s not it should tell you what’s wrong and where.
In order to implement monitoring applications need to be instrumented. Instrumenting software usually means going through an application and understanding what data is required to understand and observe the system from an external perspective and emitting the data at the right times.
A Cloud Engineer would therefore provide support and/or get hands dirty in implementing the instrumentation required for services to emit the necessary data. Instrumentation usually takes the form of adding log entries, emitting metrics or traces and/or configuring agents or supporting infrastructure that allows servers to report this monitoring data.
And that concludes today’s article. Today we went through and had a look at the mysterious role of the Cloud Engineer. And hopefully you got a little clearer about the role of the Cloud Engineer and what they typically get up to on a day-to-day basis.
As we found out, Cloud Engineers do in fact code! But as we’ve seen they don’t just do any type of coding, they’re often expected to do a specific types of coding, not just regular everyday application development.
I’m hoping that I helped you out understanding more about the role of the Cloud Engineer so that you can hire one, or even become one.
Speak soon Cloud Native friend!
Lou is the editor of The Cloud Native Software Engineering Newsletter a Newsletter dedicated to making Cloud Software Engineering more accessible and easy to understand, every 2 weeks you’ll get a digest of the best content for Cloud Native Software Engineers right in your inbox.