Modern software systems involve plenty of automation, especially in testing, deployment, and operations. However, there is a world of difference between automatic and automated processes. Automation can be an insidious half measure which creates the illusion of agility while actually leaving less time for engineering real solutions.
Now, don’t get me wrong — automation can also be a wonderful thing. I just hate to see it applied to anything that could instead be done automatically without intervention by a single human being. And that really is the key difference — automation still needs a person to decide to invoke it. It might be a gloriously simple invocation, say, a single button press. Yet, the button must still be pressed.
Maybe you have a really cool script that can run all the tests against a given feature branch to let the developer know if their changes broke anything. That’s a great first step, but if you really want to avoid breaking the tree, this process must be automatic. Someone (more likely through negligence than malice) could forget to run the cool script or ignore the results and merge their changes anyway.
Maybe you have a really useful troubleshooting app which can detect and recycle a server instance that appears unresponsive. This is surely a good tool to have in your arsenal, but do you really want to spend an operator’s time on this task? Why not build that monitoring and recovery strategy into the system itself?
Anything straightforward enough to already have well-defined and well-scoped automation can likely become automatic with a bit more effort. Still, you must exercise caution. For example, an overzealous “auto-reboot on failure” policy can easily bring down an entire server farm. As a general (perhaps obvious) rule, any action which has the potential to cause data loss or violate an SLA needs careful input from a human. Consider going a bit meta and building automatic safeguards in your system that suspend automatic policies if they are likely to do more harm than good (e.g. “reboot no more than 10 machines in a 10 minute time window”).
Whenever you are faced with an automation prompt, ask yourself, “Why am I making this decision?” If a machine can do it better, get out of the way!