Building resilient systems with Sam Newman
3779 segments
I describe microservices as being an
architecture of last resort.
>> Really?
>> Yeah. Yeah. Absolutely. What a lot of
people get wrong, I think, is they adopt
microservices and they think other magic
stuff's going to happen.
>> You talk about the three rules of
distributed systems. What are these
three rules? The first is that you can't
send information instantaneously from
point A to point B. Rule number two is
sometimes the thing you want to talk to
isn't there. And the third rule is that
resource pools are not infinite. The
vast majority of the time when you have
a system outage, just down to that, some
resource has been totally saturated
somewhere. What are the things that we
know that we do not know about AI?
>> I think the tech world in general is
quite naive about AI and fundamentally
misunderstand.
Sam Newman is the author who wrote
probably the most widely read book on
microservices. And yet, as you heard, he
said that microservices are an
architecture of the last resort. But
why? Sam was in the room when the term
microservices was coined. I find him to
be one of the most thoughtful engineers
on this topic as well as on resilient
systems and his latest book building
resilient distributed systems is out
now. Today we cover specs versus code as
a source of truth and why Sam says that
production is truth. Item potency keys
versus fingerprints and why you should
avoid item potency keys when possible.
the four dimensions of resilience,
robustness, rebound, graceful
extensibility, and sustained
adaptability, cognitive depth and
cognitive surrender, and Sam's advice on
how to better use AI to avoid these and
many more. If you want to understand
what it takes to build resilient systems
from an expert who has been needing this
topic for 10 plus years, this episode is
for you. This episode is presented by
Turbopuffer, the AI retrieval layer
built on object storage. It's fast,
cheap, and extremely scalable. Andropic,
Cognition, Notion, and many others are
happy customers. Before we start, let me
mention Tire, our season sponsor, and a
product and team I'm very bullish on.
You probably already know that Git
hosting has a problem. AI agents. Git is
increasingly becoming a bottleneck for
modern agent heavy software development.
Engines like you or me are creating more
code with agents. Those agents push more
code and most of us are running parallel
agents, which push way more code. GitHub
is clearly struggling to keep up and has
frequent outages. So, what's the
solution? Entire was founded by GitHub's
last CEO, Thomas Dumpka, who by the way
was a guest on a podcast when he was
still at GitHub. And Thomas revealed Git
hosting for the Agentic era from
scratch. Entire was built to be very
fast and to have your repos regionally
close to you to reduce latency. And this
allows for fleets of agents to push in
parallel. And Entire's performance is
next level. The repo can handle 418
pushes per second, which is up to 89
times faster than every competitor on
the market. When GitHub is down, you can
still keep working and you don't even
need to migrate away from GitHub. You
just sign up to Entire and the platform
mirrors your repo. And here's a neat
thing. Have you ever wondered what
prompt resulted in this specific code
being generated? I find that the prompt
and conversation with the agent carries
more information than the PR itself.
Often times, entire captures all the
prompt history with your agent right
inside of the repo easy to check back.
And it's got a pretty innovative UI to
show all of this. If you're looking for
Git hosting that works even when GitHub
is down, head to entire.io/pragmatic,
install the CLI and mirror your repo
with a click. I've already done it and I
love it. Oh, and did I mention that it
works with any agent and it's open
source? Sam, it's great to have you on
the podcast.
>> Thank you so much for having me. Happy
to be here. Really happy to be here. Big
fan of the show, as they say. I'm not
going to lie, I've become a bit of a a
millennial and I think I watch a lot of
shorts rather than watching the whole
things now and becoming my son. But
>> yeah, Millennial is a new boomer
apparently I've learned. So
>> God, I was I was happy enough being Gen
Y. Now I'm wherever I am now.
>> Well, so so let's go back to the the
beginning. You've been known for a lot
of your books, your takes on resilience
system, microservices. Before that, you
worked at Thought Works, but let's
rewind to the very beginning. How did
you get interested in tech and
computers? I'm quite fortunate living in
UK. We had at places an access to
computers quite early on. We had an
Acorn Electron at home, which was sort
of one of the generations of the BBC
computers that came after the BBCB. And
then I got a Spectrum 1283,
which is the Spectrum that had the
built-in tape drive.
>> This is way before the Commodores.
>> I think some of this was the B. I think
I'm pretty sure that the Acorn Electron
was pre-Comodore, but the Spectrum would
have been around the same as well. The
UK was a bit more of a Spectrum and BBC
market, whereas the US, the Commodores
and the Ataries and things were a bit
bigger. So that's that sort of got me a
bit interested and then I always stayed
interested in it. Dad had a computer. I
did the very boring thing. I went to
uni. I did a software engineering degree
at a place called Deontford University,
which the running joke in my family is
it's the in the top five universities in
the Leicester area. There are only two
universities in Leicester. It was a I
mean it was I loved it actually. It was
a great class. It's basically MIT
syllabus. And then I just did the work
after I got a great um back then we did
these things called uh sandwich courses.
>> Sandwich course.
>> Yeah. And so basically the idea was you
would do two years of study, you do a
year in industry that was paid but you
effectively going in as a student and
then you did your your final year.
>> Oh, nice.
>> Which is actually fantastic cuz I kind
of was drifting a bit and when I did my
year in industry
>> so many things clicked. It meant as much
focus going in and I got to do work for
a company called back then they were
called GC GC also now that was called
ALSTOM and we did software for the
European Space Agency and gas and steam
turbines. Yeah, it was really cool. I
joined about the first time at that
about and then I went back after and
when I went back it was just around the
time the first com boom and so everybody
left. So I went from being the person
that was doing like nothing to person
did everything. But I remember my first
week there I was given a 4R77 codebase.
So forran77 was released in the year I
was born and every single for loop had a
break condition because we were
basically doing analysis on these Unix
machines and this if the models and
these the time on the machines was
expensive and we were worried about
accidental infinite loops. This is I was
trying to solve the halting problem
basically. So every for loop across
these 8,000 files had a break condition
of I think it was 99,999
loops. And if you went over that, the
program basically broke and aborted. The
models had got bigger. The computer got
more powerful. Go through and change
them all by by hand back then.
>> By hand. Well, this is one of the nicest
things that anyone's ever done to me in
a professional career because for 77 is
based on the old um punch card
limitations to an extent. So your lines
can't go very long. So it's all a bit
fiddly. You can't go and put a nine. And
my boss said, I reckon I reckon it will
take you about two weeks if you do it by
hand or and he slid a book across to me.
You can read this. And he said he gave
me a copy of the O'Reilly said an orc
book. And so I spent two days learning
how to do regular expressions. And I
wrote a refactoring using regular
expressions, accounting for line lengths
and everything else. And it's I think
the closest I've ever come to feeling
like a god. I did it and I thought
that's the thrill. That's the absolute
I'm not sure if it's a joke or a story,
but you know, the two the two um
builders who need to build a wall and
and one of them starts to build the wall
one by one by one and the other one is
kind of drawing making plans and like I
don't know like it takes three days to
build the wall and first two days this
guy does nothing and the builder
building it feels really good and then
on day three this builder like builds a
machine that builds or or like puts
together a machine that builds the wall
for them and then
>> yeah but sometime and sometimes of
course the wall falls down the moment
you set the machine I thing is I love
that that story that story was all true
and it it's one of the earliest times I
can remember learning something and
having such a vis visceral reaction and
I remember this has been just towards
when the end of last thought works some
grads in and they asked to tell some
stories about like what had happened in
previous career and I told the story I
said I added the nine made the models
bigger and then one of the one of the
grads said why didn't you just replace
it all with a constant so you could just
change the number once anytime in the
future. And I was like,
I thought I'm learning once again. Yeah.
So that that's also why I love it. It's
like you you get humbled all the time as
industry. You get to learn stuff. Yes.
There's reinvention of the wheel going
on, but you we're inventing better
wheels the whole time. say and I think
it's just nice to remind us every now
and then I'm sure everyone who's built
code and programs like at some point you
have the realization that you do feel
like a god that you can do things with
these things which is just so difficult
to do by hand right like there's
>> I think we forget about that when it's
kind of dayto-day and we're just like
doing our stuff or even like right now
we're using LMS which also do incredible
magical stuff that would have been
impossible but like it's kind of cool
that and and we are in charge we can do
amazing stuff you get that little fizzy
dopamine hit. And I think that's
something we're struggling with a bit
now is as people are getting further
away from the code, they're trying to
work out like how do I still get that
kind of dopamine hit in the same way.
>> Um it's not as much an issue for me
because I' later on, you know, I've been
doing this for almost 30 years now and
I've already been mostly working at the
area of architecture for and sort of
architecture and infrastructure for a
while. So I feel a little bit more
removed but it's uh yeah talking to my
son who's a programmer. He's got into it
around an interesting time right now.
>> And then you eventually made your way to
Thought Works where you spent a bunch of
time. What kinds of things did you do at
Thought Works? And what are what are
things that you learned there?
>> I did anything. I mean it was I joined
when there were probably just under 400
people left with about 4,000 and I
worked in you know got to go all over
the place. I joined at a good time
because a lot of the I mean we're very
much an XP shop and I think that the
core extreme programming. Yeah. I think
the core of the business still kind of
primarily is and I speak to people there
as well.
>> By the way, XP like was that influenced
by by Ken Ken Beck's XP?
>> Yeah. Know that the extreme programming
is very much it's it's it's Kent's
extreme programming. There was a bit of
a London flavor. Um so the kind of
London school of test development and
extreme the extreme Tuesday club XDC
around here. So what what's what's the
London flavor of XP and TV? It's sort of
like if you want to know you probably
need to read Growing Object-oriented
software guided by tests one of the
worst titled books in existence written
by a couple of friends of mine um Steve
Freeman and Matt Price and I think that
was a lot there's a lot of people in the
community around here that knew that
there's a rich meetup scene and so I
kind of got introduced some people
through there and came in and I jo I was
same time I was offered a job by
somebody else was a bank the bank could
tell me exactly what I was going to be
doing and thought works basically
the recruiter at the time, he's now one
of my very good friends, one of my
oldest friends now, she said to me, I
don't really know what you'll be doing.
And I'm like, that sounds like a job for
me.
>> I went for that one. And this is at a
time when like it, you know, we talk
about continuous integration, but the
tooling wasn't there and talked about
TDD and the tooling wasn't there. So, it
was in, you know, it was around that
sort of time that we started I started
building the build pipeline stuff in
about 2004. And then I worked Dave Dave
Farley was my first tech lead. Uh worked
alongside Dave Farley.
>> Yeah. Yeah. He was my first tech lead at
Thoughtworks. I I was one of the people
that interviewed Jez Humble to backfill
for me on a project at No way. So your
project at AOL of all places and I we
needed a backfield because I was like a
I'm sort of half admin halfdev really is
how I see myself. So we we needed
someone to take over my job and so I I
interviewed Jez. Um, and so I was around
when a lot of interesting things were
happening. So I was fortunate enough to
be there while we were sort of kicking
those ideas around. And obviously people
like Dave and and Jez put those ideas
together really really well. You're sort
of surrounded by everyone talking and
thinking about these ideas. I think you
got that I got the idea very early on
that this stuff's all up for grabs.
These things aren't set in stone that we
can push. And when you're saying these
things like you mentioned continuous
delivery, you mentioned what what other
>> um test automation.
>> Yeah.
>> Um build pipeline optimization, uh
infrastructure automation. I went over
to the US in 2007 actually to work in a
big I actually worked at Google for like
a year and a half for as the
thoughtworks employee.
>> Wow. In Google is we were doing we were
there doing a project um this all been
talked about publicly. It's a great
write up by Mike Bland all about our
experiences. It was me, a few of me, a
few of my Thor colleagues, some people
from Industrial Logic and some people
from Pivotal, the old Pivotal pre, you
know, pre-acquisition.
>> They were known for their really
excellent engineering culture
>> back when it was just Robbie's company.
And we were there to teach Googlers
primarily how to write automated tests
and how to write code that was testable.
And so I got out there and I was talking
to people out in the valley and stuff.
It's like we were going into these
enterprise companies doing test
automation using stuff like Selenium.
And you go around talking to people and
it's like people didn't I I remember
having conversations with people at like
Yahoo and even a big chunks of Google
who did not think you could do
functional automated testing of like
websites and stuff like
>> I guess cuz they just never did it
right.
>> Yeah. Absolutely. And for me like I hate
it whenever I haven't pushed myself or
like found a better way of doing
something. And I I was lucky enough that
early days in ThoughtWorks, that was
just a constant churn of ideas and
reinvention. I mean, goodness knows how
many mocking frameworks and inversion of
control things I was I I built two
different replacements for cruise
control myself, right? And so, but like
I you know, it was at that time I
created thing called DB deploy my
friends Nick Ashley and Graham Tapley,
which was like the first database
refactoring tool and all these sorts of
things because they didn't exist. needed
them and it was like if you if you want
to do it do it that was the mindset and
so I think there was always this idea
working at Thoughtworks was always like
what's next and I was quite fortunate
that cuz Thor works was growing so much
there was always things needed to be
done and my default was normally just to
say yes to everything so I got to travel
all over the world was fantastic met my
wife through works most of my best
friends have all come from Thor works
now still to this day so although it's
not been there for a long time it was
kind of really formative I think in
terms of that and it It's really
interesting because Thoughtworks has a
alumni pipeline people who used to work
there who are now really well known in
the industry for their ideas for for
think differently. Some some of them
educate people others uh have created
businesses to to build software
in better ways in certain dimensions.
And it's just interesting because like
usually I wouldn't think of I I'll just
like put it in a box like you know you
have product companies like like Google
like Meta like they have they build
their own products and and you have like
different tiers of these companies some
can afford the best people and they have
an external engineering culture again
Google was known for this Meta to some
extent and there's some companies maybe
who are like lower in the tier and then
you have the so-called consultancies who
are you know they don't build their own
stuff or they know do too much of it
they come in and they help companies
build or you have a problem and you hire
a group of experts Thoughtworks
technically is in this group and usually
you would not think that there's too
much innovation going on in these places
but with thought with thought works
proves to me yourself and other people
it's actually you can have like when you
are the best in what you do globally you
can actually have a lot of innovation
happening there as well right
>> yeah and it was innovation with a
different set of constraints I mean I
would say there aren't that many people
that have come from Thoughtworks that
were really great startup product people
I mean a lot of you know a lot of
thought workers make excellent scale up
people once you're all together actually
very few real entrepreneurs that came
out of the Thoughtworks machine. I I
know a few of them. There aren't many of
them. But I think there was always the
opportunity
to innovate even within a constrained
enterprise environment. So much of our
working conditions as a consultancy who
mostly did co-source delivery at that
time. We were doing kind of co-source
delivery, a bit of enablement through
delivery. Your working conditions are
often based on what the client does
>> and unless you're there explicitly to
change how the client builds software.
So what what you were what you got. But
that was self-perpetuating because we
were already used to sort of challenging
and pushing and trying to do new things.
That spirit carried on. And so I think
we grew quite aggressively but not that
aggressively rotating people through and
that spirit kind of carried on. I mean
look we had to start most engagements
with convincing people why testing was a
good why pairing was a good idea let
alone TDD.
>> Yeah. And I imagine how the conversation
went like a manager going like well what
would you pay then I have like you know
like eight engineers and now you're
making it four which sounds like a
terrible thing to do right
>> which and then this is I mean I had good
fortune because because of the people
because of work at thought as I got to
know Martin Fowler quite well and you
know he supported me a lot when I read
my first book I still remember when he
said well programming is not typing and
fundamentally it made it click for me
was having those conversations with
clients if the client thinks that
programming is typing
and That's why they don't want you to
pair program. Well, then you've got a
fundamental problem that needs to be
dealt with. And it's not a conversation
about pairing. The conversation is what
do you think programming actually is?
Well, but let's bring this a little bit
forward because right now we're having
the same conversation around right for a
long for a lot of CEOs, even founders
are thinking who have been building tech
companies, you know, they all look at
what what is the most timeconuming part
of what we do in building software. 50%
of the time has historically been
writing the code. So a lot of people
think you know like programming is code
and LMS are really good at turning out
code. So what is programming? Okay,
there's the there's programming I think
it's Peter no's article the guy who came
up with barkers nor form well he's no in
barkers norm he wrote his paper years
ago which you won the chewing award for
and he sort of describes
like the the program as being a theory
that lives in the mind of the developers
that it's actually us together working
together collectively who builds a
program
>> the fact that we happen to make that
program work through code the code is
really a side effect of how we work
together and I think product development
is just that extended right what we're
building is collectively we are building
a system together and the code is one of
the mechanisms we use to deliver the
system it's not the only thing so I
think holistically that's what it's all
about it's just that we focus on the
code because that's historically been
where we sort of spend the time but I
mean this is also classic theory of
constraint stuff though, right? If you
speed one bit up, you get constraints
elsewhere and it exposes friction points
elsewhere. I would also argue that a lot
of the time coding was not the problem
or not the bottleneck. It was how the
coding was done,
>> delayed feedback cycles and things. But
I do come back to that Peter piece again
because it's like Margaret an story
referenced it recently in her term pay
debt. But it's like building of software
is a collective ex it's a collective
endeavor. It's people working together
who build software. uh Kent put it in
his 21st book that software design isn't
exercising human relationships, right?
AI doesn't change that. And I think all
that's really happened over say the last
15 years in my experience is that we've
got a bit better at understanding that
we need better working relationships
like people like product owners for
example. But so that's what the pro the
programming is the art of creating. It's
the collective art of creating software
and it's not just developers that do
that. Never has been.
>> And so after thought works you've you've
gone independent, right? I did three
startups. None of them worked out for
different reasons. So don't ask me for
advice on how to make a successful
startup. Um and then I went independent.
Yeah. Moved back. I was living in
Australia at the time and moved back
from Australia and yeah, I've been
independent ever since. So doing kind of
a mix of stuff really ever since. I'd
written the first book of about
microservices. I thought my spare time
at Thoughtworks and then uh that book
came out and I'd been at Thoughtworks a
long time and I realized that there's
always a danger becoming
institutionalized.
You get to a point with a company, it's
like I think there's things as companies
do to change and I've tried changing
those things and they don't want me to
change them. So either I'm bad at
changing them, which is probably true,
or they don't think it needs to be
changed, which is also probably true.
And it's like I could hang around and
get bitter. I just go now. I go now. So
I went off and I thought I went
independent. It's been really
interesting ever since because it's sort
of on one level the shackles are off.
Um, the problem with working for
yourself though is that the boss is
frequently an
>> So,
current Sam frequently is cursing past
Sam for the commitments he's made.
>> Um,
>> that's one lesson, I guess.
>> Yeah. Oh, yeah. Yeah. Yeah. Yeah. I
mean, as I say, I'm I'm almost 15. I'm
still not learning the lessons of that,
right? And I've you've made those
mistakes for enough years now.
>> So, I wanted to talk about
microservices. Uh, you you have written
the book building microservices uh in in
2015. And you started to write it in
2014 and as reference Uber started to
talk about how they have thousands of
microservices in 2015. So you were kind
of writing this book right as yes
>> the concept of microservices which was
starting to go mainstream across
startups. Do you remember how and when
microservices took off and where was it
even coined? Was was it Martin Fowler?
>> No, it was James Lewis. So going back in
the day so you got to remember again
it's like something in the water. It's
like we have a bushfire. there was a lot
of buildup before the bushfire kicked
off and uh so this would have been 2011
to 2012 James was sort of talking to a
bunch of uh different companies who were
building what would have classed back
then as serviceoriented architectures
and early there'd been this kind of what
we refer to as the gorilla sa movement
which is an aim to simplify
serviceoriented architecture you know
shift over to rest work done by people
like yeah the original serviceoriented
architecture had like this this XML
format. What was the name?
>> Oh, wisdom and simple object access
protocol. Never has the word simple been
less well used.
>> Samap soap.
>> You had soap.
>> Soap. Yeah.
>> Yeah. Start with simple and the most
complex thing ever.
>> Exactly. So you had this whole heavy
weight and then people like Ian Weber
and and Ian Robinson and Jim Weber had
like been pushing centralized had
managers like make the endpoints smart
and the pipes dumb to keep things
simple. Put all the smarts in. So this
is all background. We were also at this
time doing a lot of work around like I
was running the cont practice for Europe
at the time and so a lot of my
engagements were like optimizing the
final mile. So you've written the code
and it's like how do I get it here into
production as quickly and effectively as
possible. So basically taking the ideas
of continuous delivery. So I was around
when JZ and Dave started working on
those in 2006. I' I'd had the
conversations with them. So that was all
happening. James was talking to
companies that were creating service
oriented architectures where they could
replace the services quite quickly. And
so basically you'd look at it and say
it's a finer grained form of S SOA. So
that was all happening. So James went we
had this architectural symposium up in
the Lake District and James pitched this
idea. He was called the micro apps at
the time in this room and somebody else
in the room said they're more like
services. Don't remember who said it
there about 10 of us in the room. most
of us were hung over and then James and
Ian so James and Martin wrote the first
post. So the first paper on Martin's
website was written by it was sort of
James' original kind of discovery of
this pattern that he called
microservices. At the same time I was
doing a lot of stuff around
infrastructure automation and so I was
coming in it from a different lens. So I
think James was coming at it more from
an architectural lens and I was coming
into it from a continuous delivery lens.
I spent at this point almost 10 years
with that being my focus. Yeah.
>> And so I was starting to see the
architectural impediment.
So if I want to change things
frequently, but the things I want to
change are integrated with other things.
>> Yeah. Like like like a monolith now. Now
that's how we would describe it.
>> Exactly. Right. I mean I I did a talk
called designing for rapid release in
2012 which is sort of touching this. So
basically James had this sort of had put
a name to this stuff and put some
patterns on it and I sort of thought
hang on a minute that stuff I was
talking about over here seems these
things seem quite sensible and I'd
always wanted to write a book. I mean
honestly I wanted to write an animal
book. I wanted to write an O'Reilly book
because that Zenor book I was given book
y
>> and so I just started writing and I I've
always found writing quite I'm quite
lucky that I find writing enjoyable and
quite easy. So I just yeah sat down and
wrote the book and that's it. But for me
it was an extension of continuous
delivery and it was a a style of
architecture that was only possible
because of continuous deliver because of
DevOps. We'd had these ideas before. I
mean Erlang has is is an representation
of these ideas but making it real and
practical and attractable thing. But I
mean really fundamentally it's just a
the whole thing has been an exercise in
smuggling through um concepts from the
1970s which is it's fine by me right if
I get people to pay attention to
information hiding and uh coupling and
cohesion that's all right but then as as
you said like this was there was a spark
before the bushfire and then the
bushfire did start like suddenly again I
think Uber was a very notable company
starting to talk in public about having
thousands of microservices on on
conferences like infoq and it got
people's attention and then it kind of
seemed that overnight a lot of stars
started to say like you know what let's
just do microservices
>> there was a bit of rebadging going on I
mean I was lucky when I wrote the first
book that I met uh Ben Christensen
fairly early on through the Yao
conference Ben was and Ben was looking
at um looking after performance and sort
of reliability at Netflix and I also
knew people at REA and these were two
early rea.com.au EU in Australia and
these were companies that were very much
pushing the envelope in different ways
and so I had two very good real world
case studies to draw upon for my book
>> but most other people weren't talking as
publicly around that and also before
Netflix referred to their architecture
as microservices they just referred to
it as fine grained SOA and to an extent
you know my understandings that's what
happened at Uber and elsewhere we didn't
have a different word for it then of
course what happened was that everyone
just called their S so SOA architectures
microservices which is sort of to be you
know semantic diffusion is a thing I is
to be expected so I just kept fighting
the good fight for like it's just
independent deployability and you know
it's an I've always positioned it as
it's an opinionated style of S so SOA
>> you may not agree with the opinions
that's fine do something else then but
there are some opinions
>> so then what is the difference between
microservices and what was it or service
>> serviceoriented architecture
>> service oriented arch what are the
differences
in in in your very
>> now to be clear right I have my
definition you might have your own
definition but I'm the one that wrote
the books on it so my definition wins
that's how that's always be my argument
right your own damn book um I've always
presented it as it's there are two kind
of very strong opinions I think we hold
with microservices the first and it's
most important is that your
microservices need to be independently
deployable
>> so your unit of deployment unit of
change needs to be a single microser
boundary a single service boundary
>> um and you know rather than undeploy
deploying everything together that's
three services at the same time etc.
even mini or less right and it's a
single service of time that's clear
>> that's it and the second one which is
which I think there are can be
exceptions to is that your kind of
default way for defining your service
boundaries is around your business
domain this is taking the concepts of
you can use domain you don't have to but
rather than a lot of sa architectures
were dominated to an extent by technical
decomposition the classical ender
architectures
layered architectures where you've
picked your service decomposition based
on the nature of
rather than thinking about the business
functionality. That's a bit softer.
Independent deployability is the main
thing though.
>> Okay. Well, because I'm now thinking
back at Uber. I was at Uber at the time
when your book was starting to become
really popular. I was there from 2016
and we had independently deployable
services. We didn't really think too
much about the businesses or or domain.
They they they had obviously their their
interfaces. They had contracts that they
offered uh increasingly strongly typed
and we we used
their voice to do it. But it was just
more like I mean as you can imagine
there was just devs often times not very
experienced devs who were like all right
like let's build a new service here's
the interface here's and then anyone can
use it uh which actually like there was
these things where a dev or even a not
very experienced dev deploy the microser
and then others start to use it and
suddenly it became you know years later
there would be these exercises to figure
out the hot path and and label the
services and then this like lone service
was on the path of like some really it
needed to be really accessible as a
really high tier service cuz a lot of
others were using it. I mean there was
always I mean also those sorts of
environments when I was chatting to
people at SoundCloud similar about that
it's something I mean and this is also
like about a corporate culture and like
what was acceptable like in that kind of
environment just go and do stuff it's
absolutely fine and that I think that's
that's why Uber for example went to I
just talked with Tuan Palm the C2 at the
time about like what was the real deal
about microservices and he said Uber
like he never really wanted that many
services but it was just more of a
constraint because Uber had a monolith
the story was like which he told on a
podcast, we'll link it in the show notes
below, that Uber had this this big
monolith and it was really slow. It was
slowing delivery down and they needed
they needed to move fast because all the
other competitors were out there. So
they said, "All right, like they wanted
to get rid of the models and put
together smaller services, but they knew
unless they had a strong mandate that
you cannot add new stuff to it. This
will never happen." So they said the
mandate was everything new needs to be
your own service. You take care of it.
We don't care. And suddenly so many
independent services were born, which
was not the goal. and years after the
fact that when Uber decomposed the
monolith, they're now looking at maybe
sensibly merging based on business
domain etc. But this story wasn't really
told at the time. It was just oh look
like Uber has thousands of microservices
almost one or two per engineer right and
this is what the world saw.
>> I mean it's also though but this is the
reality of microser adoption is like
it's just a tool toolbox. I mean I
describe microservices as being an
architecture of last resort.
>> Really?
>> Yeah. Yeah. Absolutely. because it
pushes you quite naturally to a more
aggressive distribution of your of your
state and everything else. And so you
have to have a good reason. One of the
best reasons to use microservices is if
what you actually want is an
organization with a high degree of
autonomy. If what you want is teams who
are able to act independently from each
other, the microser architecture is a
fantastically good fit. But then really
it's a means to an end, right? So that's
often what a lot of people get wrong, I
think, is they adopt microservices and
they think this other magic stuff's
going to happen. No, if you want
organizational autonomy, that's what
you're working towards. And this is just
one of the mechanisms to get you there.
And most of the enterprise
organizations, the vast majority of ones
I've worked with in this space, that's
what they're after. They've got huge
numbers of developers, lots of middle
management, they're not getting much
work done. They're thinking, what do we
do? organizational autonomy becomes, you
know, the solution to all problems.
Again, I don't always get to have a say
whether or not it's a good idea and I
think that's where microservices can be
especially useful. I mean, there are
other exceptions as well. And so, an
organization like you know Uber uh I I
mean I say I know at Netflix as well
things like domain design weren't talked
about Netflix but the teams were already
fairly well scoped around areas of
product already. Yeah.
>> And so you had those natural high level
boundaries around the business domain.
those things flowed naturally and so
that for me was a logical kind of
stepping stone. You also have the
difference and this is something I found
realized quite early on when you go and
do the work in the dotcoms versus the
enterprise organizations. When you say
dotcoms, you mean the digital companies,
tech companies,
>> tech companies. I'm old enough that I
still talk about docoms. Um, but the
tech companies, I mean, fundamentally
algorithm, you know, domain from a
domain concept are incredibly simple.
The domains are very, very simple
compared to enterprise organizations by
and large. Domains in there are much
much more complicated because they're
based on business processes that have
existed for 10, 20, 30, 40, 50 years.
>> Oh yeah. So, so what you mean in a lot
of tech companies, a product is pretty
much like here's our product, here's how
it makes money and that's kind of it.
And we have another product in Uber.
inside Uber like a simple thing is
there's rides which it makes money like
this and then there's Uber Eats which is
a separate business over time by the way
it does get more complex but but when
you start it's like really really simple
and it's really separate and it's clear
like where one ends versus where the
other begins and then you do some hacks
when you need to launch Uber Eats really
quickly and you build it on the right
infrastructure and then Uber Eats order
has like two trips attached to it
because anyway but but but but as as you
say like early on it it starts very
simple
>> but then also So in those environments
your business processes and the digital
implementation of those business
processes is evolving together. A lot of
enterprise organizations didn't have
that. I mean their first generation of
digital products were codifications of
paperbased processes.
>> Oh so so you're talking to these
companies as said before digital let's
say an Adidas or let's say a shoe
company virtually all banks.
>> Virtually all banks and and now they're
like we have all these processes and now
we need to build a software that mimics
what we do which of course is
>> that's how you start off. I mean that's
what the whole domain design book came
out 200 Eric it was danger design came
out in 2004 and it was a reflection of
the fact the vast majority of software
development was the process of us trying
to model existing non-digital processes
and how you do that I wonder if we will
have a different or but similar problem
of the same thing now that you know we
know AI tools are here we know that for
example they're great at generating code
and we have two types of companies we
have a company a digital company that
has existed preAI they're used to you
know writing product requirement
document deploying developers product
managers designers QA they all have
their roles and it it works like a
really welloiled machine and now you
have these so-called AI native startups
who just again they have a few people
they're just I from the start they're
using agents for everything they have a
very different process and at some point
when this whole thing will mature and we
will have best practices we'll have the
existing companies who like the previous
one they will try to retrofit you know
this this tooling to how they're working
today.
>> It's already happening. I mean, and the
thing is enterprise companies will
rarely be successful at doing those
first gen things because ultimately the
corporate DNA will just crush that stuff
from within, right? And it will take a
while, but I think the whole industry is
getting is grappling with the idea of
like are we now moving to a new level of
abstraction, right? So software is all
about abstractions, right? But you know,
we went from doing machine code to doing
assembly, went from assembly to general
purpose programming languages. And
you're coming back to the idea of the
program being the mental model. We would
evolve that mental model at the code
point of view. That was the most
effective place was us working at Java,
you know, Java, you know, C, whatever it
is, rather than working at assembly
level, right? And it's like, okay, well,
is actually what we're talking about
really. We're stepping that level up.
We're still actually building a product
together. We're still thinking about
what the software is. we're still
building that mental model maybe now
more collaboratively involving you know
more product people for example in that
conversation when we're writing our
specs and so the question for me is are
we ready to make that step and the
answer is no not everywhere and this is
a really good point because if if you
think about it like uh you know like one
of the the mantras inside of Facebook
used to be that I think some something
along the line that code is code is
truth or something like that but in
general in a lot of tech companies if
you want to know like how things work
like where the truth lives is it in
documents or is it in the coded business
logic it's in the code in the business
logic and if if it's well-maintained
code often well commented or structured
you can actually see the business logic
and the rules for I don't know for
example see I I feel like I've got to
channel my friend charity at this point
and say the truth is production
>> that that's everything else is is is the
lies we tell ourselves production is
truth
>> um but I think in terms of like a
definition of what the system should be
doing. There is this ongoing debate
about where is that definition? Is it
the code or is it the spec? Brigitta
broccoli did a nice article on Martin
Fowler's website recently about spectrum
development and she talks about the idea
of some companies using uh being spec
first or spec anchored and a lot of it
comes down to where they see the source
of truth being. So a lot of companies
are using things like Kirro or Spec Kit
to define a feature and then the LLM
executes that spec and you can iterate
on that process, right? And so a lot of
people they start off they use the spec
to write the code and then they throw
the spec away and then you get other
companies that keep the spec and then
when the feature changes they just
update the spec. And so they're sort of
seeing a bit the code and a bit the spec
as a source of truth in terms of what
the system should do. And then you're
start now starting to get companies
where they don't even ever look at the
code and they just look at the spec.
>> Yeah.
>> And so we're kind of going on this
spectrum. She had some great terms for
these. And I think for me it's like is
that the right path? I don't know. I
think there's a lot of questions about
what we would need to do to to get that.
we have a degree of confidence about
what happens when I execute a line of
Java code beyond the safety of the
compiler and the runtime and you know
all that stuff. There's a lot more
questions to answer I think before the
whole world is ready to say the spec is
the source of truth of what our system
is supposed to do. Production is always
going to be the real truth though just
to be clear.
>> But but I think it's a good question to
just ask yourself what however you're
building and however you're using agents
of where is the truth of your system
right now. Is it more in the code? Do
you have a spec? Is it scattered between
the minds of people? Uh- which goes back
to the the collaboration? Because again,
a lot of the reality of a lot of
startups are is a few people hold these
things in their head, right? Which is
okay in in the beginning. But of course
as you scale one of the reasons we used
to love code review which is now going
out of fashion but we used to share
information and when someone left the
company or or got ill or you know the
the famous bus factor it was okay cuz
other people understood because they
reviewed they were taking part in that
part of it but now we're with with AI
code review is some some some companies
are like well we're not going to do it
because of it's it's with too much code.
That was always one of the superpowers
of pairing, right? Pairing you if you do
if you do promiscuous pairing, you
rotate every day. When someone leaves,
everyone's got the same shared context.
That was always something people missed
around one of the benefits of pairing.
>> I think there's a lot to be said around
this. I was chatting to Chris Ford who's
sort of head of software head of
technology for Thoughtworks in in Spain
and he said the biggest problem we've
got around our around AIdriven software
delivery is tacid knowledge. There's a
lot of knowledge in our heads that we've
built up that we don't necessarily know
that we have. When you use something
like a code review, you've probably had
looked at that and that doesn't really
feel right. I wouldn't do it like that.
And sometimes it's subjectivity, but
sometimes there's something about that
that you can't quite pinpoint. Maybe you
can unpack it, maybe you can't. But
there's also like you have bunches of
things like that in your head about how
software delivery should be done, about
how the business works and everything
else. If we want to step up that level
of abstraction to work at the spec
level,
we actually need as human beings to be
able to unpack that tacet knowledge that
we have and make sure it's in the spec
if we really want to be be hands off. I
also think there's a fundamental problem
that we've got in the current way a lot
of people are doing software deliveries.
You've got I mean this comes back to the
cognitive debt stuff which is you've got
a lot of people running off in different
directions. I've seen a few people
talking about pairing with their AI
assistant. not a human. Stop pretending
it is. And so you're all going off.
You're doing more in a different
direction. That shared mental model of
the program is breaking down and there's
gaps in between. AI was supposed to free
us from drudgery, right? It it isn't for
most software developers because we're
doing more work, we've got more context
switching, we're losing that big
picture. So I think if we can work
collectively on the specs, we can
rebuild that model, then that absolutely
could be the sh source of truth. I still
think it's going to be parts our brains
and part the spec, right? But for that
to work with there does have to be the
collaboration piece. Whether or not
that's our dev teams go from being 15
people all in to about five people or
six people all in, don't know. But
collaboration is really important. You
know, Chang proper company, right? They
do proper stuff. They're excellent firm.
They recently announced they were
getting rid of any human-based code
reviews and they said we're going to
spend more time working on things like
effects working at design doc level and
actually I'm okay with that because
firstly I trust that they know what
they're doing but also there's something
about I mean I think a lot of companies
are making a mistake of not doing the
thinking whereas Shanggard is saying
we're going to spend that time doing
more important thinking right and I
think that's sort of how we should view
this I'm okay you know not looking at
the code as long as you're doing other
things to make sure the
is operating correctly and that you're
thinking critically about how the system
needs to change and evolve. If you're
just not looking at the code and you're
not caring about those other things,
well then you deserve everything that's
going to happen to you.
>> Which also goes back a little bit to
what Charity was talking about on how
you want to have systems that that value
that works about having empathy for
example for for the work that QAS and
and uh SR folks have had to own code in
production that they did not they did
not write. they don't necessarily read
or even understand, but they know how to
operate. They know what good looks like
in production. They they know what what
it looks like when it goes goes poorly.
>> I mean, that's also a bigger thing that
now more developers are having to
struggle with because if you want to do
spectriven development, you have to know
what good looks like. I did a I I run
these like sort of half day conferences
for O'Reilly online. And we did one
recently on software delivery and a load
of speakers at um and about six speakers
and four of them were talking
specifically around different different
varieties of of spectrum development
effectively and all of them came back
says you can't do this unless you can
define what good looks like and if you
can't don't bother and you know some of
those people were much more bullish like
Addie is very bullish on all of this
stuff but one of the presenters who was
doing they did they've got like a small
software fracture only 15 or three
people but like they're active ly
pulling in their observability data
their hotel stuff right into uh into
their their agent to understand how it's
changing and I think that's exposing I
think more developers into understanding
I mean this comes back to the acceptance
criteria stuff people do on stories they
always narrow around functional
requirement stuff so now it's like I
think we have to be more grown up about
those things the discipline is
absolutely important and the expertise
is still needed it's just needed at a
different place
>> Sam made a really good point that you
cannot hand your work over to agents
unless it does these two things. One,
define what good looks like. Two, prove
that your system does what this good a
definition looks like. You already know
who I need to mention when it comes to
proving that your system works as
expected. Antithesis, our season
sponsor. Agents are writing more of the
code. So, how can we trust that our
system works correctly without bugs?
Code review is increasingly naive and
ineffective approach to do so, which is
why antithesis goes well beyond this
practice. Antithesis runs your whole
system in a hostile simulation. This
simulation includes both targeted
testing and fuss testing. By running the
simulation, it finds every bug before
your users do. And because the
simulation is fully deterministic, it
doesn't only find bugs, it gives you a
perfect reproduction of every issue,
which makes it a lot easier to fix
issues. The first thing I thought when I
heard about antithesis and that it's
automated bug discovery and fully
deterministic testing that it sounds
like science fiction, but actually it's
hardcore engineering when you look under
the hood. Jane Streetfly.io and the CD
community ship agent written code with
full confidence because they know it's
been verified by antithesis. To see more
case studies and details, head to
antithesis.com/pragmatic.
I'd also like to mention our presenting
sponsor, Turbopuffer. We know it's a
database that's ridiculously fast and
extremely cheap and they are doing
something amazing. They are completely
redesigning their storage architecture
from first principles to make search
faster, cheaper, and more reliable at
scale. If you follow Turbuffer, you know
that their storage architecture was a
massive part of their early success.
Redesigning a winning architecture is a
big deal. It's one thing for query plans
to pass unit tests, which is already
happening. It's another to bring each
query plan to performance par or better
while maintaining correctness and
reliability in production. And the team
is sharing the messy reality of the
rewrite and how the v3 version is
currently a lot slower than the current
production one. For example, we can see
how coldtech search is 11 times slower
than prod and hot full text search is
126 times slower. But we can already see
some wins like hot and cold vector
search is at par or better. I really
appreciate this work in progress view
and the real-time logs and what it takes
to do a successful storage architecture
rewrite. The Turbopuffer team is keeping
on the worklog of their journey and you
can follow along at turbopuffer.com/v3.
I definitely will do. And with this,
let's get back to Sam and what QA and S3
folks already know about running code
that they didn't write. So, I I I want
to talk to you about your latest book
that is just coming out, building
resilient distributed systems.
>> Yeah. What is the book about? And why
did you feel this is a good time to
write it?
>> Years and years and years ago, I went to
Velocity which was quite a well-known
conference.
>> It's a conference. Is is it still on?
>> No. No. It was the O'Reilly conference
and it was like the conference where a
lot of the early people went to talk
about how they made their system
scalable and stuff. I got to go. It was
been like one of those career ambitions
to go to. I got to go after I' written
the first book and I got chatting to
John there who I still chat to every now
and then. he now works in this
resilience engineering space. pointed me
I don't know if it was him or one of
someone else but it pointed me at this
paper by David Woods that was all about
resilience engineering and the paper was
utterly baffling to me in absolutely no
sense to me but it was all because it's
not yeah cuz it's just it's not written
for computer scientists to read and I'm
not even a computer scientist so I was
really in trouble
>> but it was really fascinating seeing
this whole other world about how we make
how how people viewed resiliency and
then what we do in software world and
people like John were trying to take
some of those ideas in a little bit but
I found it very difficult to take some
of those ideas from sort of safety
critical systems and that type of
thinking and make it in any way, shape
or form palatable for normal people like
me. And so I kind of this was being back
what 20 2016 maybe 2015 and so I'd go
back and try and reread that paper every
six months or so and I'd read bits
around the edges and see other smarter
people than me that summarized it data
better. And then I was thinking okay
these ideas now are starting to make
sense. And then also I kind of realized
that despite my best efforts, lots of
people seem to be building microser
architectures. Even though if you've
read my books, most of my book is about
telling you not to do it.
>> But you have to read the book, which
which is called microservices.
>> I mean, let's be clear, as long as they
buy the book, that's the most important
thing, whether they read it or not.
That's just, you know, but and so then I
realized that there are more people
exposed to the the the horror, pain, and
suffering of a distributed system. And
so it was like, okay, so I've got this
stuff happening. I've got this like my
you know my my son's a developer now and
I always thought that if somebody found
themselves building a distributed system
working as part of building a
distributed system what was like the the
kind of equivalent of a rubber ring I
could give them say stay a flow and
don't drown and so the goal of the book
is to start you off with really easy
foundational simple kind of engineering
concepts about how you can start making
dealing with the problems of distributed
system but to also take you on a journey
into kind of the whole concept of
resilience engineering and so it starts
off with like really easy ideas and then
you study it gets more and more
complicated and you know so I introduce
kind of concepts like what a
sociotechnical system is the difference
between safety management and resilience
engineering these are all like big
concepts but the second chapter after
the introduction is what's observability
let's talk about hotel the sec the third
chapter is what's a timeout right and
these are all I think quite tractable
things talked
>> but they're building blocks right the
primitives for Yes.
>> For these systems and the vocabulary as
well.
>> Yeah. Absolutely. And to give, you know,
to go through and sort of distill some
of that knowledge down
>> and also to be a bit of I'm quite happy
being a bit opinionated on these things,
but I'm also lucky now because partly
because my early work, I get to chat to
more people. So, I can actually talk to
people who this is their full-time job
and try and distill down some of that
knowledge a bit. And so, I wanted that
book. Partly, it's about being
evergreen, but it was also about saying
there are lots of people building a
distributed system. Let's put what type
of systems you've got off to one side
for a moment. There are lots of people
building them whether they should or not
and they're really important to us now.
So, how do I how do I help people start
and grow? And that's that's what I
wanted to do. I mean, I enjoy the
process of writing anyway, but this is a
book I wanted to be able to give to
people. That's always been why I wrote a
book. I want the book that book every
now and I've gone and sat down to read a
book to write a book and I found someone
else has done done it already. It's like
well that exists now. So this for me was
the book that I wanted to exist but
didn't. That's kind of why I wrote it.
>> Yeah. And I I think it's a book I I I
certainly could have used like it got
dropped into a place like Uber where we
did have what I realized were
distributed systems. You don't just
large systems handling a bunch of stuff
lots of services dependent on on one
another cuz even a simple thing of like
knowing like oh you should pay attention
to observability that I mean you figure
it out after a while.
>> Yeah. Yeah.
>> But it takes a while.
>> Yeah. And I think that's I mean again I
mean maybe this is this is my attempt to
unpack some of that tacet knowledge to
an extent. I've made so many mistakes
and I keep making mistakes. I think
making mistakes is useful but I think
also creating opportunity where people
can learn from other people's mistakes
first is a good idea too. And so in the
book I also try and pull in like real
world examples and sometimes from big
companies sometimes from my mistakes to
kind of make this stuff seem real. And I
think the the other thing I think I
really try and get across is that things
go wrong. Right. I mean, resilience
engineering is all about making sure as
many things go right as possible. It's
not about making sure everything goes
right.
>> Yeah.
>> And there's also the only way you can
build resilient systems in general is
also by being honest about mistakes that
have been made and talking about them
and sharing them because that's how
everyone gets better. And if you don't
do that, you can't build a resilient
system in your company. And so this
again is my attempt to sort of highlight
all the awesome work that's gone before
the fantastic post instant reports of
people that some companies share like
when there's a system that we all use or
many of us use has an outage. I mean,
it's it's annoying, especially when
you're using it. But I always greatly
appreciate when the companies because
they don't have to do this, but when
they share a public postmortem or
incident recap or whatever that is, they
go through what happened. For example,
GitHub had an outage and they shared a
really interesting one on what all the
things that went wrong and and in what
order. And then you also have companies
where something like this happens and
they don't do anything. So, of course,
you're not obliged to in any way, but I
always have a bit of a lesson. they are
obliged to now a lot of them regulations
are now making them that they have
>> which I which I I think is great
>> yeah things like Dora and stuff in the
UK in Europe rather and I think there's
also we should also separate around that
post instant report stuff that there's
marketing and PR versus have you done a
proper post instant review now I do
think you've got duty of care really to
let users know as part of a proper post
instant review but those companies maybe
say nothing they might do a fantastic
process internally there's also the fact
that some companies that put those
things out you read them and you're like
this does feel more marketing.
>> Yeah,
>> I think a great if you want a good a
company that puts out some of the best
self- flagagillating post instant review
writeups, go for Cloudflare stuff. They
absolutely go for themselves in those.
It's like I feel like guys go easy on
yourselves, right? Everyone makes some
mistakes, but I quite like
>> and and do it they do it rapidly within
24 hours and they're a publicly traded
company. Yeah. which which I think just
goes back to the myth like some of them
are like we're publicly traded we don't
want to do it because it would give away
information for shareholders yet no like
cloud for does it and and they're fine
>> exact exactly and and and also it's
>> and it builds of trust
>> it is I mean a lot of a lot of how an
organization is perceived is is down to
how you deal with mistakes when they
occur right I mean you know nothing ever
goes perfectly for every company
>> so in in your book you talk about the
three rules of distributed systems what
are these three rules
>> so I really tried to distill this down
because I could never remember the the
eight the rule of eight that came out of
sun the fallacies of distributed
computing I always forget what those
eight were there's loads of complicated
stuff but I realized when you strip it
all down there's really only three
things that really cause all the other
problems right the first is that you
can't send information instantaneously
from point A to point B
>> it's physics I mean now it turns out
when you get into it and start talking
to people about quantum physics they say
aha
>> and they go there's a thing called
quantum entanglement which does allow
for theoretical instantaneous read of
electron spin states across arbitrary
distances at which point I point out
that a that only works for reads as far
as I'm aware and b not a networking
protocol. So like but it takes time,
right? So I want to get from A to B and
I that I can't control all of that. I
can control bits of that as a developer.
>> Y
>> I could control how much data I send. I
could control the the the payload size
technology I use to serialize and
deserialize.
>> I'm unlikely to be specifying the
network cabling or the equipment we use
or the distances between them. So not
really under my control. And the moment
you go over the public internet,
>> BGP has a bad day and your packet has
gone down the wrong trail leg of the
internet. Right. Yep.
>> So that's the rule one. It takes time.
Um and that's important to recognize
because sometimes it looks
instantaneous. It's not. Second thing,
sometimes the thing you want to talk to
isn't there. Sometimes that's under and
we do things to make it under our
control, right? Like we would run say
multiple copies of a service instance
behind a load balancer. What happens?
The load balancer fails. But I mean like
you can't control for everything, right?
I've had services taken out by a fire in
a data center. a sand caught fire and
specifically one bit of a sand. The sand
had a caching storage layer with SSDs.
These two pairs of SSDs, one of the
pairs of SSDs caught fire. The other
pair the SSDs were working fine. And so
we had these weird latency graphs coming
out of the sand like perfectly fine if
your load went through the ones that
weren't on fire, but the failovers in
the other one were rooting to be fair.
It was rooting around the bits were on
fire. I had a system uh where we had
ducting between the office buildings and
rabbits moved into the ducks and ate a
networking cable. I can't control for
rabbits, right? And sure, these things
are like they're real. Those are two
things, right? Yes, you can control for
that and you can reduce the chances, but
you can't limit those chances, right? So
sometimes, so rule number two is
sometimes the thing you want to talk to
isn't there.
>> And the third rule, I'm very grateful to
an old colleague of mine, Ben Cole, for
telling for for saying I've missing is
that resource calls are not infinite.
meaning
>> you can run out of computing resources,
CPU, memory, IO, whatever.
>> And basically your load balancer could
be overloaded and then just not respond
even though it's there and we know the
latency, but it maybe a skew fills up.
>> And the vast majority of the time when
you have a system outage, it's down to
that
>> some resource has been totally saturated
somewhere. And it might have been that
saturation might in turn have been
caused by the fact that something is
down and you're in a retry storm which
is in turn causing you know connection
starvation which is of course resource
saturation which is in turn yada yada
yada y
>> but that that's the killer and and again
I think we understand that you know sort
of intellectually all of these things
but you can go to all the concept
complicated concepts and distribute
systems and sort why is bisonantine
consensus protocol a thing well let's
just go all the way down to this bit
what about cap and packel and I just
yeah let's put that on one side remember
these three rules first and then most
problems end up becoming a little bit a
little bit easier to deal with
>> and and in the book after you introduce
these rules you start as as we mentioned
the second chapter is observability to
me that kind of suggests that this is a
really really important part for
distributed systems why is observability
so important
>> I mean the way to think about
observability is it's a property of a
system right so the more observable
something is the easier is for me to
understand how that thing is behaving
based on the external signals. When you
run a pro a system which is a single
program, you actually get some pretty
high quality signals coming out of that
program. Therefore, give you a high
degree of observability.
I can get a lot of information out of
that. I can attach a debugger to a
process. I could generate a core dump
>> and run that in. I could do a thread
dump on J on the JVM and work out where
my semifalls are blocked. If this is my
whole system, like knowing the CPU is
stuck at 100% is actually really useful
information because that's probably a
bad that's a problem. Right. So this
basic information that we pretty much
get for free with a single program gives
us a high degree of observing program
running on your machine that you have
access to.
>> Exactly. Right. Yeah. But but now when
we go to a digital system, you don't
have access to the computer in the same
way. You've got multiple computers. And
so those basic signals are harder to
get. You can't correlate them unless you
do extra work. And those individual
signals by themselves don't really give
you a proper sense of how the system is
behaving. So, so you have to do more
work to make the system observable and
as as annoying with these sorts of
things, it's much easier to do that from
the beginning than it is to retrofit it.
And then, you know, luckily we've got
things like hotel now, the open
telemetry um protocol and specification
because that at least gives us an open
framework that we a vendor agnostic. Oh,
honeycomb are the best. Charity pays me
in stickers. Just to be really clear, I
have to be I always think I work
independently. I have to be very clear.
Charity pays me in stickers. But like we
get a vendor agnostic open standard for
this now. It makes it so much easier for
me to have the conversations about this.
But if I don't get the signals coming
out of the system, if I don't get the
that stream of structured events telling
me what the hell's going on with my
system, I'm flying blind. Like how do I
know what appropriate timeout is for
from a client point of view talking to a
service? Well, I'm only going to know
that if I have a sense of well, what is
its normal uh response time um
distribution? So, I'm going to need
latencies, know the success or failure
of those latency. It's probably going to
be a plot on a histogram maybe to take a
look at it. If I don't have that
information coming out, I'm not going to
specify a timeout correctly.
>> And then we're talking about a low-level
thing like latency and and things that
we can measure at the machine level.
But, of course, is is this observability
when I'm talking about like does it work
for the user or the customer? Does it do
what they do when it they click click
the button to submit? Does it submit? Do
you look at that because we know
observability is usually we talk about
these kind of latencies the the statuses
the 500 responses that's kind of bad
that's means it's down but there's
always a layer that I always wondered
and I found it hard even when we're
working in teams to okay like we have
the the easy observability like this is
kind of text not textbook
>> it's the metrics it's the metrics but it
looks but then there's the stuff of does
it work does it do what people care
about like again in the case of like an
Uber Like when people hit a button to
request a ride, like does it actually
request within within usually 5 seconds
or something like that or is it stuck in
an infinite spinner which is which is
bad. Even your locks can be as healthy
as can be but people are upset, right?
>> You know, you you treat the raw data of
making the system observable as as a as
a stream of structured events and then
from that you build up the higher level
abstractions and the views, right?
>> So use as primitives.
>> Use them as primitives. So a trace,
right? where we get a sense of for a
given click of a button what happened in
the production system and this is a big
blind spot right most organizations had
to build their own tracing systems. So
this is where things like the open
tracing stuff came from and things like
zip kit and things like that were built
as an attempt to recreate like I mean
most people were just trying to recreate
what Google had already built there and
this is an attempt to say okay can we at
least look at a flow of calls what
happened during that flow of calls where
did these things go
>> well that requires me to get a bunch of
spans
ac
>> and a span meaning
>> a span meaning an activity basically
something I did
>> um and then a span can be gapat more
spans So I can say my first span might
be a call has hit my my server, right?
So I've now got a span that starts
within that span I might talk to my
database and then do other operations
and I can put additional information on
those spans and then I call to another
service and then you a trace ID that's
shared across those spans and you've got
timing. So now you get effectively a
view of what's happened across those
courts but that's all just based on
individual events been stitched together
and then you also though start getting
into system situation which is is my
system behaving correctly and you know
this is going away from again as I think
half of just saying what charity would
say um you know again going away from
the vanity dashboards this is moving
into sort of the world we call the
SLOs's right the service level
objectives
>> and SLI
>> and SLI so an SLI service level
indicator that's our way of saying at
this given point in time for this thing
is this thing good or is this thing bad?
And we use a collection of those S. So
one example of that might be a
successful percentile response time.
Right? So that would be is it a good one
or a bad one? It could be a bad one
because it's an error. It could be a bad
one because it's slow, good or bad. And
I collect those together and that helps
me know if I'm meeting my SLO. So I
might have an overarching SLO which is
uh I should be able to uh request a ride
with 99 percentile successful ride
request within uh 300 minutes.
>> Yeah. And that would be your statement
and that would be a commitment. The SLO
is supposed to be a commitment. That's
something our team is is working
towards. You then get this raw data. You
calculate your SLI on the individual
things and then you use that to work out
what your SLO is looking like. If it's
green, everything good time. If it's
red, people are unhappy. I mean, you get
a bit of red. There's there's way more
nuance to it than that. I'm to give a
very bad introduction to this stuff, I
think. But without those building blocks
cuz I I talk about in the first chapter
of the book, nobody says I don't want my
system to be resilient.
>> Yeah. No, no one.
>> But at the same time, resiliency is not
a binary property. It's not like off or
on. It is a bit like observability. It's
a degree. So then the question is how
much do you need? Because am I having a
conversation with you about multicloud
and you know doing complete rewrites of
systems for critical standings like
Monzo do for example?
>> Yeah they have a they have a standing
bank when they go down so it's it's
sitting there it's costing them money
for the most part but then just a few
weeks ago their main application went
down for a short period of time and they
activated that bank which I'm assuming
it cost them millions of pounds or
dollars per year just to keep it there.
It's not even that slight sidebar, but
so firstly there's their standby bank
has a real stripped down list of
features. It's much more bare bones, but
it's all the the core ones like you can
freeze cards, you can take money out,
you can check your balance. It's a
complete rewrite, so it's no shared code
because they're worried about a bug.
Different cloud vendor. It's also by
design significantly more cheap to run.
So they've got thousands of
microservices on the full stack. This is
about a tenth the cost of the cloud
costs.
>> They also run it constantly.
>> Yeah. So it's always there. Um but like
Monzo know they're monzo right? That's
how that works. But like there's no
point you starting there. So actually
the reason I put the observatively stuff
in is like you need the raw data but
also you need to make decisions about
comes back to what good looks like.
>> Mhm.
>> Then you need to know okay do I need to
worry about multicloud vendor DR
strategies because that's where I need
to be going or am I somewhere else? And
so I think without that kind of sense of
your north star, how resilient do we
need to be? Without that defined, you
don't know how deep you need to get.
This is more like trying to say how what
what how secure does my system need to
be? Have you done the threat model? If I
know the threat model, I don't know. And
I guess to answer this question of how
resilient do I need to be it greatly
helps and and maybe it's actually a
requirement to do an informed decision
is how much will it cost me in terms of
operating cost, in terms of time to
build it, in terms of for example
latency. Just simple example as is if
you say like okay you know the the
business is like oh would you like
multiloud and business like yeah we'd
love multiloud like if Amazon goes down
because we heard they had an outage last
week or a few months ago I actually want
to be able to run on Google cloud but
then you'll be like okay well first of
all this will mean we're paying two
cloud bills and if we want full
replication it might increase our
latency because we need to wait for to
write for both of them which might mean
slower you know customers might see
things slower anyway there's all of
these trade-offs And in my experience
like often times like you might retrofit
that but if you can have a discussion up
front that's great but to have the
discussion you go back to the basics you
need to know what the trade-offs are.
You need to know what's happening in in
all these dimensions that you know you
care about like how long will it take to
build how complex will it be? How much
money will it cost to operate? But also
as technologists
we can't just say oh our you we have
also got to get good at communicating
with our business stakeholders with our
end users.
>> Oh yeah.
>> What percentile latency do you want?
Like some developers know what I say
when I say that. Not all but some. How
many you know experts in their field who
are great product owners or subject
matter experts but are not software
developers would know what I meant by
that. And so we also have to understand
the business domain, the product domain
well enough to do the interpretation and
help and to bridge that gap. And it is a
a dynamic thing as well. I mean this is
the whole thing about resiliency in
general, right? A resilient system is
one that changes. It changes and it
evolves. If you don't change and evolve,
you're a brittle system. You're not a
resilient system. And so even those
targets we set that conversation we have
to have about what is good enough does
change. But like think about something
like in the case of say the US East1
outage towards the end of last year. Um
there were lots of AWS
>> on AS AWS US East1 region went down. It
was the oldest region big region. Lots
of people were there first because
that's often where new services got
launched historically.
>> When that went down it caused a lot of
people to say do we need to be
multi-reion? And some of those companies
would have had the conversation before
and decided no we don't. And then they'd
seen the fallout and they may have
changed their minds. And that is fine.
>> This this is what you mean by resilient
system evolves.
>> Yeah. You
>> the real world,
>> but also like it is about what problems
you're not going to try and solve. There
were some bigname companies that got
taken out when US East one went down and
and and got severely had severe
degradation in terms of what they could
offer.
>> Yeah. Companies like Zoom, for example,
they weren't taken off entirely, but
they were severely affected. Do we think
that people working at Zoom are idiots?
No. Do we think they knew that if a
cloud region went down there, they'd be
impacted? Yes. They probably looked at
that and said, "Well, for us to come out
with a multi-reion approach, it's going
to have this impact. It's going to cost
us this much money. It's not worth it."
Let alone talking multicloud because
multicloud versus multi-reion is a whole
different conversation. And that's okay.
And I think as long as you've had the
conversation and as long as this is the
other secret bit of it, of course, is as
long as what you think you need to do is
in tune with what your users think you
need to be doing.
>> Yeah.
>> This is why I make the point in the book
when talking about like the difference
between SLAs and SLOs's. The SLA is what
you're going to get sued for if you
breach. If you only ever deliver to the
SLA, your customers are really ever
happy. You've got to do more than that,
right? So there is the social contract
there as well.
>> Yeah. Now with building distributed
system, building resilient systems, it
really helps to understand concepts that
are not as straightforward and I'm I'm
not going to go through all the things
you explain a lot of things in the book,
but I do want to touch on a concept that
I found bit tricky to understand and
then appreciate and you really
appreciate in distributed system which
is item potency.
>> Yeah. What is item potency? So there's a
mathematical concept behind item potency
that I don't understand. But basically
an item potent operation is one that you
can uh you know you can apply that
operation multiple times without it
actually having an effect multiple
times.
>> So it has an effect once first time.
>> A really good example of an item pone
operation would be pressing a lift
button. So you want to go down in the
lift. You press the down button. It
lights up. If I press that down button
again, nothing's changed. The lift is
still coming. Well, we hope the lift is
still coming, right?
>> Yeah.
>> Like that's an item potent operation.
Some light switches are actually
toggles. I toggle it light goes on.
Toggle it light goes off. Right. That's
not an item potent operation. In
computing, we have some operations which
are item potent reads are a delete is
typically item potent. Right. But the
example I think I use in I introduce
this concept is a one of payment.
>> I was about to say that I have a lot
better item potent example for you.
>> Yeah. Yeah. payment is a good one,
right? So, I'm going to pay you money.
So, I I'm a service that wants to can
issue a payment and I send you please
pay Sam £100. Yeah, this is I'm NLPing
people back at home, right? Please say
pay Sam £100 and I don't get a
confirmation back. I don't get back a
response. The problem is from my point
of view there are two possibilities. The
first possibility is that you received
that payment request and you've done the
payment and it's been completed and
there and the result has got lost to me.
for some reason I didn't get the
response. That's one possibility.
>> The other possibility is that you never
got that. You never carried out the
operation.
>> Maybe it didn't get to you. Maybe you
crashed halfway.
>> I think like a good example that I
always I I've seen it in in the past and
maybe it's over. But airlines, you're
about to buy this airline ticket for
$1,000, $2,000. You've checked all of
your details and and it says like play
or reserve. And then often some airlines
would take you to an intermediate page
which says like please do not refresh
this page or submit it again because you
might be double charged and what you
really want is you pay you know like pay
and if you you get the spinner and it's
not item potent if you do it again and
you get charged twice.
>> Yeah. Uh but it is it potent if you just
refresh you you copy the same thing you
submit the exact same form.
>> Although that's interesting. So then the
question then becomes, right, so I sent
you that payment, book my airline
ticket, whatever it is, and I haven't
had that response back, but I really
want to make sure that the airline
ticket booking goes through. This is you
with the browser or the people at home
sending Sam £100, right? You really want
to make sure Sam gets his £100. Right
now, when something doesn't work in the
distributed system because of rule
number two,
>> rule number two mean the thing
>> sometimes might not be there. Rule
number one, sometimes it can take ages.
Yeah.
>> Um, and accepting this thing, right, you
just try it again. and you retry because
you really want it to happen.
>> And in retrying,
>> there's the danger that
>> if the first operation had been
processed successfully and you didn't
know about it or the first operation had
been applied successfully and you do it
again, you're not getting paid twice and
two two tickets. So that's the problem
with item potency.
>> You want to make it safe to retry
important operations. So to do that, we
need to make them item potent. There's
two ways to do it really. one that's
good
>> and is the one you should do but you
kind of have to retro retrofitting is
pain and one which is the one you just
explained which is useful but has
problems right so the first one is item
potency keys
>> yep
>> so you generate you have a unique ID you
normally use a UU ID for this
>> y
>> and so when you the unique ID which you
generate and when you generate two of
them they should be different there's
like this tiny tiny tiny tiny tiny tiny
likelihood of of clash which again what
happened I think
>> I know but like I think with UU ID 7 I
think it's like a 50 ncond chance but
it's something you can generate locally
without any additional round trips
>> your collision chance is extremely low
and there there's ways to modify that
>> but you can work with that
>> and this is
>> unless you're Amazon probably
>> well this but this is I mean the AWS
APIs you see Stripe
PayPal they all use the same key scheme
>> so you send this to U ID so then if you
send that to me you say pay sam and
here's the item potency key. I don't
send you back a response for whatever
reason. You retry it. You pass it on a
potency key. If I had carried out the
processing, I could look at it and say,
"Oh, have I processed this?" Yes, I
have. Okay, great. But if I have
processed it, even if I get a second or
third or fourth, have you processed this
process? I just keep going. Yeah, it's
processed. It's processed. It's fine.
That's a nice simple thing to do. The
issue with making things item potent
with item potency key is it requires
both the client and server to support
it. So, it has to be a required field
that goes through and it has to be sent
to server support. So if you're trying
to retrofit this in, it's a pain.
>> But but if you're building it, use an
item key.
>> Use it. Exactly. If anything needs to be
item pony, do that from the beginning.
The one you sort of mentioned was I go
back, I hit refresh, I fill in all the
same fields again and I submit the
airline booking again. He should know
it's a duplicate. That's another thing
you can do. This was this is good if you
want to retrofit item potency in. So if
I've sent the same fields, so the same
person Sam, the same amount, £100
and I'm sending this through again. What
you can do on the server side is
generate was a fingerprint. So I take
these fields.
>> Yep.
>> I then generate a hash that represents
those fields.
>> So if you do a second booking, it looks
the same
>> and you're using that as item port as a
retrofitted item potency key.
>> Effectively, yeah, there's a couple of
downsides with that. Um, you do get
false negatives with that.
>> Yeah. the false negative meaning that
>> it gets it might get legitimate second
requests can get rejected.
>> Got it?
>> So real world example this happens in I
and know this happens in Denmark. It
might happen elsewhere. I was speaking
to people in Denmark who works on a
payment system. You go in you buy
something for 40 kroner particular
payment system and you given the car
scan the card 40 kon or whatever. If
within the next sort of five minutes you
buy something else for 40 crroner in the
same shop the till the handset rejects
it. If it was 41 crone, it'd be fine. 39
crone, it'd be fine. But that's because
the chances of you buying something for
the exact same money, yeah, is so
remote. They're doing some basic item
potency to top double taps.
>> And so when you get situations where
operations can legitimately look the
same, but actually be different and
carried out at the same time.
>> So a really good example would be the
AWS APIs. It is completely legitimate
for me to in a for loop to provision say
20 different EC2 in 20 EC2 instances.
Now there's better ways of doing it than
sticking in a for loop but I could. So I
could iterate through the for loop and
spin up 20 identical EC2 instances. If I
just relied on there being a
fingerprint, they'd all look the same.
So that's where this stuff breaks down.
Um, and so if you've got situations
where legitimately you have operations
that come that look the same but are
actually different that could be done
close to each other, you have an issue.
If you've got a bit of space around
them, what you can do is hold on to
those fingerprints for a period of time,
5 minutes, 10 minutes, an hour. So
there's still some potentials you can
still let duplicates stick through. So
it's not ideal. Item potency key is the
way to go. Fingerprints when you have to
retrofit. If you use them both together,
that's going to be really useful. So you
can pick up situations where people
change the parameters between the retry
attempts which leads systems into
confusing. It's a bit more of a complex
topic but a lot of public facing APIs
will still generate a fingerprint.
>> And so if you send carry out this
operation and you give the same item
potency key you gave before but you've
changed the parameters the server can
reject it as being effectively an
invalid request. So that's how those
things work together. They're actually
ideas are really simple I think but it's
it's and there's some nuances about
implementing them. There's some
interesting stuff that crops up in terms
of how you store them on the server side
and things but the fundamental ideas are
pretty straightforward I think.
>> Now another interesting topic that comes
up often time these days it feels more
often is thundering guards.
>> Yes.
>> Uh it's it's when a system restarts and
suddenly it faces this big load.
Specifically, GitHub had an outage now a
few weeks ago where it was networking
related and recovery took a lot longer
time because there were retries going on
and it created the thundering herd. What
is a thundering herd?
>> Uh, generically I talk about it in any
situation where you've got mismatched
capacities. You've got too much too many
requests for too few resources, right?
Resource pool's not infinite. Coming
back to rule number three.
>> Rule number three.
>> Yeah. So, in the in the chapter I talk
about a whole bunch of different ones
from different types of scenarios,
right? So you've got everything from the
malicious thundering heard like a denial
service attack, right? A dig denial
service attack, malicious attack often
short notice and there's not that much
you can do about them. The answer is you
use fast or cloud flare but I go into
details about how that happens. You get
things like a kind of internal
self-inflicted ones. So a good example
would be something like um a cache
collapse, right? The system relies on
the cache not only for speed of
operation but also for reducing load on
other components.
>> Yep.
>> Cache gets restarted. You then have a
lot of cache misses. You're hitting the
origin and the origin goes down.
>> Yeah. Origin was not expecting as much
load.
>> Yeah. So a common thing there would be
you first you you'd flush those cash
snapshots to disk. Reduces the chance of
you being out having high cash misses
and over restart. But also a lot of
companies I know will just turn their
services off until the cash refills. And
so that's that's kind of another example
of one. Um, retry storm is another one.
Back in 2017, Square had a big outage.
They'd restarted Multipass, which was
their multiffactor authentication
system. Multipass in turn pulled its
data from Reddus that they were using as
a database cuz you can do that
apparently. I don't think they're using
as a cache basically, right?
>> Well, no, I think they were using as a
data. There are some people that think
Redd is a database. This is a different
podcast. We need to have a I'm thinking
of starting a stupid technology podcast.
We talk about using technology in stupid
ways. That's a separate conversation.
Anyway, so they were putting this data
back from Reddus and they had a problem
that the clients in multipass were going
basically if the Reddus calls failed
they'd try again but without any delay
between the retries and they had a
hardcoded limit of 500 retries. So they
just basically smash Reddus and they
kept restarting Reddis and then they'd
restart multi pass and again this is a
long time ago and they fixed it, right?
They fixed it by having a more sensible
retry policy and externalizing those
values. That's another fun thundering
heard. The last kind of sections of ones
I talked about were ones caused by like
products being too successful
>> like Twitter or and healthcare.gov,
>> right? This is where you have an
external real legitimate load that takes
you out. And the thing is you look at
all of these as solutions although
what's happened is the same the kind of
solutions are a bit different. So like
when I've got a thundering herd that's
coming from externally that's legitimate
well I've got different things I'll look
at like I I will have more I'd have a
more constrained sign up I'll have fewer
invite codes.
>> Yeah.
>> So with healthcare gov one of the issues
there was many others but was that they
went live like 36 states at once and
they were massively overloaded. So in
hindsight maybe going live in one state
would have been a good idea first. For
example with Twitter they were going
down all the time. So they could have
constrained signups or put tweet limits
on you and things like that to constrain
those are things and they they did those
things as well, right? And so although
they look the same,
>> the mitigations for each is a little bit
different. So I I kind of quite like
talking about that because they were all
great stories I found and I wanted to
>> and of course like I think we're talking
about like solving it with when you have
same resources but then we get into
thing as scaling like can you scale
horizontally add more resources because
because there there's two sides of this
right like whenever you have it and and
so what point can you do it or or are
you going to face a bottleneck because
you still have a central whatever
>> but like that's a great example of where
sometimes mitigations work and sometimes
they don't. So an example of something
like your product is successful. If
you're a startup or whatever and you
suddenly got successful, that success
comes like a wave, right? The wave of
success hits you and then a lot of it
recedes. You'll get a thousand customers
in and maybe you'll keep a hundred
maybe, right? That's just how things
work. So you need to be up during the
peak, but then you probably can shrink
down again to keep the cost low. So if
you've built your application to have
some dynamic scalability in it and if
you're on the public cloud or similar
place where you can spin up and spin
down that's a viable mechanism right
okay we can scale up to handle this and
that's fine would I use that as defense
against a distributed denial of service
attack no because then your distributed
denial of service attack becomes a
distributed denial of cache attack right
you go from to not only having no
service but also now no money because
you hit spinning up you know nodes on
your Kubernetes cluster and Amazon just
keep taking the money. It's great.
>> Yeah.
>> And uh you still can't keep up. So
that's a perfectly valid mechanism for
some things, but you kind of have to
know the context of which to say you
can't just scale yourself out of
trouble. Like we're I think we're going
back to a lot of times is like as an
engineer, you want to know about the
business. You want to know what creates
a value, what creates revenue, what is
important for the company versus what is
not. and then where we want to maybe
invest to. Yeah. With our
infrastructure, with our reliability, or
is this where it doesn't matter and it's
not worth doing?
>> It's all about trade-offs. And I think
it's about you don't know unless you get
information out of your production
systems, you don't know how close you
are to the red line. So that's why the
observability is key. But it is all
about trade-offs. And and it and that's
I I do a whole chat on like formal
methods. So I talk about cap and packel
and I say look these things are
complicated but actually really it all
comes down to a conversation with
understanding the business context. So
the example I give there is like if an
e-commerce company if I want to buy an
item online right physical item online
and if at that moment I want to purchase
it if you're not sure if you've got it
or not most e-commerce companies will
say yeah sure you can have it because
they know there's a good chance they do
actually have it in stock and if they
don't have it in stock they can get it
in and back order it and the worst case
scenario they can email and say sorry
and refund you the money right so that's
not great it's not ideal now if they
said we don't know if we this item,
therefore we're not going to sell it to
you. They're missing out on a sale and I
could go buy that somewhere else
probably and they might have had it. So
e-commerce companies in that situation
because of that that sort of
understanding the relationship with the
customer, the impact if they get it
wrong, they're going to try selling the
item. Keep that problem exactly the
same, but now change the business
context. Now we're selling concert
tickets. So you're getting tickets to go
see Tay, right? You're going to go see
Taylor Swift and we're not sure if
you've got the Taylor Swift ticket or
not because our link to that system is
down, but those Taylor Swift tickets are
yours. You're taking your kids, taking
your wife. It's all going to be awesome.
We're going to Portugal. We're going to
see Taylor Swift. It's going to be
amazing. And then we go, "Sorry, we
don't actually have those tickets." Now,
the problem with that is firstly, the
devastation you're going to feel is a
bit different. They can't back order a
ticket.
>> Yep.
>> And and so in that situation, it's like
that the impact of customer is so much
greater. now booked the flight and well
you might have booked the flight. So
what they do is they make a different
decision. So in that situation if they
don't know if they got the ticket they
don't sell the ticket.
>> I'm not sure if you cover in the book
but this is the fail open versus fail
close right when when you have an error
or you're unsure are you going to go
through or or not. And and as you say
this can be a decision the same problem
two companies can take a decision. A
company years down the road could take a
decision. Uber had this classic example
of of when payment we weren't sure if
the payment went through. Do we allow
the right to continue or not? And early
in the company's years, we always failed
open.
>> Yeah, just have the right. We we might
have the money and if not, we'll deal
with it.
>> As a company start to go for
profitability, we fail closed. Like
we're not sure we have the money. If the
charge went through, you're not going to
get the right. And again, same company,
different different plan, different
focus. And if if you're a developer, you
needed to pay attention to like what is
important right now for the business. It
was growth initially. And it's okay if
we lose money. And then now it's I don't
know unit economics profitability.
>> But also that open close versus open clo
that's a failed close versus failed open
discussion isn't one size fits all for
the whole system.
>> Exactly.
>> It's it's on a feature by feature basis.
And even a I mean even then
you could say this taxi ride is ā¬10 or
it's ā¬1,000. You can make different
decisions. Now if you approach this from
a mathematical and from a computer
science viewpoint, we just talked about
cat theory. That was a conversation
about CAP theory, right? So in the
chapter I talk about here's CAP, here's
PCE elk, which is an extension of CAP, I
explain what those models are because
when you get deeper into systems, you'll
hear about them, but fundamentally
that's what this is about, right? When
you have a partition, that's what the P
and CAP really defines. I can't talk to
one part of my system. Remember, it's
rule number two, but I can't talk to
another part of my system. What do I do?
And all you need to know as a developer,
I can't talk to that. What do I do?
Sometimes we can do make technical
decisions. I I'll try again. I hope I
don't bring my systems down for the
retry storm, but I'll try again. If that
doesn't work, what do I do? Well,
actually often the answer is yeah, sure,
you can look at cap and pack or whatever
else, but go have a conversation with a
product owner.
>> What should we do?
>> Yeah,
>> the resolution of that often ends up
being a decision about are we trading
off consistency versus availability in
packel or harvest and yield if you're
going into that version of brewers
conjecture. But don't worry about that.
That's in the book. That's why it's a
later chapter. That's chapter like 12, I
think, or 11. Don't don't start there.
Start with having the conversation. Rule
number two. I can't talk this part of
the system right now. What should we do?
And that starts with having the chat.
That starts having the chat.
>> When we're talking about resilience, you
talk about the dimensions to think about
resilience. What what what are these
dimensions? I start in the first chapter
by coming back to that paper by David
Woods I mentioned that was impenetrable
to me at the start and he comes up with
four concepts for resilience engineering
and I like the four concepts he comes up
with helps us think broadly right so it
starts off with robustness this is where
we can basically I think in his words
absorb known pertubations so we model a
system and something goes wrong and we
can kind of just deal with it in a way
that no one cares about doesn't even
know so a very simple example would
uh in Kubernetes a pod fails and
Kubernetes means a replacement. Now the
pod failing that's a pertubation and
saying it's gone a bit wrong but we've
dealt with it. Great. So that's the
start and and the thing is most
engineers I speak to they focus entirely
on this. They don't look at the other
three focus entirely on this. One of the
really nasty things about robustness is
the things we often do to make our
systems more robust in turn increases
the complexity of our system which in
turn increases the surface area of new
types of failure.
>> Mhm.
>> I bring Kubernetes in to deal with the
failure of a of a container. Now I've
got Kubernetes and that becomes Yeah.
And that's not solvable by the way.
That's just something to be aware of.
Right. This is also why sometimes people
don't go multi- region or multi- cloud
because it's increasing the surface area
of other failure types.
>> Yeah.
>> So that's number one robustness, right?
can always deal with those things and
and and for things to be robust, we have
to know about them ahead of time. This
is predictable. We deal with it. Then
there's rebound, which is when something
does happen and goes wrong, how quickly
can we recover?
>> So this this is the this is typically
the time to recovery.
>> Well, time to detection and time to
recovery.
>> Yeah. Different ways of measuring that.
And I talk about in the DR chapter, I
talk about, you know,
>> the disaster recovery.
>> Exactly. Yeah. Yeah. But that's like how
quickly can we get back up and running.
So we've gone into a degraded
functionality. how quick you can get up
and running. So that's that's thinking
about the rebound and again for that you
have to be very humble as a developer
because the robustness is the system
will never fail and it's like but what
if we got it wrong? Okay well we have to
admit things go outside
>> and then I guess for recovery on on how
you can recover this is where I mean if
you want to do it well teams that are
serious about this they they do uh
simulations of the system going down.
This is where Netflix is very famous
chaos monkey comes in where it goes and
shuts off parts of the system to like
test this live and there's drills that
are that are being being done on how we
how our on call process works how our
decision making etc etc. This is
actually a hard problem and then you you
did it once that's not enough because
you need to do it regularly because
system keeps changing.
>> I'd like to give a shout out to Uptime
Labs who are based here partly here in
London. They do excellent instant
training that you can do online in a web
browser. It's fantastic. Really great.
>> We'll add them to show notes below.
They're they're nice people. So you've
got that recovery process like how do we
get up and running. Uh and I think kind
of techies are up with me and then we go
into the next two which the third one is
graceful extensibility. And so graceful
extensibility
again it's a slightly weird name but
it's basically dealing with surprise.
When we make our system robust we're
dealing with the known no the known
problems.
>> Yeah. We know what to expect.
>> What about things we don't expect?
>> Mhm.
>> Right. If we don't expect it this is now
not about computers it's about humans.
This is why distributed systems are
fundamentally a socio technical system
as people and technology working
together. We couldn't expect the
rabbits. How do we deal with the
rabbits? How do we deal with the far in
the data center? Turns out badly is the
answer. But if you're in a a corporate
environment which is very command and
control, quite hierarchical, but you've
got a very narrow job description.
You're often constrained in what you're
able to do. Those organizations tend to
deal with surprise badly because the
corporate structure is structured around
the known. And so often structurally
you'll find that difficult. You
mentioned drills earlier. Drills are a
great way of helping with surprise.
Coming in and having people often from
outside saying this has happened. How
will you deal with it? Google had a
thing. I don't know if they still do it.
SR pop around. They do a thing called
the wheel of misfortune. They had a
physical wheel. Today your system has
suffer they spin the wheel.
DNS poisoning attack by a state in name
insert name of rogue state here. Here
here's what's happening. How do you deal
with it? um that is all about like
people and experiences and trying new
things and constantly pushing
yourselves.
>> I guess learning also from others. I
remember this like very famous outage
happened a few years ago at Meta where
their DNS system through BGP it it just
all went down WhatsApp Meta everything
to fix this because they they pushed out
an update to their BGP table which is uh
in inside DNS to their servers. Now to
fix this they needed to get access to
the computer that physically to get
access for whatever reason because they
couldn't reach it remotely. So they need
to go into the building. Now in going to
the building they had to go to a door
that protected this
system which was running on their own
domain which was down. So they had to
break physically into but but again this
is the thing where they shared the
details which was great because now
everyone else could think about like do
we have any of our physical security for
example tied to our own domain
>> because if you have it you want to
change that learning from what meta have
learned about
>> and this learn takes us from like grace
extensibility which is dealing with
surprise that's like sort of almost in
the moment are we ready to deal with the
surprise into the fourth one which is
sustain adaptability which is how can we
learn from what's happened not just the
learning. Do we have the environment in
which we can learn and share and grow
but then also adapt the system based on
that learning and it's called sustained
adaptability because it is that is a
completely continual process that's not
just today that's not just when you have
an incident that's when you don't have
an incident what are we doing to learn
and I think your point you raised there
was excellent which is I like reading
other people's incident reports there's
a little bit shard and fud with
companies I don't like but there's also
a little bit of it is like they've
learned something can I learn from them
and do something that that resolves my
system. So when you don't have an
incident, read other people instant
reports. There's a place called the
void. Uh it hasn't been updated for a
bit. There's a like hundreds and
hundreds of instant reports there is
worth going through. So that idea of
sustained adaptability is all about us
adapting and changing over longer time
scales. For those last two things,
sustained adaptability and graceful
extensibility, this all comes down to
people and culture. Like having proper
environment psychological safety is just
absolutely required. If you can't raise
issues, if you can't challenge in a safe
way, you do you will deal with surprise
badly because things won't get raised
and you won't learn because things will
be hidden.
>> Yeah.
>> And so that all comes down to behavior
stuff. And so the last sort of three
chapters of the book where you focus on
that is looking at some of the people
and the social aspects of that. So I've
got like 14 13 chapters well 12 chapters
sorry about the other technical and then
the last three chapters are all around
that side of things. So like what can we
do to make sure that we have that
environment of psychological safety
because without it you can't actually be
resilient.
>> That's it's pretty amazing because so
far throughout this whole conversation
we we talked about building resilient
systems. We talked a lot about people
about about how to think about
resiliency. One thing that we didn't
really talk about just passively is AI.
Even even though like this book is
coming out now and I know it has a a
section on AI as well but it's just
interesting to reflect that even though
like AI is changing how we're building
software it seems like some of these
ground truths of how to operate reliable
software are a little bit just outside
of this realm right
>> well I mean or is it
>> no it's not I mean firstly there's some
stuff there's some AI stuff in there
that can help um I detail quite a few
examples where around sort of
correlation analysis and you help
support around post instant. There's
some instant.io doing some amazing stuff
in this area. Yeah, this
>> saying we can use tools to to do a lot
bits bits and
>> but really there's more fundamental kind
of things here and the first thing is
the macro and the micro at the micro
level there's some useful stuff we can
do here um and I talk about in the book
the macro level is that that none of it
stacks up financially right so if you're
taking a longer view about resilience if
I'm building my product based on a
market sector that is fundamentally
flawed these companies don't have a
viable path to sustainability
>> when you say which companies are we
talking about
>> u Open AI and anthropic and the
hypervisors right conservative analysis
by the economists are showing that they
need to be generating 2.6 trillion in
revenue to justify their capex
expenditure by 2030. The entire software
market is 1.4 trillion. So macro level I
don't know how that gets sorted. I'm not
smart enough. I also don't have any
shares in those companies but you know
that's a separate conversation. I can't
solve that. What I can start thinking
about is okay if that's the world I'm
operating in. How do I deal with that? I
can't deal with all that. What I can do
if I'm taking a view to resiliency is
being very careful about how I use AI.
For example, you know, if I'm thinking
taking a longer view, being more
flexible about model choices, that's
going to help me because I've got the
opportunity to use openw weight models
from different vendors. even just basic
things like open AI and anthropic are
pretty terrible when it comes to
availability of their core models from
their services which is why everyone I
know also will use like they'll use
Google or Amazon or or Microsoft as
either their primary place they go to
those models their fallback so they have
better up times and things so there's
all that stuff we've got to deal with at
that level there's also the conversation
about nondeterminism and charity caught
me up on this a bit and I said the thing
is that you know we're going from
deterministic software to nondeterminism
you know that's a challenge for us. We
don't know how things work. And then she
said to me, "Our distributed systems
were never deterministic." And now
they're really not deterministic. And of
course, she's right because when we take
our distributed system and we add the
people in beyond the rabbits, right, and
the fires and the people, we always had
a degree of non-determinism. We're just
amping that up a bit. So I think that's
a continuation. So for me, I think it's
a confusing landscape. It's not good or
bad. I think at the micro level, there's
some really great things that we can do.
When we say macro level, that's the
tactical things that we can do, right?
>> I think really what I mean by that is
I'm taking the macroeconomic policy
situation out of it. I'm saying as a
developers, there's things that we can
make use of, right? There's some good
stuff in there that we can make use of,
but I also think there's some hedging we
need to do longer term. If you're
building AI into your product,
>> there's some simple hedging things. So,
being multi- vendor, being multimodel,
for example, breaking rather than having
a single agent, breaking that down into
more workflow models. Therefore, you can
take bits of your workflow and realize
actually this could now be swapped out
for a bit of deterministic code that I
write that could run more efficiently.
>> I think these are all sensible things
that you can do. We can't fix this.
>> Mhm.
>> We can at least deal with our world and
I think there's some sensible things
that we can do in that space.
>> What are the things that we know that we
do not know about AI?
>> I think the tech world in general is
quite naive about AI and fundamentally
misunderstands what an LLM is. Let's be
real. Like, why did the LLM delete my
database?
Well, because it has no concept of
causality.
That's what it comes down to. Has no
concept of causal. There's a glass here.
If I push that glass onto the floor,
you'll probably work out carpet down
there. If I ask you what's going to
happen, you said the glass is probably
going to be fine. If I push it onto that
floor, you're looking at saying that's a
hard floor
>> that might break. You're carrying out a
bunch of calculations in your head.
You've got an idea about the physical
properties of the universe. You've got a
sense if I push the glass this is going
to happen. LM don't do any of that. They
have no concept that if I do AB happens.
>> Yeah. Well, there there's push for world
models, but these LMS are not world
models.
>> They're not world models. And world
models have been around for a long time.
They arguably predate LLMs. They can do
stuff like that. So, they could make
decisions like if you had the
appropriate model and the appropriate
inputs, they can at least get to the
point of if I do X, I then Y happens and
I've been told not to do Y. This is why
all the guard rails around LM are really
not long-term going to be the right
solution. And so I think we expect LLMs
to do more than they can actually do
because they seem so smart.
>> Yeah.
>> And so I think that's the problem and
that leads us to overestimate their
capabilities
>> a bit too much I think
>> or maybe over rely on them without
knowing and we might have some incidents
later.
>> Absolutely. Absolutely. And I think with
knowing where and when to to kind of to
to to use those things and I think what
we don't know right now is where should
I be having and again this is wider
where should I have the LLM do it and
where should I just write some
deterministic code like there's a lot to
be said for just having your agent call
a script and you know that script works
rather than having it implement the
script in its magical brain for you.
>> Well there's something to be said that
it seems both labs both leading labs and
tropic and open air have realized that
coding is so important. So often times
when you ask the LM to do something it
will start to generate code because it
writes a deterministic program like
because that part will be deterministic.
It's very interesting when when you ask
it it will it will often just pump out a
Python or or TypeScript or or whatever
code especially when it when it has to
do with involving compare this or or
that and they have trained these models
to like default to to coding. I'm not
sure how that this came came but it
seems to be working to some extent. It's
also because it's very tractable, right?
I mean, you know, they are there to
generate plausible code. They're there
to generate plausible words, right?
>> And in the context of code, they've
generated some plausible code that we
can now validate. Does it execute?
>> Yeah.
>> And so that's a really nice tractable
aspect of it. And there are some places
where it works really, really well, but
there are other areas where it's
terrible. Like I when I wrote my book, I
used very little um AI at all.
>> Well, you didn't use it for the writing.
use it for
>> I don't use it for writing at all. I use
it for the research
but in the context of the researcher if
I use notebookm basically but in that
context it's plausible but then I just
go and click all the links it gives me
and I say was that there or not I am
checking the work it's done way more
work than I could have done going
through all those papers and god knows
there's only so many NIST papers you can
read through right but that in that
context I feel completely fine and able
to do that in other settings you're
getting now what's this problem called
cognitive surrender which is where
you're using AI to write documents that
you're never going to read. That's not
really around a problem with the LLM
technology. That's the problem with us.
>> Okay. Can we talk about this cognitive
surrender and cognitive depth?
>> Yeah. Cognitive debts are kind of term
that's been around for a while and that
sort of explains the erosion in our
ability to think critically and to
reason that can occur when we're using
AI tools. There's been a bunch of
research into this that's shown there's
been some studies that's shown that
people's ability to think critically is
impacted the more they use chat bots and
things and and I think we've sort of
seen other examples that Margaret Anto's
got a great um article all about this
and she's cited some some of the
research around it as well and that sort
of explaining that I mean her her thing
is you know she's talking we talk about
technical debt building up in a system
we have to be careful that our use of AI
it's that cognitive debt we need to have
a shared mental model of what this
system is supposed to do thinking about
it narrowly through the lens of a
program that we're building and if our
use of AI
as an example we all go off in different
directions that shared view breaks down
that becomes a co a debt cognitively.
>> Mhm.
>> Cognitive surrender is a bit of a
different thing which is like oh yeah
it's fine it's basically LGTM right
>> but but for whatever the AI tells me.
Yeah, LGCM was typical. Looks good to
me. Approving large pull requests where
you just couldn't be bothered or you
tried to look at it and for whatever
reason you didn't want to go through or
or it came from someone who you trusted.
>> I worked on the Google's tool team on
old stuff, right? And so LGTM was
literally something we pattern match on
and takes that as an approval.
>> Yeah.
>> So if you saw LGTM, that person's
approved, right? And it was just that
was where I think that may even have
been where the acronym originally came
from. I'm not sure but
>> I think it came from Google. Yeah.
>> Yeah. But but it is this idea that and
it's become shorthand for I didn't
really look at it.
>> Yeah.
>> And I think that's that's that cognitive
surrender thing is coming out in lots of
ways and you know we're getting AI to
write documents that no one's going to
read and we've got AI that's reading
documents that weren't written by other
people. And so the cognitive surrender
piece is really that the humans this
comes back to the human being in the
loop. There's very subtle differences in
those workflows and to the kinds of
differences it changes like there's
there's a big difference corrode talks
about it's a big difference like if
you're say a cancer an oncologist or as
a cancer specialist there's a big
difference to you as oncologist working
and an LLM doing sort of detection of
some of the scans that you're looking at
going oh you should look over there by
the way you might have missed that
that's actually quite useful right
versus the LLM powered AI going here's
all the scans I've looked through here's
the ones I need you to sign off, right?
The last one, the second one, right,
takes the expert out of the loop and
makes them an approver. And often in
that context, they've got rid of a bunch
of other oncologists. You've got one
person into the funnel, which that's
going to lead into issues, right? The
other model is we're making people
better. I think that's to come back to
that original idea of AI was from the
the pitch, right, was it was going to
free us from drudgery.
>> Yep.
>> Just like the industrial revolution was
going to free us from drudgery, but like
it would elevate us. We'd have less
toil. We can be this. we can focus more
on critical thinking and smarts and so
much of our current use of AI is not
freeing us up from critical thinking.
It's causing more context switching.
It's causing less time for thinking.
People are working longer hours. We've
got studies that show this. Now, that's
not necessarily AI's fault. It's just
how are we using it? It's like we just
need to address that a little bit. Can
we talk about complexity uh and AI maybe
adding it? I'm going to quote you from
about from a few months back. You wrote,
"I worry AI could just become an
exercise in doubling down on current
complexity rather than stripping things
back to simplify, at least in the
platform space."
>> Yeah, I can't remember the exact context
in which we had that conversation, but I
mean the platform space was all I mean
the platform space was kind of
interesting, right? Because that was an
attempt to make things simpler for
developers because
>> y
>> Kubernetes became popular and it's not
developer friendly. That's not what it's
designed for, right?
>> But most developers never have to touch
it.
>> No. I mean, well, if you have a
platform, if you don't have platform
Yeah. Yeah. there's a platform team
problem, right? And that's why they get
paid what they get paid. But and and so
I think there was this idea that I was
sort of hoping that there'll be a bit of
a complexity collapse around that space.
I had this hope for things like WSGI,
for example, simplifying down those
programming models a little bit. Um, and
I think there was starting to be a bit
of a a bit of a conversation starting to
be had about some of that stuff going
on. What then happens, of course, is
AI's come out and everyone's like, I've
got to AI all the things. And so rather
than thinking about what we need and
trying to strip that complexity back,
we've now just got another piece that
requires us still have all the old
complexity but adding new complexity on
top and somebody's got to look after all
that stuff. Yeah, but I think it goes
back to a little bit of like we seems to
have more work with AI and probably it
doesn't help that it can add more
complexity especially when we're not
being clear of what we want when we're
not being critical of the output when we
have cognitive depth or cognitive
surrender especially not with cognitive
center you know just right so it these
things might be amplifying the fact that
it's just more work more complexity
right
>> yeah and I think there's also that
connection through to what the AI is
doing is comes full circle a little bit
which is the idea of potential you're
not looking at the code isn't to say
that you don't care about what the
system is that you're building is to say
that you've got a better way of
understanding what you're building. So
one of the concerns is if I'm using AI
to create code is going to create awful
loads of debt and a complicated system
no one's going to understand or we can't
let that happen. We still need to remain
connected to the system that we're
building, which is what I'm a big fan of
like modularizing system. Whether or not
you put those modules in different
computers, I don't actually care.
Getting AI to work within the modules,
having the humans think carefully about
what those modules are and the
connections between them. Let the AI go
hog wild inside those boundaries that
are easy to change, the gaps between
them. That's where the human beings
spend to think about the mental model of
how things fits and slots together. Mhm.
>> Um that feels a very sane way for us to
balance our time and our energies
appropriately.
>> So do I understand correctly that you're
saying that? That's probably a sensible
approach is have the architecture in
your head. Know how your system works.
Know how the boxes work. Know where
there's AI inside it. Maybe it's
generating code. Maybe it's running your
incident response in in isolated ways.
And then spend your time talking with
other people in the business on your
team with your customers because you're
you know as you said systems like
software is is people's ideas connected
and you have things in in your head or
you write it down but now you're using
it as an AI as a tool to enable you to
maybe take on larger chunks of the
business and maybe make better decisions
because maybe you have more time to as
as an engineer understand more on the
business on what is working what is
important those kind of things.
>> Yeah. And also to make the structure and
the model a bit more explicit as well. I
>> mean that's one thing a good modular
structure does. I mean this is why
Shopify have been so successful keeping
their thing as a monolith, right? It's
because they spend a lot of time
building their monolithic application as
a modular domain driven architecture,
right? Because it makes the structure
easier to understand. You can zoom out
and see how those things fit together.
But also in the short term while we're
having these debates about are we going
full software full software factory or
not we don't have to make a
one-sizefits-all approach. We can say
look this is our architecture be it a
modular monolith or a microser archite
doesn't really matter and over here this
area here is where we're trying a full
software factory approach where we don't
look at the code anymore but we specify
the interface we have verification
around that we know what good looks like
for that module right we've got
functional tests tests that look at say
some of the operational requirements as
well uh these areas over here we're
still wrappling these are really key and
really important to us we're not ready
to give up on those yet because we don't
have the trust level yet. We don't want
to take that risk just yet. And so over
here, we're going to work with the AI
more of a collaborative way while we
work together and we're still going to
be intimately involved with the code
because we're not ready to make that
step here. But if we approach our whole
system as one big black box, then we're
forced into making one or either
decision. I don't think that's healthy.
>> Do I understand currently that you're
you're saying that you think that the
software factory a dark factory, you
giving it a spec or or and then the AI
either building it or operating it that
that you you see that as viable? There
are some companies I know that are
already all in on this. Not everyone
should be doing it whatsoever. I think
if that is our future, if that is our
future and I think there's a lot of ifs
there. The question is about how you go
about adopting and trying. So what I'm
trying to do is find ways in which we
can lower the barrier to entry to try
these ideas out in a safe way
>> and like lowrisk environments and and
maybe simpler domains, those kind of
things, right? But also like a lot of
dark factories don't create finished
products. Like real world beyond the
fact that real world dark factories
there aren't many of them. Most of them
create components. They don't create the
finished product.
>> Yeah. So in the same way if you think
about a module being a piece of the
overarching system like well let's have
a factory run these bits here and
actually looking at it like if we had to
rewrite that from scratch it might take
us like with a collaborative way with AI
it might take us a few weeks to have to
rewrite that if we had to so actually
we're quite relaxed about leaving that
to go as is and it's been working fine
and it's a it's a module around which
we've got great test coverage already
for example where it's not on the
critical path from a latency point of
view or it's service where we've got
really good observability data and
really well definfined SLOs's and we've
got good steady state or we can start
running it as a factory now and seeing
what's happening in production we can
have a look at the SLOs's we maybe add
some special SLOs's around it I'm
hearing correctly that you're saying
that as a as a professional as someone
who wants to be up to date with the new
techniques that we can use it's probably
if you have the opportunity to start to
build a software factory a somewhat
autonomous place in a in a component in
something lowrisisk. It's probably worth
trying it out to see how it works to see
what you learn to see if it even works
or where it breaks down,
>> but do it in a way where you're you're
minimizing the blaster radius a little
bit like when you know when
microservices came out the concept you
didn't start by moving your biggest
thing. You started to build a small
service that didn't really matter all
that much and you were okay to learn
from it when it goes down and it wasn't
on the on the hot path for the business.
>> Yeah, I think the thing to start off
with was is getting your head around
spec. So looking into spectrum
development whether that's Kuro or
Tessle or Spec Kit whatever that is I
mean they're all slightly different have
a look at Briget's article on that as a
good on ramp to get ahead of it. Start
off by playing around with that because
that's the stepping stone that's like
you have to define what good looks like
as an input to your factory.
>> Yeah.
>> Start with the spec.
>> Good look input and also for the output.
>> Yes. And then it's like how you verify.
How are you going to go about verifying
the output from the factory? Have a
think about that. And you know like not
just in terms of the the kind of normal
sort of behavioral aspects of it but
like I'm with I'm agree with Kevin Hy on
this. He says he hates non-functional
requirements because if a functional if
something is nonfunctional it means it
doesn't work. So he breaks the world
down into like development requirements
um operational requirements and sort of
business requirements. So I think it's a
nice way of doing that. So along those
three axes
how do I verify that the software being
created by this module is has matches my
developer requirements. So for say
maintainability, my operational
requirements, latency, uptime, and my
business requirement, is it working?
Features working. As long as long as
you've got a way of validating
your your software around that. And if
you don't know what the good looks like
for those three things, guess what? This
isn't for you.
>> But you can still do specs, by the way.
But you can't do a factory.
>> Yeah.
>> But you can do specs. And that's you're
edging and
>> your way there. And I think it might not
work. This there may be some there may
well be some blind alley. could be model
driven development all over again which
we do not have time to get into because
I get very angry about it but it could
be that but I have a hope it might
actually work this time unlike MDM and
then as closing we I think a lot of what
we talked about is it's important to
hold the architecture in your head to
think about the architecture to think
how to modularize now for engineers who
want to get better at this kind of
highle thinking strategic thinking
architectural thinking outside of
reading your book which I think brings a
lot of really good ideas on architecture
as well and not just resilient system
but outside of that what would your
recommendation be for a for a tech
professional for an engineer who's like
I'd like to get better at architecting
systems to know know what good looks
like I I think there's a few books I can
point people at I think the um software
architecture fundamentals by Neil Ford
and Mark Richards is a good read just to
be clear they're friends of mine so I'm
not unbiased in recommending it I would
say around the modularity Vlad Colongh's
book on balanced coupling is fantastic
and it's his book on DDD is also very
good but that that balanced coupling
book is really great he's also develop
some skills and claude to take some of
those ideas so definitely definitely
take a look at those I think if you're
looking at things architecture you think
in terms of modules for me I I don't
agree with everything in Mark Neil's
book there's lots of great stuff in
there but for me actually all starts I
sort of mentioned earlier that writing
the second edition of building
microservices was really all about
smuggling in getting people thinking
about thing called information hiding
it's a very old idea from 1970s
>> still comes back there to me. Modules
are still the whole thing for me. So I
would read Vlad's book and if you want
to go read the original Parnass papers
from 1971 1972 they're still worth
reading but those would be good jumping
off points. I would say you can still I
think the nice thing about thinking in
terms of modules is even within an
existing code base you can start to
modularize it in some small ways. You
can start to think about boundaries you
can think about clear separation about
using encapsulation as a way of
information hiding. And I I guess it's
fair to say like look if you have an
idea on how you can make your existing
codebase a bit more modular, you have
zero excuse not to do it. I mean we
don't trust agents fully but this is a
textbook example of like if you can say
here's my goal refactor this like if it
would have taken by hand x amount of
time it it will be faster. So, so you
you should be empowered to at least
experiment with these, right?
>> Especially if you've got a decent test
suite
>> and if not start with that.
>> Start start with that. If you've got
statically typed language, you don't
even need to just a good oldfashioned
IDE does an amazing job, right?
Dynamically type language now don't have
the excuse, especially if it's a modern
one that's well understood by the LM.
So, if you're using, you know, Python or
Ruby, it's so much better now than it
used to be for refractionist code bases.
Absolutely. You need to get the test
suite in around that. But yeah, you can
start modernizing and that's about
building and that's also a little bit
coming back again to taking we don't
want the architecture only in your head,
right? We want the the code to sort of
represent that mental model.
>> Yep.
>> Because we communicate through the code
and maybe in the future be communicating
through the specs. And when you make
those things more explicit then I think
that helps everyone stay on the same
page. There's uh George Fairbanks wrote
a book. I've forgotten the name of the
book now, but in it he has a pattern
called an architecturally evident coding
style and that we should code in such a
way that it clearly communicates the
architecture of the system and I think
our programming languages are quite bad
at having a good concept of modules in
general. So I think we have to go a bit
above and beyond ourselves but we could
do more to make the architecture of our
systems that little bit more explicit.
This is also why I like spending time
production because especially if your
modular structure ends up being a
process structure. In other words, it's
process boundaries. I can go look at the
networks to find out my architecture. I
shouldn't have to, but at least you know
I know production is truth. It's like
football is life, production is truth.
>> So, where can people get your book?
>> You can go and order it now. Um, if you
can go and buy it from a local bookshop,
that's always a great idea. Uh, it's
also going to be available for people on
the Rider platform in in sort of digital
form. you can go and read it as part if
you're a subscriber over you can get it
there as well but lots of people love
having the physical copy
>> and we have we have these in the show
notes below so check them out to get the
book directly and also you've been doing
some videos right
>> yeah well so I've been doing some stuff
on Dave Farley's modern software
engineering channel it's a kind of a
good excuse to uh do some sort of semi-
ranty you know monologues to video and
have some fun chats so yeah go for the
modern software engineering channel on
YouTube and you can find videos from me
and Dave Farley and Kevin Henny's is
there. We've got stuff from Kent, Trisha
G, Emily Borch, Dan North is there as
well. I'm pretty sure I've forgotten
somebody else. There's almost a couple
other people there as well, but we we
try and put videos out once a week and
it's a bit of fun place to
>> pen. We're also linking that one.
>> Yeah.
>> And if people would would want to work
with you, where can they find you? How
can they find you? What kind of what
kind of stuff can they get help from you
for?
>> But I do like internal talks with people
like internal events. I do like
customized training courses on a whole
variety of things around resilient
systems and security and microservices.
I also do a lot of consulting for
clients, helping them around sort of
rearchitecting their systems and stuff
like that. If you want to know more
about that, actually go to my website,
samnewman.io, and then you can contact
me there. You can also find me on
LinkedIn, but if you come straight to
the website, use email. I'm still a bit
old-fashioned like that. And I work with
clients all over the world, so um if I'm
able to help, yeah, head over to
samnewman.io. My contact details are
there.
>> Wonderful. Well, Sam, thanks again. This
was great.
>> Thank you. Thanks very much to Sam for
this conversation. I really like Sam's
three rules of distributed systems. One,
it takes time. Two, sometimes the thing
you want to talk to isn't there. Three,
resource pools are not infinite. Sam
said how most of the outages happen
because of this last one. Resource pools
not being infinite and services are
getting saturated. But I was chuckling
when he was talking about rabbits steing
through networking cables between office
buildings. Then again, a few weeks ago,
with thousands of flights stranded on
the east coast of the US, it was because
workers accidentally cut a telephone
cable in New Jersey used by the FAA.
Another food for thought from Sam is how
failure should be handled differently
depending on the type of business. An
e-commerce shop might decide to show you
the item when the inventory service is
down. Worst case, after you order and
pay, they just refund you cuz we're
like, "Oh, we don't have the item."
Basically, failing open is fine in this
case. But on a concert ticketing
website, you don't want to sell a ticket
that might or might not be there. And so
failing close is the right call to make
cuz again, as we discussed in the
episode, if you sell the ticket, people
might book flights, they might get
upset, you might lose them as customers.
Finally, I appreciated how level-headed,
perhaps even cautious Sam is about AI.
He's got no doubts that AI is very
useful at the micro level, basically at
tactical, at things that we can already
improve. But he is worried about the
economics of the model providers. His
suggestion is pretty pragmatic. Hedge
your vendors and your models. Be
multi-endor and multi-tool and wherever
you can swap non-deterministic AI agent
workflows to deterministic ones.
Basically have LLMs generate
deterministic code which I find very
very refreshing thinking. Check the show
notes below for the story about scaling
Uber in the early days with Uber's first
CTO Tuan Palm that we discussed and it's
an awesome story. And for more the
pragmatic engineer deep dives on
resilient systems. If you enjoy this
show, do subscribe to your favorite
podcast player. And thank you very much
if you recommend the podcast to your
friends or your colleagues.
Ask follow-up questions or revisit key timestamps.
In this episode, Sam Newman, a recognized expert in resilient distributed systems and author of the landmark book on microservices, explores the architectural challenges of modern software. Sam discusses why microservices are an 'architecture of last resort,' emphasizing that organizational autonomy, not just technical trends, should drive such decisions. He outlines three fundamental rules for distributed systems: information does not travel instantaneously, components can be unavailable, and resources are finite. The conversation also covers the necessity of observability, the importance of defining 'what good looks like' for resilient systems, and the shift toward higher-level abstractions as we integrate AI. Sam advocates for a balanced approach to AIāusing it for tactical improvements and deterministic code generation while cautioning against 'cognitive surrender' and highlighting the importance of maintainable, modular software architectures.
Videos recently processed by our community