Looking back now, I was lucky ... before the year 2000, I started working in an IT shop that already had an automation team. This team had some sort of magic that proactively fixed issues before they happened—or at least addressed them when they happened without waking someone up in the middle of the night. At 19 years old, I had no idea that this was not the norm or really what automation even meant. Then, one day it hit me: This is how I can make time for all the other things in my backlog of work, and even more importantly, I don't have to do this manually ever again. The realization that anything you can do on a command line could easily be saved as code and run again systematically without human intervention completely changed my life and set me on the path I am on today.
[ Download now: A system administrator's guide to IT automation.]
The power of automation
In my last role, as the architect responsible for the automation strategy for an entire company, my mantra was: Automation is not just scripting. There is so much more to automation, so let's talk about that a little bit first. Yes, scripts are the basis for automation, but they are not the only piece of it. To make something repeatable, you need information coming in to tell you what state your systems are in and if they are behaving as they should be. This is where observability and monitoring come in. They let you make informed decisions about what needs to be done programmatically to accomplish your end goal. Once you have a feedback loop of information coming in and automation going out, you have a continuous cycle of improvement for your service delivery.
Why would I add this skillset to be successful in my career?
Automation powers everything from application development to infrastructure deployment to business processes. The opportunities to add value are endless. You can work as a DevOps engineer, site reliability engineer, agile coach, product owner, integration engineer, artificial intelligence (AI)/machine learning (ML) operations technician, or business process engineer, just to name a few. Understanding how systems talk to each other to provide business value is a sought-after skill in all industries, and if you are a person who likes to create repeatable processes that work autonomously, then this is the job for you.
Doing more work with fewer people is something many organizations are dealing with, especially in economic downturns. By eliminating manual tasks, you make time for improvement. This approach builds trust with management through reliability and timely resolution of unexpected downtime. Successful patterns of automation can help everyone understand and unite around a common goal.
For example, I was given greater responsibility and opportunity through demonstrating successful patterns in automation. In a previous company, I was promoted from DevOps engineer to enterprise architect in three years by improving existing processes—we went from deploying servers in months to providing full-stack application servers in 30 minutes. This was end-to-end deployment of business applications, configured, running, and providing business value.
Automation can be extremely rewarding because it's fun. It’s a thrill to watch a 40- step continuous integration/continuous delivery (CI/CD) pipeline run and validate security and APIs, perform code analysis and linting, confirm that user interface (UI) elements are in the correct places, and perform regression tests that show the status of the pipeline in a dashboard as green/successful.
Knowing that what you do is valuable and repeatable by anyone else you work with is a great feeling. Also knowing that your changes will not affect others and their changes will not break your work is a great feeling. Would you rather watch TV or be an actor in a play? You can relax and know that things will work as intended, or if they fail tests, let you know what happened so that you can fix it later.
[ A free guide from Red Hat: 5 steps to automate your business. ]
What skills do you need for automation?
Have you heard of minimal viable skills (MVS) for automation? These skills include scripting, collaboration, source-code management, Kubernetes, security, testing, observability, monitoring, and network awareness (among others).
Having the ability to script proficiently with your platform's built-in language (PowerShell for Windows or Bash for Linux) is a great place to start. However, once you get into more complex automation, understanding a universal language like Python is desirable. I call out Python as it has become more of a de facto standard for networking, server, storage, and AI/ML over the past 10 years. Entire automation frameworks have been written in it.
[ Download now: A sysadmin's guide to Bash scripting. ]
Scripting I get, but why collaboration? It takes multiple teams working together to enable true end-to-end automation. Very few people know how the network, storage, firewall, proxy, etc. really work, so there needs to be a commonality to tie all these things together. This is why it is vital to have a company strategy for how and where you store your automation code and how you deploy it. Without a standard place to share not only code but architecture designs and APIs to communicate with each part of the architecture, it is impossible to properly automate the delivery of infrastructure, applications, and services for our customers.
Centralizing all code into a Git management tool such as GitHub, GitLab, AzureDevOps, or Bitbucket will make it much easier to collaborate with other teams and people in your group. Getting comfortable with putting in issues if you find a bug and documenting it well (please not, “It's broken”) is a great way to get started if you are not ready to start committing code. Once you are comfortable with issues, begin making some pull requests and commit fixes to code or review pull requests that others have put in so that you can help test their functionality. People really appreciate code reviews, as no one is perfect, and you may see something they didn't consider.
Application programming interfaces (APIs)
Creating a centralized catalog of APIs and playbooks that everyone works from is crucial to automation success. This skill is more than simply having APIs in your applications. Having them available for anyone to use without calling you to ask how to interface with your service is the best way to automate service delivery. This way, when a developer needs a traditional infrastructure service, it becomes exactly like a cloud resource that they can request without having to put in a ticket or pick up the phone.
Containers and Kubernetes
Containers and Kubernetes have become the de facto way to deploy modern applications across a hybrid cloud. Having a solid understanding of how to build a container and then deploy, scale, monitor, and redeploy it is highly sought by companies. This skill applies across many different parts companies are concerned with, from machine learning and application development to business intelligence and cybersecurity. With containers, you can ensure components that run on your local machine will work exactly the same on any platform at the application level. When you take the next step to deploy the container with Kubernetes, you can ensure via code that everything you need is in place for seamless deployments across all environments.
[ Getting started with containers? Check out this free course: Deploying containerized applications: A technical overview. ]
The way I always start the network awareness conversation is that the cloud does not solve physics, i.e., the speed of light. It is critical to understand where data and users are located and where the data computation happens. First, understand the end user's location compared to the data that they will be accessing. Make sure processing is in the same place as the user. Failing to do so is a common mistake we see repeatedly that causes the application to perform poorly. Of course, the application gets blamed, not its poor placement. Taking latency into consideration is another thing many take for granted, especially if you are in a country with good bandwidth. Make sure you conduct round-trip tests for latency to see what the end user's experience will be. For example, I had an application once that someone wanted to build in Texas even though all of the end users were in Singapore. After much deliberation, the application was replatformed in Singapore, and the user experience to get what they needed from the application went from minutes to seconds.
Testing is another skill that is dismissed as nice to have, but this is the thing that saves you from the one bad keystroke that takes down a production environment. Validate that the things you have set in motion perform as you expect them to. This is extremely important to being successful and ensuring you do not cause unintended consequences that will have you working through the night to resolve an issue. This should not be limited to back-end testing. There are great tools to test and validate UI elements and APIs to make sure changes do not affect existing functionality or end-user experience.
Building security into your application is crucial in today's world of ransomware and bad actors taking over cloud deployments to mine cryptocurrency. Security integration should be part of the CI/CD pipeline that deploys the application. Within this pipeline, there are key things you need: static code analysis, artifact management and tracking, secure libraries, and code signing to make sure that when it is deployed, it is the same code or artifact that you think it is. CI/CD covers only the instantiation of the application. You also need to have security hardening on the platforms you are deploying to. In addition, you want something that validates you are not running a library that has a known vulnerability in it—and can alert your team if the library needs to be patched.
With cybercrime on the rise, security testing is another role every company is hiring for. Building security testing into your application supply chain is becoming something that everyone is doing throughout the life cycle, from build to deploy and runtime validation that the code is executing only what it should be. Signed libraries and executables are becoming the norm, as is the validation of the sources of libraries and artifacts like containers. Using trusted signed libraries and containers and providing your organization with a custom library and artifact repository has become a standard for any security-conscious organization.
Observability and monitoring
Understanding the application state and how it achieved that state is another skill needed to automate tasks properly. Unless you know what is happening with your service, it is impossible to create proactive automation to fix issues or apply a consistent state that avoids the problem in the future. Most people stop at monitoring, and then if there is an issue, use a root-cause analysis (RCA) to discover what happened. Observability provides the tooling you need for an RCA, so you always have it and know what is happening well beyond the up or down status that monitoring usually leaves us with. A great resource to learn more about this is the DevOps Monitoring guide.
[ Looking for more on system automation? Get started with The Automated Enterprise, a free book from Red Hat. ]
I believe automation is one of the most rewarding jobs a person can have in the modern IT world. It requires big-picture thinking and an understanding of how things work end to end. If you are a tinkerer and can't just be told, "That's how it works," this is the job for you. Every time you take something that people do manually and make it into a repeatable process so that they can focus on more valuable work, you save your company money (we all know a lot of the time this is what it really comes down to), as well as help people work on much more exciting projects. All the skills listed above build upon each other to help you become a better automation expert. These skills are not acquired all at once, so take your time, enjoy the ride, and stop doing things manually.