This post is a part of How To Ship Maintainable Product series
Saving time is crucial, especially on repeatable (and often boring) tasks. Performing tasks manually comes with extra time consumption, human errors, job satisfaction decrease, need for remembering task steps and many others… Those were the main reasons for me to write a blog-post: Automate Everything!. This one extends the scope.
Automation can be applied to the process from various perspectives and different levels. Each step in software life-cycle: compiling/building, testing, deployment, monitoring/notification etc. can be automated. Here are the key benefits of introducing automation into our processes.
Why to automate
- Repeatability – predictable output every time
- Reliability – human error is limited to a minimum
- Efficiency – fast execution
- Leverage – allows engineers to focus on business-critical tasks
Above items describe how can we benefit from introducing automation in our development process. Below is a list of tasks that can be automated.
What to automate
- Build and deployment process (CI/CD)
- Code coverage and quality reports
- Coding convention reports
- Performance test reports
- Regression test reports
- Documentation generation
What tools to choose? I would advise you to use any scripting language, if possible. A script can be easily updated and tested. It is also fairly easy for a DevOps engineer to learn a scripting language like python. A good idea is to use a stick to one language in an organization. Fragmentation into various languages can lead to maintainability problems.
One important aspect in writing automation scripts is to document what particular script is supposed to do. There is nothing worse than not knowing how things work or what is the main purpose (sic!).
Last but not least, we should think about monitoring how automation works. Automated task execution result could be sent on email or be reported on slack channel? At least we should have a way to ensure that the task was executed.