Include Automation In Your Design

One of the most overlooked software design elements is automation- gathering log files into a central console, deploying code to another environment, archiving expired data and creating new configuration data are just a few examples of automation.  More often than not, automation isn’t considered. Designers generally assume that a human can write a script, log in and click a few switches, or run an SQL statement from the command line.  It will only take three minutes, why spend valuable time on something that can be done quickly?

The decision to forgo automation, when made across just a few engineering teams over a few years, can become expensive, and as your user base increases, you’ll have to execute more manual steps.  Within a short period of time, a quarter of your engineers will be supporting production.  Why?  Because it was easier for them to take a manual approach during development without fully understanding the long term consequences.


If you don’t have time to automate, you don’t have time to build

I’m sure that some of you reading this would respond with, “I thought about it, but deadline ‘xyz’ did not allow me time to do it right.  I built in the concept so later someone could come behind me and automate.”  It will never get automated if your sales team keeps selling.  There will always be something more important to do.  This is a form of technical debt.  Technical debt gets exponentially more expensive with scale.

You need to always contemplate production support requirements.  Build it into your design.  Don’t ever deploy something into a test environment until it is fully automated.  If you don’t have time to automate, you don’t have time to build.  Establish a baseline of metrics for manual verses automated.  When you get pressure to “hit the date,” and you feel the only way is to bypass automation, present your metrics.  Show the cost and impact to your teams.

If engineers are spending time performing manual work-arounds in production, then they will have less time to build code.  With less time to build code, less automation will be built.  You see where this is going? If you’re a manager or leader who is responsible for deploying code or supporting production, insist on automation.  Don’t accept anything less!