Automation for Software Developers
Automation has been around for centuries. Humans and their observation skills and pattern recognition found out various ways to automate mundane and complex tasks. Repetitive tasks are not only tedious, but they also add no value to our self-development. Even though automation is nothing new, we need to understand the mechanics and application utilization for the modern world.
Automation leads to a reduction in effort. Initially, humans started to rely on animals to reduce their effort. It was the rudimentary first step to automation. Consequently, when humans invented machines, we were at the next level of automation. The Industrial revolution has helped us expedite the growth of automation. Hence, the key ingredient to it is machine automating human efforts.
However, in the Information Age, we have computers and other connected machines. Accordingly, we need to understand what kind of automation is required. Despite the concept being similar, the problem and its corresponding solution vary with changes in the environment. A simplified approach to automation is to use the basic skill of Pattern recognition. A Software Developer has to use many tools to achieve the task at hand.
For example, we could use simple configuration to start some tools and services on system startup but imagine a scenario if you want to use your laptop on weekends for general work. You may not want to waste precious RAM so that the full potential of the system can be utilized. How can we solve this problem? We have to smartly automate it such that we can provide a simple option to start the services with simple triggers like a shell script, etc. It's just an example but I hope you get the concept.
Pattern recognition requires one to be self-aware of what you are doing and whether that is repetitive. Consider a scenario where you have to open a Postman Rest Client, Teams App, Slack App, A browser window with StackOverflow, etc. ;-) But on the weekends, you are simply surfing the web or reading some E-Book App. You can create one script with the name alias as office-mode.sh which will start the system in the office mode and the second script would be weekend-mode.sh.
These scripts will contain the necessary code to open only the required tools and software. Another example of automation is the templates we use to generate code like creating a test method in Intellij or a simple Angular Component using Visual Studio code with some Code Snippets plugins.
Automation is not always something very big but even small automation like these can save time and effort. Even if it takes a couple of minutes daily, multiply it by the number of days you did it so far and see the amount of time you spent over these years and how much time would be wasted later.
For instance, I was working on a project and I had a Desktop machine. The time required for the project to be built using the build tool was more. A perfect approach would have been to reduce the build time and make life easier.
Yet, as we all know — a developer’s life is not that easy and we have to make smart choices for a given scenario and time. Moreover, the issue was that when I would put my system to build, some QA test cases were running using the browser window hence I could not do anything on the system when the build was running.
Hence, I created a simple UI-based build trigger tool using which I could trigger build from my mobile phone on my Desktop machine as both the devices were on the same Wi-Fi network. I was able to remotely monitor the status of the build and also pair with junior developers during that time.
We know the concept of abstraction in which we simplify the code, but what about our daily tasks? A Developer who spends more time on repetitive tasks which do not require more logical and critical thinking is wasting his intelligence.
If we keep looking at our tasks as a series of steps to be followed then it's not going to work out. However, if we look at the tasks with a bird's eye view then we will get the required abstraction as to how they could be grouped as a single parent task. You will find a process that could be abstracted and triggered with a single action.
Smart automation should not be limited to repetitive tasks but be extended further to imperative tasks. We should look at our tasks the way we look at our code. The declarative approach will help us identify tasks having automation potential.
The Web Components philosophy in Angular and React is the best example of abstraction, declarative approach, and smart automation. Before the concept of Web Components, every developer had to write the same set of code to create a login screen. At times a developer could copy-paste the code and refactor it, which may or may not break.
However, instead of spending more time writing the same code repeatedly, we can now simply change the input configurations and the component renders. We are now telling the components what we want to achieve and not how to achieve it. Life is easier now.
I would urge all Developers to look at your daily tasks as a third person to find out what you are doing is that enough or could you make your life easy by reducing efforts. If you are aware of what you're doing then you can understand it and improve on it. You can solve a problem only if you know that it truly is a problem.
To connect with our team at Vikasietum, feel free to shoot us a message here