If you have ever required working with servers, you will have noticed that the process of configuring one or the other instance is quite similar. Although the process is repetitive, it takes a long time; in addition to being subject to human error.
When I started working directly on some servers to configure my projects in Django and WordPress I noticed that the steps were basically the same all the time, so the questions arose:
There are cases in which not automating can be a valid option, although the only ones that I can think of are:
From these questions, my experience and extensive research, I came to the following conclusions: In the first case, non-automation can be justified with a simple lack of need. The frequency with which I must perform these tasks is so low that I do not consider it repetitive (there remains the question of how security patches are applied in that case, but it is not the subject of this post).
In the second case, when working directly on the server, the automation of the processes is very difficult since changes are made to the code frequently. By working directly on the server, any modifications that are made automatically, without taking these modifications into account, will cause work to be lost. In this case, before thinking about automating, it is better to think about using best practices when working.
With this in mind, unless we rarely touch the server, or use it as our desktop computer, I couldn’t find valid reasons not to automate.
It’s easier to find reasons to automate your software processes:
Automating is not free, it requires a large initial investment to become familiar with the necessary technologies and methodologies. In my case I started with BASH scripts, then I tested AWS CodeDeploy and I finally found Ansible. I went from configuring my servers manually command by command to configuring them according to my parameters with a single task. After being at that point, it could be further automated, integrating tests within our process and creating a flow similar to the following image.
Basically, our flow is the following:
There are several details about this flow. Among the many advantages that this flow offers us, it is worth emphasizing that our development server always contains the most updated version that has passed the tests, so you can see a feature live as soon as a developer finishes it. This is very important both for internal processes and for communication with the client; since we can receive feedback and react quicker if changes in strategy are required.
On the other hand, let’s move on to costs. We currently have 8 active developers, who constantly update the repository of our projects (more than 10 active). If we wanted to keep all development instances up to date without our automation tool we would require one or two additional people fully dedicated to updating them, with all the additional downsides that brings.
As part of our process we develop a tool that allows us to support our entire process. If you are interested in automating the processes in your company we can advise you on how to start and we are open to offer our tool as a service.