Automation

Everything should be automated in the software development lifecycle.

Automation serves everyone. It is not only a nice feature for engineers who use it, but it is a requirement for Continuous Integration.

What to automate?

The answer is simple: anything that is repeated throughout the development process. I typically begin by addressing the most common tasks and then move on to the remaining ones. A systematic approach is necessary, so it’s important to establish the strategy with the team.

When to automate?

As early as possible in the project’s implementation stage. Automation is a standard practice and is equally important as any other part of the project.

How to automate?

This highly depends on the environment in which the project is being developed. Cloud services typically offer automation tools and are generally a reliable option.

Scripting is likely to be common across all types of projects. It is important to keep scripts simple. If they become overly complex, it may indicate the need for additional layers of tools. The focus should be on leveraging technologies rather than reinventing them. Using a *-as-code system would be a good choice.

Docker is an excellent example of such a tool. It is an environment-as-code framework, and I witnessed how it replaced virtual machines for most of the development tasks. If no specific tool has been selected, I always recommend Docker.

Examples

  • Environment setup. It is important to make the installation of the toolchain as simple as possible. I like using the *-as-code approach. This means that any version or configuration can be easily changed in a file, allowing you to run a command and see the results.
  • Building. There should be a single command to build the project. Even if it takes a few minutes, the build should start and continue reliably with that single command.
  • Deployment. Whether it is on a physical device, a computer, or the cloud, deployment should be automated and simplified. Engineers should not have to manually copy artifacts, run installers, extract files, or remove anything.