Like most Software Engineers, I started my career by being interested in solving problems. It took me a while to realise that some of those tasks were daily issues. By nature, we want to solve that problem fast and move on to the next thing, and this might mean using the quickest and dirtiest method available. But I knew, deep down, solving problems using that method wasn’t scaleable. It was just firefighting.
I have a vision to help create a world in which we can do more using the time that we have available. Part of being able to achieve that is writing code that will solve problems without human interaction.
Remove unnecessary human error
If you’ve ever spoken to a Site Reliability Engineer, they’ll tell you that most causes of outages are due to human error. After all, a machine is only designed to do what a human has programmed it to do — and we can’t get away from the fact that we are all fallibly human.
We’ve all been there. Ask anyone who’s worked in the industry long enough and they’ll happily share some of their most painful experiences. Whether it’s dropping a table in a production database or removing all healthy instances from a load balancer, each story will stay with them forever.
Most of the time, those mistakes don’t lead to disciplinary action. They’re taken as a positive learning experience and provide a platform for that department to improve. That’s why we have Root Cause Analysis (RCA) documents or Autopsy Reports, so that we can learn how the situation occurred. That’s also why there are plenty of tools out there that mimic those kind of behaviours, such as Chaos Monkey, created by Netflix.
Because time waits for no man (or woman)
Just imagine if you had the ability to carry out the mundane tasks in your daily routine, without you having to be there, and you could spend that time doing something else — something exciting or something really worthwhile — or maybe just nothing at all. The choice would be yours.
This led me to the idea of automating everything that I possibly could. If I was doing a task that took longer than 5 minutes that I knew I would have to repeat, I would try to find a way to automate it. I was fascinated with being able to code, seeing that code translate into tasks and having the satisfaction of knowing I had created a useful tool to save time and effort later.
The idea of creating all these efficiencies within your day can free up that time for you to do something else is very attractive. Doing the same mundane tasks day in and day out doesn’t get you anywhere. It doesn’t use your brain, your creativity or your aptitudes.
Using time wisely frees it up to do what you love
If you could save 30 minutes a day, from 10 members of your team, based on an 8 hour day and 260 working days a year, that’s 162.5 days you’ve got back. Imagine having that extra time on your hands. What else could you do?
Several years ago, I started a new job at a new Digital Agency in London. They were growing rapidly and had some large and interesting projects on the go. I took the job because it seemed exciting, and fulfilled the overwhelming drive I had to ‘get stuff done’. If you’ve worked at an agency before, it’s a bit like getting on a moving train. Everything needs to be done yesterday and you don’t have time to do what you had in your head. Instead, you end up with some bastardised version that just about works and at the end of the day little idea of what you’ve achieved.
This agency mindset allowed me to think of an abstract way to automate as much as I could, so that when a new project came along, I could focus on the elements that I wanted to do; the things which caught and fired up my imagination. If you can identify the repetitive tasks, then you can set yourself up for automation.
Learn from your corrections
The old saying goes: “Learn from your mistakes”, but making mistakes doesn’t really do much other than identify where things have gone wrong. Correcting those mistakes is where the value lies, and the key to people expanding their knowledge and progressing.
It’s very easy for someone knowledgeable to step in and do something, hiding the reality of manual changes, without documentation or sharing it with other members of the team. I always try to put myself in the shoes of someone who has never deployed a particular application, or has never seen this side of the code before, and try to share as much as possible. Knowledge is power and it should be shared: there is no room for selfishness and the more altruistic you are about this, the more you will find team members cooperating, helping each other and dropping the blame mentality when things go wrong: they will all be eager to help work out how to fix the problem. Automating the mundane can help build a cooperative and solid team.
Try and automate as much as possible, where it makes sense. Never catch yourself doing the same repetitive task ever again. Life’s too short.