Why wait? Eventual Consistency and Reliability

Patience is tough when deploying automated code; Here’s why it is important

Reliability-centric infrastructure engineers need to focus on careful, procedural, validated workflows; the systems we’re responsible are simply too important to casually “toss” infrastructure requests at a common API gateway.

We can’t really avoid automation either. Here’s an example workflow:

Create a BGP Peer

Easy, right? There are a few issues with simply coding against this workflow:

Infrastructure-as-Code

Now - the modified workflow may seem complex and require some level of acclimation. Computers don’t mind processing thousands of rows of data, or even millions - humans are a little more error-prone at that scale. Let’s offload some of those tasks to the computer like this:

Create a BGP Peer Safely

Implementing Infrastructure-as-Code in this case achieves several benefits at once:

The Downsides

For the purposes of this post, let’s ignore the debate about abstraction and obfuscation, and examine why eventual consistency matters to achieve this goal.

Infrastructure Engineering

Infrastructure engineers have wildly different values from a typical developer. In a nutshell:

We have some problems here. Company leaders want to minimize downtime, and enforce aggressive maturation cycles. Once the gear stops falling apart, the biggest danger to availability quickly becomes the infrastructure engineers themselves. This leads to shortening of maintenance windows, which leads to rushed work, which then leads to more pain.

I’d like to propose a different workflow.

Network Assurance

Let’s try a new workflow:

Change Management Process

In this world, we shift focus from the pressures of change execution to the change itself. The procedure itself should exist as-code (and ideally automated); we want to leverage a common concept in trades, cognitive loading.

Picture your mind as a physical workspace. All people are less efficient with a cluttered workspace. Instead of the past year’s unfinished projects, the cognitive loading originates from stressors within the environment:

Early in the IT industry’s maturation cycle, IT leadership pushed for the implementation of Standard Operating Procedures to act as a guide while executing a change, dramatically improving reliability outcomes.

Complexity is factorial in nature, and our human brains (a mental workspace) do handle this problem well, up to a point. Once we overwhelm our engineers, that’s when mistakes happen - we need to leverage our computers to help with that. This is why we implement the procedure itself as code - the engineers construct the programmatic instructions themselves and continually improve on it with source control and peer review tooling (pull requests).

Demanding that we do things fast detracts from this, engineers should focus on the procedure and sequence of events when planning changes. This shifts their mental workspace to focus on delivering reliability.

It’s not about the code, it’s just another example of using a computer to better engineer solutions.