Strategies for creating loosely coupled systems that can be used across an organization

I was on a conference call recently with developers looking for my guidance on if they should use Azure ARM or Terraform for their infrastructure templates.  We are primarily a “Microsoft shop” and a somewhat older company so most cloud deployments aren’t even automated.

I work on our Azure team and as many teams are just starting out on their cloud journey the need a lot of guidance initially. The people I happened to be talking with started to ask

“What tool do I use?”

“What is best practice?”

They kept pushing, they wanted a specific answer.

But we actually don’t need a specific answer!

Have you heard the term loosely coupled components?

Let’s talk about it…

Think of your infrastructure templates like buying a vehicle… everyone fancies different kinds of vehicles, different colors, but each vehicle must get you from home to work or point A to point B.

Essentially, we should not care what type of Infrastructure automation is being used.

What we should care about is that there is a road to drive the vehicle on and your vehicle works in a repeatedly, predictable way.

There should be an interstate system which all vehicles can easily use.

This is your generic pipe for automation

How do you determine if the vehicle can go on the interstate?

interstate

Verify it is a vehicle

Does it have an engine?

Has the vehicle passed inspection?

We don’t care what kind of engine the car has, just that is has an engine and is qualified to run.

How one could implement this strategy

Each repo (vehicle), should have a script deploy (engine).

Inside the deploy script each team owns their specific customizations, but it must pass, you guessed it, an inspection (perhaps this is an initial run in your CI/CD system).

vehicle
|   deploy.ps1
│   README.md
│   .gitignore
|
└───v6-engine
│   │   turbo.json
│
└───alpine-sound-system
|   │   main.tf
|   │   provider.tf
|   │   variables.tf
|   │   terraform.tfvars (*DO NOT COMMIT THIS FILE!)
└───color
    │   orange.json

Build That Interstate!

Our overarching framework (interstate) must know the tools used by developers to build a strong foundation (and so our build agents have the correct tools).

Once we have assured the vehicle can enter the interstate, you have generic familiar things which can be utilized.

These are things that everyone driving on an interstate knows about (rest stops, exits, construction, accidents, etc).

These are generic commands, libraries, monitoring, alerting and such that are common. Each vehicle/driver must know or become familiar with over time in order to find an optimized route.

Lastly, remember to build a loosely coupled system!!