Warning: Pointless analogy time.

Recently I have been thinking a lot about automation, mainly around how I do not do enough of it and more over how I do more than a lot of the developers I have heard about.

I think, and I could be wrong, but I think that one of the potential mental hurdles people put in place for themselves is that we think that by adding some form of automation we are adding another piece of the puzzle to our workflow, another cog that could break or go wrong.

We also think that the process of automating is probably time that would be better spent actually doing real work.

These are both fair arguments, but I want to try and convey one of the key benefits of automating some part of your workflow by use of an analogy.

Consider if you will set of windscreen wipers, and the lever you move to start them going. If your car is anything like mine you have the choice of having them automatically wipe for you, or to do one wipe.

Let us suppose that you are an incredibly competent driver (and for all I know you are), you can drive without thinking about driving, your body works almost on muscle memory to know when to gear up, gear down, and turn on your windscreen wipers.

If there is a slight bit of spit coming down you may decide that one wipe is enough to clear the windscreen, you might manually do this once every couple of minutes or so, it is no biggie. But as soon as you notice the rain getting heavier you have the ability to flick your windscreen wipers to move automatically. Suddenly you aren't thinking about the wipers any more and everything is good.

Let us now suppose that the common thinking when designing a car was that windscreen wipers are so easy to trigger manually that why would you want an automated system to automatically wipe for you? I mean the lever is right by your hand anyway, and the automation will involve an extra  chip, you will need to work out how to send power to it, and it is just another part of the car that could go wrong.

The same scenario as before happens, a little bit of spit, not biggie, you manually wipe every couple of minutes, it is muscle memory so you don't care. But now the rain gets heavier, you find yourself having to manually wipe every 5 seconds, suddenly your visibility isn't as good or consistent as it could be and you notice you are driving much slower. Or maybe you don't drive any slower, maybe you take the cognitive hit of having to think about manually wiping  every 3-5 seconds, maybe you crash into a bus full of orphans.

OK so it is an extreme analogy, but I think you get my point. Just because something is easy to do manually doesn't mean that when repeated often enough it doesn't detract from your core task. Consider the following things that if you do any form of webdesign or development you probably do quite frequently.

  • Refresh your browser window when you have saved some CSS or JavaScript
  • Typed git push origin master
  • Had to cd into your website's directory after opening up a new terminal window
  • Had to google that one command or line of code that you sometimes need but never enough to properly get it into your head

These things are not what we get paid to do, and they are not why we entered the business, we want to create cool shit, and things like the list above get in the way.

So look, don't let boring repetitive stuff, no matter how easy to accomplish, get in the way of solving the problems you want to solve, and for goodness sake, don't crash into a bus full of orphans!

Practical Component

Just so there is something useful to come out of this blog post;

  • Plenty of text editors/IDEs can tell your default browser to refresh when a file is saved, look into it for your editor of choice.
  • Get up an alias in git to convert longer commands into really short commands.
  • Set up your terminal program to start in a more relevant location.
  • Create a snippet of annoying hard to remember code that is easily accessible offline, or use something like TextExpander to save it for you.