Over the last few years, automation has become key to the delivery of a high-quality product, not only in software development but also for many other industries. The key thing here is: do it once, do it well, make it replicable.
In this post I’ll be looking at what automation (along with terms such as immutable infrastructure) mean to your business and, more importantly, your customers. On the face of it automation may not seem to have any direct impact on your customers, but it’s actually one of the unseen heroes of the product development lifecycle, and something that’s definitely worth bothering with.
Being a software development engineer I will refer to the software development lifecycle during the rest of this post, but you’ll likely find that most of the points can be applied to other industries that you may be familiar with, in one way or another.
Automation makes it much easier to create something that works from a previously known state, and if you choose to make it impossible to alter the state of something that works it should continue working, predictably. These kind of systems, which are not subject or susceptible to change are known as immutable, and when applied to infrastructure in the software development industry the term used is immutable infrastructure.
A hugely beneficial side effect of immutability is reliability. Whether you’re serving content on bare metal systems or in the cloud on services like Amazon Web Services and Microsoft Azure, there is always the risk that something will fail and you will need to rapidly restore your systems. In these situations, having recent backups is fine, but normally the process to recover these is not as well-tested as it should be and, critically, can be incredibly time-consuming.
If, however, you have immutable systems that are backed by frequently-used automation processes, you effectively have disaster recovery built in; your infrastructure becomes disposable and you’re free to recreate environments quickly and easily.
Immutable infrastructure plays a hugely important role in modern software development, as rather than changing part of your infrastructure, you can now create a new piece with the required new features and throw the old one away. The rise of cloud computing over the last decade has given us the tools to make this cheap and efficient – so that all kinds of systems, from smaller brochure websites to huge-scale international social media networks, can benefit from the increased confidence and, more importantly, predictability that comes from having systems you know work as expected or can easily replace in event of a failure.
Automation inspires confidence in both software and the architecture on which it runs. It can be applied everywhere from development environment bootstrapping and continuous integration systems through to production web application systems and disaster recovery plans. With careful planning, it can allow you to recreate entire systems or apply upgrades to environments with the single click of a button; reliably reproducing the same results over and over again.
As with all things, though, there are trade-offs. You can’t just make changes, so nearly all updates will need to go through a release process, which is a good thing! However, without well-tested automation, releases are often fear inducing, painful and time consuming experiences. When you have confidence in your automation, though, and can be sure of the state of your production systems at all times, all of a sudden releases become simple and can be done many times a day.
Some initial investment in infrastructure automation sows the seeds that will enable you to reap the benefits of forward-planning and thorough testing; facilitating easy, fast and predictable deployments, every time. As a business this gives you the confidence to react quickly to change and supports agile development workflows throughout the entire product lifecycle. Fast release cycles also allow you get new features to market quicker and more efficiently than would have been possible previously, and the automation that enables this means your engineering teams can use their time working on new product features rather than firefighting a time-consuming manual release process.
Obviously infrastructure does need to be coupled with a quality product. A quality production line doesn’t automatically guarantee a quality product in isolation. But it is a hugely important tool in the arsenal for modern software development; enabling developers and businesses to deliver high-quality, world-class systems.