Table of contents
When organizations start to think about the integration of automation into their IT infrastructure, there is often a lack of clarity and visibility of what such a transition typically involves and what needs to be changed to support it completely.
From a technical perspective, it’s important to improve the efficiency of deployment processes to enhance reliability and consistency. This can help speed up the time-to-resolution of user or customer requests. Standardizing IT services can also be beneficial as it eliminates the errors that may occur with the ClickOps approach.
From a business perspective, you may want to reduce costs, speed up time-to-market with your solutions, outsource operations to external staff or introduce DevOps practices for your IT team, which can result in a complete transformation of your entire IT organization.
Based on our experience, it‘s always advisable to start small with some defined use cases. Many large corporations have failed to transition to a DevOps approach by attempting to implement everything at once in a single large project.
A big-bang approach for automation and a DevOps transition can be complex and bring organizational and technical challenges that must be addressed simultaneously. Additionally, the changes may require replacing existing technologies, resulting in a lack of skills or the need to seek external help.
Don’t forget about the cultural changes you have to go through in your IT department. Not everybody is born to work in an agile environment. It’s essential to keep this in mind because some people may fear losing their jobs and resist changes they are uncomfortable with.
This is a broad topic that we could explore in greater detail in a separate blog post. However, I wanted to emphasize that there are many factors to consider.
Two ways to start automating
In my opinion, there are two ways to start automating your IT infrastructure:
- Start small with a simple use case that doesn’t create too much complexity. This could involve a simple script that creates a VM in Azure.
- Choose an IT infrastructure component you currently need to upgrade or replace, such as installing a new SQL server cluster.
Let’s see what you need to take into consideration.
Understand your infrastructure and how it's built
While this might seem like an easy task, it can sometimes be the hardest part, especially if you’re a lone wolf in your IT department. If you were involved in the deployment, then you probably know how things were built and what steps were taken. However, in larger teams, things may have been built by external staff who are no longer available. Moreover, documentation is often neglected due to the need to achieve milestones.
It’s important to take the first step of clearly understanding your repetitive tasks, such as server provisioning, configuration updates or scripts. This will help you identify areas that can be automated and serve as a good starting point.
Search for automation opportunities
Consider identifying tasks that are repetitive and can be easily automated using scripts. Focus on tasks that are prone to errors. At this stage, don’t worry about the programming language or the method you‘ll use for automation.
Some ideas to help you get started:
- User creation in Active Directory or Entra
- VM creation in Azure or AWS
- VM template generation for Azure Virtual desktops
- Creation of automated installation packages for your most used applications
- Hardening your systems based on CIS recommendations
When you‘re looking at the opportunities, also have an eye on minification. Keep your automation scripts as small as possible to eventually have a library of building blocks that you can dynamically put together for larger scenarios.
Documentation
Having complete documentation is crucial for any project. If you already have it, you’re lucky. If not, now is the perfect time to start. Some people believe that scripts and infrastructure as code are sufficient documentation. However, that’s not the case.
Every script and infrastructure component has dependencies that need to be in place and this information must be documented thoroughly. Your IT manager should be able to implement or run the project without any questions left unanswered. This should be your benchmark.
Since many scripts will be stored in a Git repository, it makes sense to save the documentation alongside the code. Markdown language is the best choice for creating new documentation.
Don’t bother with Word documents on SharePoint; they are old-fashioned and inconvenient for this purpose.
Define the requirements before you start
This often seems to be a no-brainer, but it‘s not. Many organizations only consider the current project requirements and fail to account for the future changes that could occur.
Requirements, cloud provider offerings, pricing, products and licensing can all change over time. Always keep this in mind.
This decision will directly impact the tools and scripting languages you use and the training and knowledge requirements for your colleagues. If you ever need to transition to another cloud provider, you‘ll have to start from scratch. So, it’s crucial to think about long-term implications and not just focus on immediate needs.
Implement change management and version control
When starting with the creation of automation scripts, it’s important to introduce a version control system right from the beginning. This holds true even if you’re a single person working on the project.
You should consider creating a Git repository with a “master” and a “development” branch. This helps you to learn and practice the process of pulling code from a Git repository, pushing it back and creating a pull request to release it to the “master branch”. The “development“ branch is your development environment, and the “master“ branch is your production environment.
Don’t skip this if you plan to implement automation completely in your IT department and environment – this is the foundation of everything that follows. Implementation of components like automatic documentation, security scanning of code with linting or the pipelines you create to deploy your code will rely on the first basic version of control components.
Implementing Git also fosters collaboration as soon as you add more people to the automation initiative and enables more teams to collaborate. This implementation also encourages knowledge sharing and supports the documentation by adding operational changes to the complete development and delivery process.
Tool definition
Depending on the opportunities you see, you should familiarize yourself with the different tools and technologies around your preferred platform, such as:
- Infrastructure as Code (IaC) tools like Terraform, AWS CloudFormation, Azure Resource Manager, OpenTofu or Bicep
- Configuration management tools like PowerShell DSC, Ansible, Puppet, or Chef
- Continuous Integration/Continuous Deployment (CI/CD) pipelines with GitHub Actions, Azure Pipelines, Jenkins, GitLab CI/CD, or AWS CodePipeline
It’s always advisable to start with simple solutions when automating tasks. As you progress, the complexity will naturally increase.
To get an idea about the available tools and technologies, you can check out the Cloud Native Landscape. However, keep in mind that the list can be overwhelming.
Define development and coding guidelines
Guidelines and standards are a very important part of the automation journey. Back in the day, people used to write Kix logon or VBS scripts. Even today, if you ask five people to write an installation script with PowerShell, you‘ll get five different approaches.
A defined scripting standard makes it easy for your team to understand and change things.
Monitor, improve and test
Automation is not a fire-and-forget thing, it requires continuous monitoring and improvement because of the nature of the tools, technologies and providers you‘re using.
Implement monitoring, logging and dashboards throughout the process from the very beginning. Those things will help you in the long run.
Scripts that ran one day can break the next day because of changes to APIs, modules or versions you‘re not responsible for. Therefore, proper monitoring, logging and testing are crucial.
Final thoughts
When starting, keep things simple. Look for easy, quick wins within your IT organization and start with the basics to familiarize yourself with different approaches, tools and technologies.
Understand how your infrastructure works and how you can improve it. There are countless choices you can make to achieve the goal of fully automated infrastructures, and the larger your scope, the more challenging the path to success will be.
The key to success is finding the right balance between people, processes and tools.
In the next blog post on this topic, we‘ll share some of our favorite tools for development and deployment pipelines.
Image by Freepik