SlideShare a Scribd company logo
Rethinking the infrastructure
delivery lifecycle
Moving beyond
spaghetti infrastructure Kief Morris
Global Infrastructure Practice Lead
July, 2024
My journey
CFEngine
FAI
2000
Puppet
Chef
VMWare
DevOps
CD
Cloud
1st
Edition
2nd
Edition
2010 2020
Various digital startups and scaleups
Learning and
adopting
Thoughtworks consultant
Helping enterprises
with adoption
Thoughtworks global role
3rd
Edition
Exploring and
sharing what's next
Our
infrastructure
codebases are
spaghetti
Problems with
infrastructure
● Too much custom work
● Blocker rather than enabler
● Costs not well-aligned
● Lack of confidence
● Legacy accumulates
Goals
● Share more infrastructure code
● Empower teams
● Build governance in
● Lower the cost of scaling
● Continuously reduce legacy
How?
Rethink infrastructure code architecture
Rethink infrastructure code delivery
Rethink infrastructure code deployment
Rethinking
infrastructure code
architecture
Beyond monolithic
infrastructure
deployments
What is an infrastructure monolith?
Deploy
Infrastructure
project
and is deployed
as a single unit
that defines
infrastructure for
different workloads
What is an infrastructure monolith?
Deploy
Infrastructure
project
and is deployed
as a single unit
that defines
infrastructure for
different workloads
Low cohesion
High coupling
What is an infrastructure monolith?
Deploy
Infrastructure
project code
and is deployed
as a single unit
that defines
infrastructure for
different workloads
Low cohesion
High coupling
Barriers to change
Barriers to quality
Are code libraries the solution?
Deploy
Infrastructure
project code
Infrastructure
code libraries
Are code libraries the solution?
Deploy
Infrastructure
project code
Infrastructure
code libraries
Libraries are useful
for organizing and
sharing code
But they don't
reduce the size or
risk of deployments
From monolith to composable deployments
Deploy
From monolith to composable deployments
Separately
deployable
infrastructure
components
Separately
developed,
tested, and
delivered
We need more
helpful
abstractions
About
abstractions
● Abstractions that hide stuff are
unhelpful
● Abstractions that disempower
people are unhelpful
● Abstractions that support
cognitive focus are helpful
Current
infrastructure
abstractions are
not helpful enough
● Infrastructure code is super low
level
● Great for systems administrators,
who think at this level
● Not great for application owners,
who don't think at this level
Infrastructure
code abstractions
Workload
IaaS Resources
Stacks:
Deployable
components
Workload
IaaS Resources
Infrastructure stacks
Infrastructure
Products:
Consumable
components
Workload
IaaS Resources
Infrastructure stacks
Infrastructure products
Rethinking
infrastructure code
delivery
Common issues
● Environments are difficult and
expensive to create and change
● Environments are inconsistent
and outdated
● Not enough environments
available
● Environments are
over-provisioned and
under-utilized
ENVIRONMENT ENVIRONMENT ENVIRONMENT
Infrastructure delivery lifecycle
Develop Deploy
Use
Recoupling the
infrastructure
delivery lifecycle
ENVIRONMENT ENVIRONMENT ENVIRONMENT
Bespoke environments as code
Develop Deploy
Use
Infrastructure code
developed and deployed
for a specific workload
and its environments
Creates coupling across
the infrastructure
delivery lifecycle
ENVIRONMENT ENVIRONMENT ENVIRONMENT
Bespoke environments
Develop Deploy
Use
Infrastructure code
developed and deployed
for a specific workload
and its environments
Creates coupling across
the infrastructure
delivery lifecycle
This creates
issues at scale Silos, bottlenecks
ENVIRONMENT
Development and deployment are coupled
Develop Deploy
Use
Responsibility for
developing, configuring,
and deploying
infrastructure code
Responsibility
for making
everything work
ENVIRONMENT
Decoupling development and deployment
Develop Deploy
Use
Responsibility for
developing
infrastructure code
Responsibility for
configuring,
deploying, and using
the infrastructure
Repository makes
components
available to deploy
ENVIRONMENT
Decoupling development and deployment
Develop Deploy
Use
Pipelines deliver
deployable infrastructure
components
Self-service
configuration and
deployment of
infrastructure
components
ENVIRONMENT
Decoupling development and deployment
Develop Deploy
Use
Multiple pipelines to
provide composable
infrastructure components
Infrastructure
components are
independently
deployed
Rethinking
infrastructure code
deployment
Application-
driven
infrastructure
deployment
Bottom-up infrastructure deployment
Deploy
Use
Configure and deploy
infrastructure in isolation
from deploying the
software that runs on it
Application-driven infrastructure deployment
Deploy
Use
Infrastructure deployment
is triggered when the
workload that uses it is
deployed
Application-driven infrastructure deployment
We can use this to deploy
different composable
infrastructure components
for multiple workloads
Infrastructure deployment
is triggered when the
workload that uses it is
deployed
Application-driven infrastructure deployment
But, how do we handle
deploying shared
infrastructure?
We can use this to deploy
different composable
infrastructure components
for multiple workloads
Infrastructure deployment
is triggered when the
workload that uses it is
deployed
Composable
deployment
contexts
Composable deployment contexts
Workload-specific
infrastructure
A context can include
multiple deployable
infrastructure
components
Composable deployment contexts
Workload-specific
infrastructure
Shared
infrastructure
Composable deployment contexts
Workload-specific
infrastructure
Shared
infrastructure
Workload groups
Composable deployment contexts
Workload-specific
infrastructure
Shared
infrastructure
Workload groups
Composable deployment contexts
Workload-specific
infrastructure
Shared
infrastructure
Platform services
Workload groups
Composable deployment contexts
Infrastructure should
be defined as close to
the workload as
possible
Lower contexts should
be ignorant of their
consumers
Deploying
infrastructure by
context
Options for
deploying
infrastructure by
context
● Application deployment trigger
● Pipeline stage
● Developer portal
● Platform framework
How can you use
these ideas?
Atlantis
Control Monkey
Crossplane
Digger
env0
Garden
Gruntwork DevOps
HCP Terraform
Harness
Pulumi Cloud
Scalr
Spacelift
Terrakube
Terramate
Terrateam
Infrablocks
Terragrunt
Terraspace
Cluster.dev
Gruntwork DevOps
Infrablocks
Resourcely
Tools and things that may or may not be useful
Codebase and builds
Deployment and
orchestration
Infrastructure products
and catalogs
http://infrastructure-as-code.com
Rethinking the infrastructure
delivery lifecycle
Moving beyond
spaghetti infrastructure
Global Infrastructure Practice Lead
July, 2024
http://infrastructure-as-code.com
Kief Morris
Thank
ou!

More Related Content

[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf