An Appeal for easy Infrastructure Architectures

It’s inside the morning. Your telephone has vibrated itself off the nightstand — dozens of notifications, none of them specially helpful.
You stumble into the living room, stubbing your toe at the sofa. You curse and hobble over to in which you left your pc.
It wakes from sleep mode. You login, pull up tracking. The app is down. the entirety is down. the arena is on hearth and you have no concept in which to begin throwing water.
Beyond you screwed gift you. beyond you idea it’d be neat to apply packing containers in production. Beyond you idea it’d be high-quality to construct a a thousand-piece transport pipeline. past you bolted each device you can find onto the sector’s dumbest sysadmin robotic.
Beyond you forgot to keep it simple, stupid.
I hold seeing charts of “DevOps” equipment that look like the linnaean tree of lifestyles.

Whilst having dozens of options for every step of a config management or a CI/CD pipeline is tremendous, it doesn’t come with out problems. these aren’t the fault of the equipment themselves, but how they’re used.
Because it’s become code and device sets have matured, infrastructure (mainly transport-targeted infra) has been kneecapped by the same troubles that plague code, dependency hell being one. Ops engineers have a tendency to forget about that every piece added isn’t one dependency, however a own family of dependencies. It’s turtles all the manner down, and soon you will discover yourself troubleshooting into infinity.
often the beat back to use extra equipment is that the contemporary tool isn’t “awesome” at some thing. this is commonly genuine, but is it precise sufficient? nine times out of ten, using one “not exceptional” device is going to be much less of a headache than adding another device that you’ll have to display, troubleshoot, and control.
some try and construct “best of breed” solutions, which is inaccurate first of all. there may be no “exceptional of breed” for CI/CD or reliability engineering. “quality” is what works to your specific apps and what you may anticipate to not lose its mind within the midnight.
search Google and you may find architectures that leverage 500 different tools to get code from decide to live production and maintain the app jogging.
You’ll see Puppet stacked on Chef, stacked on Docker, stacked on Kubernetes (i have severely visible this in wild.), via CloudFormation templates generated by means of Troposphere, being fed through Jenkins, Artifactory, and Subversion, stacked on Rundeck, stacked on ServiceNow, plugged into endless other matters.
that is insane. Please don’t reflect those architectures. they’re the fever goals of engineers who build automation for the sake of automation. this is how humans turn out to be designing in lots of hidden failure factors even as seeking to stamp out unmarried points of failure.
maximum of all, it’s miles infrastructure and deployment that isn’t reliable, which counters the primary intention of building automation within the first location. There are too many shifting portions, too many possibilities for something to move wrong. It’s additionally typically too complex for anybody individual to clearly recognize.
Infrastructure-as-code also inherited a bent closer to over-abstraction. It’s one factor to apply IaaS or PaaS, every other to construct black-field abstractions that you have to assist in your own. There are alternate-offs, of course, but they’re not often taken into consideration whilst there’s too robust a focal point on “neat” or “novel”. packing containers (that have some terrific use instances) are a terrific instance:

To be dependable, your tool set and configurations ought to be, no longer always easy, but as easy as possible.
the space Shuttles weren’t simple, they required more than one layers of redundancy and had inherent complexity, however I guarantee you NASA engineers weren’t adding more sprockets simply due to the fact they examine a weblog about them one time.
An as-easy-as-possible solution would possibly look like… simply Jenkins. It might be Ansible, Jenkins, and CodeDeploy. It is probably 10 well-justified equipment, however it certainly isn’t 50.
Any delight from an structure you’ve designed need to come from how little you operate, now not how a great deal. constructing simple is difficult, manner tougher than leveraging all the shortcuts that layering gear on top of each different affords. but, unless you want to construct monsters that wake you up inside the nighttime, simplicity is needed.