Calico Blog

Software Deployment Automation, or Investment in Software Longevity

The Importance of Automation in a Rapidly Changing Business Environment

By Dany Ayvazov - CEO and Co-Founder

Automation is a big word, it can mean anything from manufacturing to business process automation, but regardless of the industry or the vertical, automation plays a huge part not only in making your enterprise more efficient, but also can increase the quality, and reduce human error.

With software this is especially important, frequently software involves multiple moving pieces such as:

  • Code, or code binaries (things that run the application)

  • Libraries or dependencies (third-party components that are used by the software to not reinvent the wheel)

  • Databases (where application data lives)

  • Additional files such as other applications or server configuration

For some companies, and for some systems this is just the tip of the iceberg. Deploying updates to a system involves managing every component of that list, and this list grows with the system's size.

Before deployment automation was more widely adopted, there was much more accessible tooling for this, software was deployed manually, Excel spreadsheets were used to track deployment checklists, people compiled those lists into reports, those reports went up to decision-makers. You can imagine this process is both labor-intensive and error-prone. Big deployments required large teams of admin support staff to track all of this information. Not entering in Database management systems subject, when the data structure was modified and the DB needs to be migrated to comply with those change-requests, believing or not some specialized Database Admin People were required to perform manual migrations to the Databases.

So why should you care about deployment automation of software systems, if you are not in the software business?

The answer consists of two main parts, and both are surprisingly simple.

  1. When automation is built in from the ground up into a system, the software itself benefits from improved design.

  2. The ability to improve and change the software system over time as the needs of the business shift with the market.

Ability to Change and Improve the Software

We'll tackle the second part first!

The ability to change, and consequently improve your software over time is one of the benefits of building a bespoke software solution. This is also why it's worth investing in the ability to continue to change and improve your customized software. Therefore, investing in software deployment automation helps you do just that, it helps you protect your investment by enabling you to change, update, and fix your system continuously.

2020 has shown how quickly we need to change and adapt. Improvements are part of business, and that requires the Changes; as anyone who started a business, or stuck around the industry for any length of time knows it. Change is the only constant! Investing in software means you are investing in tools to run and automate your business. Being able to update, fix, and improve your tools is a no-brainer, the same applies to software systems. It doesn't really matter if you have purchased an "off-the-shelf" system, subscribe to a SaaS product, or have a bespoke software solution.

With SaaS, you are paying for someone else to make sure they know what to deal with deployment automation so that they can remain competitive in the market, otherwise you might choose to switch SaaS providers. With bespoke systems, you have to make sure you can continue to invest in your tools, after all, you don't just want to replace them in 2 years. Finally, with "off-the-shelf" systems, especially systems where there is a professional services group, or implementation group involved; insisting on automation around deployment is especially important, as it will help protect your investment.

Improved System Design as a Result of Automation

This part may not be immediately obvious: why would the requirement for automated deployment improve system design and architecture?

We'll tackle this in two parts as well:

  • Appropriate configuration management and source management are required for automation

  • Resilient data modeling and API design are required for automation

The first is a bit more obvious here when you remove a person for the equation for deploying a system, it means that every time a piece of code is shipped to production or even to a test environment, it has to do so without human intervention. This means that you have to enumerate all the pieces of information required to run the system and centralize them. Then you have to map that information to each environment you are going to support. Finally, to be able to actually do this in a _sane_ way, you have to invest in, and understand the required tools to do just that.

This means that the software you design would have to have those concerns addressed early on. This has the knock-on effect of surfacing any problems with design and scale earlier in the process.

The second portion, regarding data modeling, is a bit more subtle and is related to the kinds of tools that can be used to automate data changes inside your system, think in terms of adding a brand new entity with new attributes or changing some attributes that already exist. By removing the human element those changes can't be done as a manual step, which means that they have to be thought out and applied as a repeatable script that can be run on any environment. This again means that issues that could result in data loss have to be taken care of upfront, if they are not, you will not be able to deploy your code.

So What's the Catch?

The catch for all of this is a certain amount of sophistication and discipline that is required by the development team, and a certain understanding from project (or product) stakeholders when time is added to enable these kinds of features. Frequently a smaller upfront delay will pay dividends over the lifetime of the codebase, sometimes as critical as having the ability to maintain something and having to rebuild it from scratch.

I would encourage the pursuit of automation, not just in the name of efficiency, but in the name of overall quality and human-error reduction. If this piqued your interest at all, don't hesitate to reach out to us, we'll be happy to talk to you about how deployment automation can help protect your next software investment.