Day Two Cloud 099: Parallel Parking for the Cloud

By Published On: May 27, 2021

Working in technology for any period of time shows you one thing, this stuff is complicated! There’s the often cited quote from Arthur C. Clarke regarding advanced technology and its apparent magical properties, begging the question, “Who are the magicians?” The answer is you. As a professional technologist, it is incumbent on you to present technology in such a way that all the rigging is hidden, the cards are tucked up your sleeves, and the hat appears to be empty.

In our conversation with Brian Gracely, we examined the tradeoffs between abstracting away complexity and losing control. Simplicity creates constraints, and the consumer needs to accept those limitations. Apple is a good example of imposing limitations for the sake of simplicity. You can have any color, as long as its white (or black, sometimes). Complexity brings freedom at the cost of time; time you now have to invest in maintaining your complexity.

As I thought more about the conversation, two things bubbled up to the surface. The first is the layer cake of presentation and the second is how any of this might be applied to real life. The two are intertwined, so allow me to address each in turn.

Technology is delivered in layers, including the infrastructure, the application, and the endpoint. We can easily subdivide the layers even further, but I think those three are most useful for my example. The infrastructure is the base components that support the application: compute, storage, networking. The application is the software delivering a desired experience. The endpoint is the client consuming the software through an interface. Each layer presents several interfaces to the one above it, and that presentation is necessarily an abstraction. The degree to which each layer is abstracted determines the simplicity or complexity. For the individual creating an instance of the infrastructure layer, they need to think about how someone at the next layer is going to interact with their layer. Perhaps even *gasp* talk to the people who will use their infrastructure. Once you know what their use cases are, you can determine the suitable level of abstraction. When in doubt, I think it makes sense to go with simplicity over abstraction. It’s going to be easier to introduce new features (read: complexity) down the road, but removing features is not usually an option. People don’t take deprecation well.

Okay, that is the theory of the layer cake. You own a layer of the delicious technology cake, and you need to determine how someone else will interact with it. We can apply this to real life! Let’s start with an example where you are responsible for providing infrastructure to an application developer. The first question I would ask is, “how are you going to deliver your code?” Maybe they already know, or maybe they don’t know. If they can deliver it in a container, now I can ask follow up questions regarding the networking, storage, and performance requirements. Is this an asynchronous batch process I can throw at something like Fargate? Or is this a microservices application that requires a container orchestrator like Kubernetes? By understanding what the developer needs from the infrastructure, you can provide them with the proper level of abstraction without overwhelming them with choice. You are the magician hiding infrastructure complexity by simply waving your IaC wand.

Not to wax too poetic, but as technologists we are the gatekeepers and guardians of simplicity. We serve to protect the upstream from unnecessary complexity. And that is true no matter where you find yourself in the stack. The application developer protects the client, who in turn is protected by the infrastructure admin, who is protected by the platform provider, who is protected by the hardware OEMs, who are protected by the manufacturing plants, and so on all the way down to the component parts of silica and metal pulled from the ground. I don’t have to spin my own silicon wafers, and you don’t have to build a datacenter.

It’s abstractions all the way down, and we each serve a role in constructing this magical technology machine. Embrace your role as guardian of the realm.