From the beginning of time, man has strived to optimize the way he lives, by inventing machines, accessories that will take away unnecessary actions. As our civilization developed, more and more industries were automated with the use of different machinery. And yet, we software developers, despite having much better tools, often fail to achieve this dream. Our daily work is full of repetitive and mundane tasks that we perform manually. It raises a question: Why isn't every process automated? To answer this, we need to understand why we want automatization?
Of course, the main reason is we want to save money. But we can achieve it in two different ways. The firstt one is by performing faster in a more scalable way. The most common example
Is by using version control systems. Can you imagine how hard it would be to develop an app without it? The second one is by reducing human error. Let’s think about UI tests that are always fully deterministic and make no misclick. Therefore, by reducing manual work, we increase both reliability and increased efficiency.
To find out the best targets for automatization, we should think of our work in the following categories. Where do we lose time, and where do we make mistakes? We can then locate such processes and automate them. Most obvious and important is one related to building and delivering our application. It is well known and there are many CI / CD systems that stand for continuous integration and continuous delivery. What's the point of having a fully tested application if, before each change, we would have to waste hours to run each test suit? Or why to lose time in code reviews on simple code styles issues when a simple job can run lint and check that for us?
Of course, if we develop a small project, we might hesitate to spend time on setting up all the configurations, but luckily nowadays, it's much easier and we can create solid foundations in just a few clicks.
Main jobs would be to automate:
This way, we saved a lot of stress, and achieved a safe and predictable release train.
Another robust group of processes to be handled for us would be one that contains all the jobs that help measure stability of our system. We should know immediately about any new outage, what’s its priority and act accordingly. Each second might save us loads of money, reputation and reduce overall damage.
Later we should introduce automatic tasks that trigger creation of charts and reports for us, so the business domain can easily understand what happened. This refers not only to serious accidents but we can use the same principles to create funnels for things like analytics events or a/b tests conversions.
This way we can easily check how well our system performs, were to introduce new improvements and whether the project follows the north star or not. As this knowledge is crucial for every well managed project with decisions made based on data, it should be accessible in a fast, reliable, and efficient way. It’s impossible to achieve that with humans, who can’t work 24/7, with 100% effectiveness and never take sick leave. This can be provided only if it’s done by a program. Our job as developers should be only to code what data we want to gather, the logic behind gathering it, and how to display it to the users.
But there is also the last group that is often omitted. We tend to underestimate how much time and energy we lose every-day on small, mundane tasks like updating our status. Because they are scattered and small, we just don’t think it's worthwhile to automate them. But you can’t be more wrong. Our goal should be to eliminate any repetitive chores and use our energy mainly on creative work. If we sum up all those minutes wasted on poor communication, messed priorities, and misunderstandings, we have something worthy of automatization. You should not bother remembering everything, but writing notes takes time, so let technology be your secretary.
Another problem is that you are probably overloaded with useful links, files, and it takes time to find one you need most at the moment. Such tiny inconveniences produce noise that steals your attention and beats you off your beat. And it’s not easy to get focused again when there are more distractions to come. I often find myself irritated when instead of coding I must make some comment on my current task to make sure that my workflow is updated. Considering it happens everyday, we have a really high stack there.
The shortest answer for the question of what to automate in the development process is: everything. Why waste your precious time on mundane tasks? In everyday life we constantly use tools that save our energy and we would be surprised that one doesn’t use them. Like a washing machine. Back then it took up to a whole day to make laundry for one family! Then one with an engine appeared, but still it required a person to control its work. Only when microcontrollers were invented fully automated ones took this burden from us. It is exactly like in your case. You have plenty of different tools to use, but only when they are combined and used by your artificial assistants, you are free to focus solely on creative parts of your everyday's work.
So why do we as developers still have to do some task manually? Why don’t we write some scripts to automate our work? Because the roots of automation are about efficiency and money. Just like in other parts of your life, you don’t assemble your own washing machine. Instead you go and buy ready one. We should use the services of specialized companies to choose from best solutions available, that because of scale are much more efficient. Last but not least, the high percentage of automated processes in a software company is a direct message to its employees. It means that their work environment is modern and advanced, and as such it is a good place to stay.
I develop apps for the sheer need of creation, and I love to share my thoughts and give back to the community. I have experience working with super small teams and enormous ones as well. No matter the size, the best way to contribute to a project is to improve the effectiveness of its processes.