1
00:00:01,000 --> 00:00:04,759
How'd you like to listen to dot
net rocks with no ads? Easy?

2
00:00:05,320 --> 00:00:09,400
Become a patron for just five dollars
a month. You get access to a

3
00:00:09,480 --> 00:00:14,199
private RSS feed where all the shows
have no ads. Twenty dollars a month,

4
00:00:14,240 --> 00:00:18,399
we'll get you that and a special
dot net Rocks patron mug. Sign

5
00:00:18,480 --> 00:00:23,679
up now at Patreon dot dot net
rocks dot com. Hey Carlin Richard here.

6
00:00:24,000 --> 00:00:28,480
As you may have heard, NDC
is back offering their incredible in person

7
00:00:28,559 --> 00:00:32,799
conferences around the world, and we'd
like to tell you about them. NDC

8
00:00:32,960 --> 00:00:38,840
Copenhagen is happening August twenty seventh through
the thirty first. Go to NDC Copenhagen

9
00:00:38,960 --> 00:00:44,679
dot com for more information. NDC
Porto is happening October sixteenth through the twentieth.

10
00:00:44,880 --> 00:00:49,000
The early bird discount for ADC Porto
ends July twenty first. Go to

11
00:00:49,119 --> 00:00:54,240
Dcporto dot com to register and check
out the full lineup of conferences at NDC

12
00:00:54,359 --> 00:00:59,240
conferences dot com. Hey there,
this is Jeff Fritz, the purple blazer

13
00:00:59,320 --> 00:01:02,880
guy from like or Soft, letting
you in on a little secret about my

14
00:01:02,960 --> 00:01:07,439
friend Carl Franklin. You know,
the guy who started dot net rocks.

15
00:01:07,480 --> 00:01:11,280
The first podcast about dot net in
two thousand and two. The guy who's

16
00:01:11,319 --> 00:01:17,400
been teaching Blazer on YouTube since twenty
twenty, Yeah, that Carl Franklin.

17
00:01:18,280 --> 00:01:22,239
Well, Carl's joined up with the
folks from Code in a Castle to teach

18
00:01:22,280 --> 00:01:26,000
a week long hands on Blazer class
at Are you Ready Get This? At

19
00:01:26,040 --> 00:01:33,760
a castle slash villa in Tuscany.
It's sort of a luxury vacation with Blazer

20
00:01:33,840 --> 00:01:41,159
learning built in. Carl's calling it
the Blazer master Class. You'll learn Blazer

21
00:01:41,200 --> 00:01:45,079
from the ground up, finishing the
week with the ability to build and deploy

22
00:01:45,239 --> 00:01:49,760
Blazer applications. Since the training happens
for only four hours in the morning over

23
00:01:49,879 --> 00:01:53,920
six days, you can bring your
significant other, your partner with you and

24
00:01:55,599 --> 00:02:00,920
you should right This part of Italy
is absolutely beautiful. There's so much to

25
00:02:00,040 --> 00:02:06,439
see and do, and in Larion
Marco from Code into Castle are organizing daily

26
00:02:06,480 --> 00:02:09,879
activities both at the castle and in
the area. The castle is in the

27
00:02:09,960 --> 00:02:15,919
Marema, a less touristed region of
Tuscany, offering both classic Tuscan hill country

28
00:02:16,120 --> 00:02:21,960
as well as easy access to the
Etruscan Riviera, with sublime local food,

29
00:02:22,400 --> 00:02:27,919
wine and olive oil around every corner. Breakfast is included. Every day there

30
00:02:27,960 --> 00:02:31,199
will be two communal dinners at the
castle book ending the experience, and most

31
00:02:31,280 --> 00:02:37,479
other meals and all activities are included. And did I mention you'll learn Blazer

32
00:02:37,759 --> 00:02:42,840
in person from Carl Franklin. Listen, space is limited and for very good

33
00:02:42,840 --> 00:02:47,000
reason. This is quality training in
a beautiful setting. Go to code in

34
00:02:47,039 --> 00:02:53,759
Acastle dot com slash Blazer twenty twenty
three. That's b L A z R

35
00:02:54,240 --> 00:03:00,520
two zero two three to take advantage
of this amazing opportunity to join Carl in

36
00:03:00,599 --> 00:03:06,919
Tuscany for an unforgettable week of La
dolce vita while advancing your programming skills in

37
00:03:07,000 --> 00:03:23,159
this important new technology. Welcome back
to dot and rocks. This is Carl

38
00:03:23,199 --> 00:03:27,280
Franklin and this is Richard cavill Man. You know I got a story for

39
00:03:27,319 --> 00:03:30,560
you. Oh my new studio is
coming along. Have you seeing any of

40
00:03:30,599 --> 00:03:34,960
the videos I have seen? You
know what I saw? I saw red?

41
00:03:35,439 --> 00:03:38,840
Yes, you do? Like the
red walls. I do. And

42
00:03:38,919 --> 00:03:43,759
it's the same exact fabric that I
had at Plato point zero. Interesting,

43
00:03:43,879 --> 00:03:46,879
Okay, the same exact stuff and
it's that was really two point zero right,

44
00:03:47,520 --> 00:03:51,039
No, No, that was one
point well, okay two point oh,

45
00:03:51,080 --> 00:03:53,360
yeah, I guess. I mean
that the old State Street place you

46
00:03:53,439 --> 00:03:58,479
had it was the training space first, then it became the studio space,

47
00:03:58,639 --> 00:04:00,599
and then you have built this studios. Yeah, yeah, you're right,

48
00:04:00,639 --> 00:04:04,360
like you definitely went through some iterations. We might as well say studio one

49
00:04:04,520 --> 00:04:10,280
was my basement in Waterford where night
arguably community. And now you're staring at

50
00:04:10,319 --> 00:04:13,400
five. Yeah, I just call
it. I call it PLoP three point

51
00:04:13,479 --> 00:04:15,960
zero. Okay, I'll buy that. Yeah, we'll buy that. The

52
00:04:15,079 --> 00:04:19,560
third version is the best version anyway, everything you know. Yeah, anyway,

53
00:04:20,160 --> 00:04:25,720
putting in the floor in a couple
of weeks. The split HRAC system

54
00:04:25,800 --> 00:04:29,639
is going in on Tuesday. Nice
and the band is going to start rehearsing

55
00:04:29,680 --> 00:04:32,439
there in just a few weeks.
So I'm really excul that's really great.

56
00:04:33,399 --> 00:04:39,600
Anyway, let's start with better no
framework, roll the clar music at awesome.

57
00:04:46,360 --> 00:04:49,079
All right, what do you got? This is um something I know

58
00:04:49,160 --> 00:04:53,000
you're going to be interested. You
probably already know this because you know everything,

59
00:04:53,439 --> 00:05:00,560
but it's a It's an article in
Electrek Dot and CEO. Sweden is

60
00:05:00,560 --> 00:05:06,800
building the world's first permanent electric road
that charges moving evs that's cool, isn't

61
00:05:06,839 --> 00:05:12,680
that cool? Yeah, And there's
a picture of a bus and it's driving

62
00:05:12,800 --> 00:05:19,720
over this blue strip of charging some
things in it. Magnetic charging, I

63
00:05:19,759 --> 00:05:24,879
don't know, you probably know.
Yeah, it's probably cute style charging or

64
00:05:24,959 --> 00:05:29,959
just impedance or field style charging,
which is final. They'll only charge so

65
00:05:30,079 --> 00:05:33,120
fast, but you and it's pretty
smart because you know, it doesn't have

66
00:05:33,199 --> 00:05:39,600
to charge really powerfully because you're constantly
going over it. Right. Yeah,

67
00:05:39,639 --> 00:05:44,000
if every foot you get a little
bit of charge, enough to go at

68
00:05:44,040 --> 00:05:47,120
least a foot, then you're positive. Right, Yeah, I don't think

69
00:05:47,279 --> 00:05:50,399
I don't think you're gonna be that
net benefit, but hey, anything that

70
00:05:50,439 --> 00:05:55,199
adds a little range, yeah,
you know, it stretches a bit further,

71
00:05:55,360 --> 00:05:57,879
so much the better. I mean, clearly, this project is an

72
00:05:57,879 --> 00:06:01,639
experiment. They're talking twenty kilometers,
right, so it's one piece of one

73
00:06:01,800 --> 00:06:06,040
thing, and who knows how many
more they're going to do. But you

74
00:06:06,079 --> 00:06:09,920
know, obviously after their experiments they
said, hey, this piece makes sense

75
00:06:09,920 --> 00:06:14,199
that we're going to keep doing this
and we'll see what happens. It's great

76
00:06:14,240 --> 00:06:17,319
to see, you know, infrastructure
come into play. Not to derail the

77
00:06:17,360 --> 00:06:21,959
conversation, but you also saw Ford
signing on a now GM signing on with

78
00:06:24,480 --> 00:06:30,199
Tesla to do the North American charging
standard like this. Here's an interesting point.

79
00:06:31,160 --> 00:06:36,600
The model team released in nineteen o
one, first gas station opens nineteen

80
00:06:36,680 --> 00:06:40,279
thirteen. Wow, what do they
do for twelve years? Yeah, I

81
00:06:40,319 --> 00:06:46,600
don't know. You bought your gas
in containers from the chemist. That's what

82
00:06:46,680 --> 00:06:50,439
you did, chemists. Yes,
well you know what we now call a

83
00:06:50,439 --> 00:06:56,399
pharmacy, but basically exactly. But
I mean to that point, you know,

84
00:06:56,600 --> 00:07:00,160
watch how these things emerge, the
idea of the standard eyes gas filler

85
00:07:00,879 --> 00:07:04,680
that you know, one gas station
had different tanks for different kinds of fuel.

86
00:07:04,800 --> 00:07:08,279
Right, you can get diesel,
you can get we have to do

87
00:07:08,319 --> 00:07:14,240
a new geek out on electric cars
and electric transportation perhaps, but you know

88
00:07:14,360 --> 00:07:15,920
they we're at this point now where
it's like, hey, we want standards

89
00:07:15,959 --> 00:07:19,160
around this, we want these things
to work correctly. So again, the

90
00:07:19,199 --> 00:07:23,839
experiments continue. This This electro tech
article is a great example of that of

91
00:07:24,279 --> 00:07:27,680
more experiments. Well, you know, it's a nice experiment, but will

92
00:07:27,720 --> 00:07:31,399
it scale? That's see what I
did there. I like that. I

93
00:07:31,480 --> 00:07:35,839
know it's very clever. Are you're
the one trying to stay on subject?

94
00:07:35,879 --> 00:07:41,680
That's weirded out, all right,
who's talking to us? Richard grabbed a

95
00:07:41,680 --> 00:07:46,000
comment off a show seventeen seventy eight. That's the one we did back in

96
00:07:46,000 --> 00:07:49,680
twenty twenty two about pro micro services
and dot at six. That was Sean

97
00:07:49,720 --> 00:07:56,040
white Cell, Rod Richardson and Matthew
Groves. And this comment comes from Mark

98
00:07:56,160 --> 00:07:59,120
Essex, who said, Wow,
what a timely podcast. We're in the

99
00:07:59,160 --> 00:08:01,959
early stages of hoarding our monolithic web
forms app, which has been in production

100
00:08:03,000 --> 00:08:09,439
for twenty plus years in some form
to micro services. I immediately went out

101
00:08:09,480 --> 00:08:11,120
and purchased the book and I will
force myself to make time to read all

102
00:08:11,120 --> 00:08:16,000
four hundred and eight pages. Well, I'm sure Sean and Robin Matthew will

103
00:08:15,959 --> 00:08:18,639
be to listen to this show first. Yeah, I thought discussion was so

104
00:08:18,680 --> 00:08:22,240
relevant, really hit on some key
points that we've been discussing internally about areas

105
00:08:22,240 --> 00:08:26,480
of concerning issues it might arise.
I'm scared to death. I'm about how

106
00:08:26,480 --> 00:08:30,519
to debug this thing, or to
test it, or to ensure the same

107
00:08:30,600 --> 00:08:33,600
quality that we've enjoyed with our current
application. I mean, if you've running

108
00:08:33,600 --> 00:08:37,320
an app for twenty plus years,
like people are pretty used to it,

109
00:08:37,440 --> 00:08:39,840
right, and as somebody else mentioned
in the comments. I really hope we

110
00:08:39,879 --> 00:08:43,600
don't have to decide to go back
to our monolithic app as that would have

111
00:08:43,679 --> 00:08:48,440
a whole other set of challenges.
So thanks so much for a great podcast.

112
00:08:48,919 --> 00:08:52,639
Yeah, with any luck, Mark, you'll be that. You know

113
00:08:52,679 --> 00:08:54,679
that was a year ago admittedly,
so you're probably pretty far down the path.

114
00:08:54,840 --> 00:08:58,720
Maybe the show isn't timely enough for
you. But here's to hoping.

115
00:09:00,279 --> 00:09:03,639
We're certainly having a conversation about you
know, there is no one perfect solution

116
00:09:03,679 --> 00:09:05,120
for anything, and there's a bunch
of ways is all of this problem,

117
00:09:05,159 --> 00:09:09,759
and that's certainly what this show will
be about. Yes, sir so Mark,

118
00:09:09,799 --> 00:09:11,799
thank you so much for your comment. And a copy of music Go

119
00:09:11,840 --> 00:09:13,759
Buy is on its way to you. And if you'd like a copy of

120
00:09:13,840 --> 00:09:16,720
music Go Buy, write a comment
on the website at dot net rocks dot

121
00:09:16,759 --> 00:09:18,799
com or on the facebooks. We
publish every show there and if you comment

122
00:09:18,799 --> 00:09:20,759
there and everything in the show,
we'll let you a copy of music Go

123
00:09:20,840 --> 00:09:26,000
Buy. And you should definitely follow
us on something. You can follow us

124
00:09:26,039 --> 00:09:28,559
on Twitter if you want to,
we were there, or Facebook. As

125
00:09:28,639 --> 00:09:33,679
Richard said, but the cool kids
are over on Mastodon, right now I'm

126
00:09:33,759 --> 00:09:37,679
at Carl Franklin at tech hub dot
social, and I'm Rich Campbell at Mastodon

127
00:09:37,759 --> 00:09:43,960
dot Social send Institute, Rudy Tooty, Fresh and fruity. Okay, let's

128
00:09:43,960 --> 00:09:48,519
bring on Derek. We actually started
the conversation before we started recording, so

129
00:09:48,559 --> 00:09:52,879
we'll probably pick up there. But
Derek Comartin is a software developer. Over

130
00:09:52,919 --> 00:09:58,919
two decades of professional experience, He's
written software for various business domains such as

131
00:09:58,000 --> 00:10:03,960
consumer goods, distribution, transportation,
manufacturing, and accounting. Derek has a

132
00:10:05,080 --> 00:10:09,360
very active blog on YouTube channel called
code Opinion, which focuses on software architecture

133
00:10:09,440 --> 00:10:13,559
and design. Welcome Derek, thanks
for having me. I wanted to say

134
00:10:13,559 --> 00:10:18,200
I'm a first time color longtime listener, but I was not sure if anybody

135
00:10:18,200 --> 00:10:22,120
would realize what that is. Yeah, well we get it. School.

136
00:10:22,320 --> 00:10:28,919
Yeah, longtime listener, first time
Yeah, I love it well. And

137
00:10:28,960 --> 00:10:33,879
I'm a longtime reader of your blog, sir. I often tweet out my

138
00:10:35,399 --> 00:10:37,120
favorite of your blog. Yes,
yeah, I appreciate that. Yeah for

139
00:10:37,200 --> 00:10:43,840
sure. So scaling in general is
seems like an insurmountable task when you know

140
00:10:45,000 --> 00:10:50,480
the boss comes and says we have
to talk about scaling. Uh, okay,

141
00:10:50,000 --> 00:10:54,440
because we can't. We can't imagine
to what degree we need to scale.

142
00:10:54,840 --> 00:10:58,440
And most companies think, if they're
public facing websites, for example,

143
00:11:00,120 --> 00:11:03,240
they think that they're going to be
the next Netflix or the next Amazon or

144
00:11:03,279 --> 00:11:09,440
something, and so it may be
completely over architected and completely overextended. And

145
00:11:09,720 --> 00:11:15,639
then you have the companies that are
small now but think that they will grow

146
00:11:15,759 --> 00:11:18,279
to be these big companies. So
we want to be ready to scale,

147
00:11:18,639 --> 00:11:24,320
and that may involve a lot of
extra architecture developers don't want. I mean,

148
00:11:24,360 --> 00:11:28,320
there's just so many gotchas in scaling, and I guess that's why we

149
00:11:28,360 --> 00:11:31,360
brought you on to help clear up
some of this nonsense. It is like

150
00:11:33,159 --> 00:11:35,320
it's an interesting topic because, like
you said, there's this kind of this

151
00:11:35,399 --> 00:11:39,600
notion where right from the get go, we need to decide now in stone

152
00:11:39,720 --> 00:11:43,120
exactly what it's going to be so
we can be the next big thing or

153
00:11:43,159 --> 00:11:48,279
that we think we might be.
And I think there's just this right now,

154
00:11:48,399 --> 00:11:50,440
even though we've been swinging back,
I feel like a last couple of

155
00:11:50,519 --> 00:11:54,519
years worth of this. Okay,
we've been doing the kind of getting more

156
00:11:54,519 --> 00:12:00,120
focused on micro services, like we're
talking about the comment, and I think

157
00:12:00,120 --> 00:12:05,320
it's just it's viewed the wrong way. I think it's you can go pretty

158
00:12:05,320 --> 00:12:09,639
far for if you have them onolith
or if you're starting that way, if

159
00:12:09,679 --> 00:12:15,200
you think about how you're building your
app, not necessarily in a physical sense

160
00:12:15,279 --> 00:12:20,240
right away, but more in a
logical sense, how you design it that

161
00:12:20,320 --> 00:12:24,759
way, you can then decide how
you want to scale. And there's a

162
00:12:24,879 --> 00:12:28,559
variety of different ways to think about
scaling. I mean, I think primarily

163
00:12:28,600 --> 00:12:33,480
if you were to stay cheese,
I don't know, fifteen twenty years ago,

164
00:12:33,519 --> 00:12:37,639
before a cloud, you would it
was a little bit more difficult in

165
00:12:37,679 --> 00:12:39,960
the sense that you were thinking,
okay, we got to buy new hardware,

166
00:12:39,080 --> 00:12:43,159
and that was a little bit more
difficult to scale up or scale out

167
00:12:43,159 --> 00:12:46,279
potentially. But now it's just a
little bit easier. But the kind of

168
00:12:46,279 --> 00:12:50,840
the same thought process is still it's
still the same for me. It's thinking

169
00:12:50,879 --> 00:12:54,399
about just so the traditional things of
are we scaling up, are we scaling

170
00:12:54,440 --> 00:13:00,360
out? But they all kind of
have implications about what I really call moving

171
00:13:00,399 --> 00:13:05,000
the bottleneck. Usually when you're changing
one thing down the road, you're likely

172
00:13:05,080 --> 00:13:07,480
changing something else. So it's it's
kind of an evolving thing. That's why

173
00:13:07,519 --> 00:13:09,639
I think it's a little bit of
a fallacy to think up front, oh,

174
00:13:09,679 --> 00:13:15,960
we're going to create microservices and that's
gonna just solve all our scaling problems.

175
00:13:15,960 --> 00:13:18,919
When scaling of water actually we're talking
about there, because in most times

176
00:13:18,919 --> 00:13:24,879
that's more of an organizational thing than
it was necessarily you said the word microservices.

177
00:13:24,919 --> 00:13:30,360
I could tell that a million sphincters
just tightened. I thought I saw

178
00:13:30,399 --> 00:13:33,000
your eye twitch. Actually, carl
As, we've got video because of the

179
00:13:33,039 --> 00:13:37,120
sphincter tightening. I think you know, it occurred to me. It's like

180
00:13:37,240 --> 00:13:39,960
we should switch to microservices is like
the new version of we should have written

181
00:13:39,960 --> 00:13:45,559
this in Ruby on rails right Like
it's it's the hey, we can't fix

182
00:13:45,639 --> 00:13:48,399
this problem, so let's come up
with a solution so complicated that you'll leave

183
00:13:48,480 --> 00:13:52,600
us alone for six months. It's
interesting because we were kind of alluding to

184
00:13:52,639 --> 00:13:56,080
this before we started, which I
was bringing up months ago. I can't

185
00:13:56,080 --> 00:14:01,240
remember how long ago it was.
There was Amazon Prime Video had a video

186
00:14:01,559 --> 00:14:09,679
or had a blog post about kind
of their transition from using lambda's aws lambda

187
00:14:09,720 --> 00:14:15,399
and a combination of S three and
some other things, and they migrated that

188
00:14:15,519 --> 00:14:20,679
to just be containers in ecs,
and there was seemingly kind of an uproar

189
00:14:20,960 --> 00:14:24,799
of various opinions, including my own, about what that really was, which

190
00:14:24,840 --> 00:14:28,159
people were saying, well, they
went back to a monolith, which even

191
00:14:28,200 --> 00:14:31,159
in their own posts they did,
but I kind of said, it really

192
00:14:31,320 --> 00:14:33,399
wasn't And there's a lot of people
claiming, oh, well, how does

193
00:14:33,960 --> 00:14:37,600
Amazon doesn't even know AWS doesn't even
know really what lambdas are good for,

194
00:14:39,879 --> 00:14:43,440
And it was just a lot of
hot takes I guess about Okay, they

195
00:14:43,480 --> 00:14:48,240
had this service specifically for I believe
it was for kind of trying to determine

196
00:14:48,279 --> 00:14:52,960
the quality of a stream and letting
know the streamer know, like when quality

197
00:14:54,000 --> 00:14:58,799
was degrading, etc. And it
initially said in the post that it was

198
00:14:58,840 --> 00:15:01,240
just it wasn't designed for the scale
that it ended up becoming, which is

199
00:15:01,519 --> 00:15:05,759
okay, great, I guess,
and they evolved it. It's like,

200
00:15:07,240 --> 00:15:11,320
what's so terrible about deciding, Okay, well this worked at one scale,

201
00:15:11,320 --> 00:15:16,639
but it's not currently how it is
now in the volume that we need.

202
00:15:16,720 --> 00:15:22,200
Yeah, it's funny how people want
the one right way right, like they

203
00:15:22,480 --> 00:15:24,720
well, if it doesn't work for
this, and it wouldn't work for anything,

204
00:15:24,840 --> 00:15:28,080
right, I mean I read the
original post and what my immediate thought

205
00:15:28,159 --> 00:15:31,519
was, why were you using servi
lists here? To me, the reason

206
00:15:31,600 --> 00:15:35,399
you servillists is you you have an
elastic load that has to abruptly scale up

207
00:15:35,440 --> 00:15:41,000
a lot and abruptly drop back down. The audio video consumption on Prime Video

208
00:15:41,120 --> 00:15:45,240
is probably pretty high all the time. It probably goes from high to really

209
00:15:45,279 --> 00:15:48,360
freaking high, Like what do they
need that, I'm out of elasticity for

210
00:15:48,799 --> 00:15:52,519
well, as LAMB does though they
they can shut down, right, Yeah,

211
00:15:52,679 --> 00:15:56,480
that's the whole thing, right is
it very elastic? But it also

212
00:15:56,600 --> 00:15:58,720
takes time for them to spin back
up again, so that could you know

213
00:16:00,159 --> 00:16:03,240
very few people, you know,
the first person that has to wait for

214
00:16:03,320 --> 00:16:07,759
that has to wait. Yeah.
And another piece of that was from what

215
00:16:07,840 --> 00:16:11,080
I got from it was just the
cost in the issues of moving data back

216
00:16:11,120 --> 00:16:15,519
and forth from those landas two S
three like back and forth, like pull

217
00:16:15,559 --> 00:16:18,600
them that data from there. Yeah, so going to ECS and being a

218
00:16:18,600 --> 00:16:22,279
container, you're pulling it once they're
running their detectors. It's all at that

219
00:16:22,279 --> 00:16:26,480
point in memory, once they fetched
it once, rather than the however many

220
00:16:26,480 --> 00:16:32,320
times they needed to do it.
And in theory serverlists should have if you're

221
00:16:32,399 --> 00:16:34,720
used to service properly, it saves
you money because you only use instances when

222
00:16:34,720 --> 00:16:40,200
you need them. But it's got
to be the shape of the workload,

223
00:16:40,399 --> 00:16:42,240
right, And I guess as they
understood the shape of their workload, they

224
00:16:42,279 --> 00:16:48,720
could implement a lower cost solution for
that workload exactly. It's just it's I

225
00:16:48,720 --> 00:16:53,159
always say context this king like at
the starting of it, maybe I don't

226
00:16:53,159 --> 00:16:56,840
know what their situation was other than
what they wrote in the post. It

227
00:16:56,919 --> 00:17:00,480
just it didn't seem like the initially
the solution work because it it'sn't at the

228
00:17:00,519 --> 00:17:03,519
scale that they were headed towards,
and they had no intention to it.

229
00:17:03,559 --> 00:17:07,480
So it evolved. It's like,
yeah, okay, great, you evolved.

230
00:17:07,519 --> 00:17:11,680
It like makes sense to me.
This is like saying what you're a

231
00:17:11,680 --> 00:17:18,039
teenager, childhood's a waste of time. Yeah, it's a great point.

232
00:17:18,079 --> 00:17:21,759
And it is really like like you
said, it's a hot take and then

233
00:17:21,799 --> 00:17:26,359
and a hot takes in general are
incorrect. I think anybody's actually built and

234
00:17:26,359 --> 00:17:30,319
cared for software, Like I spent
a lot of time helping people scale,

235
00:17:30,559 --> 00:17:34,119
and you always start the conversation with
corridulations. You have a good problem and

236
00:17:34,680 --> 00:17:40,359
enough people are using your stuff that
scale matters. If nobody was using it,

237
00:17:40,359 --> 00:17:45,480
it'd worked great, exactly when you
kind of in for I would say,

238
00:17:45,759 --> 00:17:48,200
I'm making the assumption here that it's
not an abrupt oh oh my gosh,

239
00:17:48,240 --> 00:17:52,039
I need to scale like from zero
to one hundred. It's usually kind

240
00:17:52,079 --> 00:17:56,759
of you know, I mean over
time as you're gaining traction, if some

241
00:17:56,799 --> 00:18:00,119
type of sas product, whatever the
case may be. And usually when that's

242
00:18:00,119 --> 00:18:03,400
coming up, that's when you're trying
to determine what needs the scales. So,

243
00:18:03,480 --> 00:18:07,160
like I was mentioning, if it's
it could just be scaling up kind

244
00:18:07,200 --> 00:18:11,480
of that app service that you're running. So let's say you're just running some

245
00:18:11,200 --> 00:18:15,680
web app, some ht B API, whatever the case may be. Maybe

246
00:18:15,720 --> 00:18:18,240
that first step is okay, just
scaling up, giving it more resources,

247
00:18:18,240 --> 00:18:22,319
giving it more memory, whatever it's
kind of starving on. But like I

248
00:18:22,359 --> 00:18:26,039
said, when doing that, usually
the next step it might not be instantly,

249
00:18:26,000 --> 00:18:29,759
but it might be okay, well, now we can handle more inbound

250
00:18:29,799 --> 00:18:33,960
requests. So what is that going
to affect downstream? Right nowadays, it's

251
00:18:34,519 --> 00:18:40,440
not just usually some app running,
it's app running with obviously a database,

252
00:18:40,640 --> 00:18:44,920
some other infrastructure, there's a lot
of moving parts, and usually when you

253
00:18:44,960 --> 00:18:48,519
scale, when you fix that one
bottleneck, let's say it's at the very

254
00:18:48,519 --> 00:18:53,480
beginning of that app compute, you're
likely gonna start seeing a bottleneck somewhere else

255
00:18:53,480 --> 00:18:57,640
and that yeah, in some other
infrastructure. So then you're kind of tackling

256
00:18:57,759 --> 00:19:03,519
that piece of the puzzle if you
need more performance, right, like,

257
00:19:03,799 --> 00:19:06,599
yes, absolutely, yeah, And
there's a lot of ways of handling that.

258
00:19:06,680 --> 00:19:11,640
It's I think it's just it's not
immediately. I think when people get

259
00:19:11,680 --> 00:19:14,640
into it, and it's kind of
a slow process of having to fix each

260
00:19:14,680 --> 00:19:18,319
individual place that may be experiencing performance
issues if you will or you can't handle

261
00:19:18,799 --> 00:19:22,400
that type of load. I think
intuitively people start figuring it out of where

262
00:19:23,000 --> 00:19:26,640
what to fix where, or whether
it be like it said, scaling up,

263
00:19:26,839 --> 00:19:32,079
scaling out at adding more instances.
But I think that a bigger challenge

264
00:19:32,119 --> 00:19:37,920
oftentimes is more related to infrastructure that
you don't necessarily like it's not your app,

265
00:19:38,039 --> 00:19:42,000
so that whether that be your database
and depending on what type of database

266
00:19:42,000 --> 00:19:45,079
you're using. Right, So it's
easy to say, okay, well I'm

267
00:19:45,079 --> 00:19:51,519
just gonna scale up my relational database. It's not so easy to all of

268
00:19:51,519 --> 00:19:55,759
a sudden say Okay, well we're
going to introduce a read replica and that's

269
00:19:55,799 --> 00:20:00,240
just gonna be no problem, right, And that's a major re architect Like

270
00:20:00,279 --> 00:20:03,039
that's it can be your data quite
differently, you want to talk through a

271
00:20:03,119 --> 00:20:06,839
read replica or folks who haven't dealt
with it exactly, Like, it's not

272
00:20:06,880 --> 00:20:08,240
all of a sudden, it's well, I always say this about cashing.

273
00:20:08,759 --> 00:20:12,640
It's like I always get the sense
that there's this people talk about it.

274
00:20:12,720 --> 00:20:15,799
I just I mean, add some
cashing problem solved, everything'll be fine.

275
00:20:15,880 --> 00:20:21,440
It's like I always like people say
that cash invalidation is a hard problem.

276
00:20:21,480 --> 00:20:25,000
I don't think it's like it's it's
a hard problem, don't get me wrong.

277
00:20:25,079 --> 00:20:29,039
But in the sense of an application
like these types of systems, it's

278
00:20:29,880 --> 00:20:33,279
I find it more of an issue
of just dealing with a cash in general.

279
00:20:33,279 --> 00:20:34,759
There's so much that can go wrong
with it, sure, right,

280
00:20:34,799 --> 00:20:38,440
so well, and it has direct
impact on business, right, Like every

281
00:20:40,759 --> 00:20:45,359
airline consolidation site you've ever used doesn't
check with the airlines every time they show

282
00:20:45,400 --> 00:20:49,440
you a flight, they've cashed all
of that, And every so often you're

283
00:20:49,480 --> 00:20:52,960
going to click on a flight for
a price, and then it's gonna go,

284
00:20:52,079 --> 00:20:56,920
oh, sorry, I don't have
that flight. Then maybe it's one

285
00:20:56,000 --> 00:21:02,079
percent of the time they're going to
annoy you that way, and they've decided

286
00:21:02,160 --> 00:21:06,759
that's sufficient. I dealt with an
inventory system that was too slow and they

287
00:21:06,759 --> 00:21:08,039
wanted to add cashing to it,
and I said, that means occasional you're

288
00:21:08,039 --> 00:21:11,440
going to sell stuff you don't have. What do you want to do about

289
00:21:11,480 --> 00:21:15,359
that, right, And the answer
was, we put in a back order

290
00:21:15,400 --> 00:21:18,119
system, Like we accept the fact
that we don't have it, and so

291
00:21:18,400 --> 00:21:22,480
we now have. We never had
back orders before, we'll add back ordering.

292
00:21:22,519 --> 00:21:25,880
So if you've ordered something that wasn't
in the we're still in the cash,

293
00:21:25,920 --> 00:21:27,039
but it wasn't on the shelf,
it's like, hey, really sorry,

294
00:21:27,200 --> 00:21:30,559
we put you on back order.
If they choose to cancel whatever,

295
00:21:30,680 --> 00:21:33,960
but at least we're doing investor can
and we literally change the business flow to

296
00:21:34,119 --> 00:21:38,599
compensate for performance exactly trade offs,
right, And a lot of the stuff

297
00:21:38,640 --> 00:21:44,519
is usually built into in most cases, like if you're talking about whatever industry.

298
00:21:44,559 --> 00:21:47,440
I love that you brought up that
example because I always said that if

299
00:21:47,440 --> 00:21:51,519
you oversell something like in distribution and
warehousing, it wasn't a sales problem.

300
00:21:51,599 --> 00:21:55,559
It's a purchasing problem, right,
so they usually have stuff in place for

301
00:21:55,640 --> 00:21:59,319
this to begin with. But whether
it would be a read replica that you're

302
00:21:59,319 --> 00:22:03,799
introducing a cash when we're talking about
something that's hivan stale data and how you're

303
00:22:03,799 --> 00:22:06,960
going to deal with that. But
even just like to touch on the cash

304
00:22:07,000 --> 00:22:11,960
again, it's even from a technical
point of view, is it always available?

305
00:22:12,279 --> 00:22:17,960
Is it responding to you like you're
using a cash typically because you don't

306
00:22:17,960 --> 00:22:19,839
want to reach out, you want
to offload some of those requests from your

307
00:22:19,880 --> 00:22:26,240
database. What happens when the cash
isn't available or it's not as responses of

308
00:22:26,279 --> 00:22:27,640
you do want it to be right, right, guess what you're doing.

309
00:22:27,680 --> 00:22:33,400
You're usually going back to the database. So right, so if all of

310
00:22:33,480 --> 00:22:38,920
a sudden everything's sailing great one day
and then there's hiccups, there's performance issues

311
00:22:38,960 --> 00:22:41,799
with your cash. Now all of
a sudden, these requests that we're hitting

312
00:22:41,839 --> 00:22:45,519
the cash or cash misses and they're
going back to your database. You just

313
00:22:47,799 --> 00:22:51,799
flood your database with a pile of
cash miss is that it normally isn't expecting

314
00:22:51,920 --> 00:22:55,079
Yeah, let's talk through the read
replicub model, because I think it's really

315
00:22:55,079 --> 00:22:57,359
interesting for folks, and I don't
know, I don't know there's a product

316
00:22:57,400 --> 00:23:00,319
off the shelf that can let you
do read replica, Like you have to

317
00:23:00,400 --> 00:23:04,640
code for this, this idea that
you're writing to one database that then is

318
00:23:04,839 --> 00:23:11,599
synchronizing to one or more reading databases. Yeah, I mean there's options to

319
00:23:11,680 --> 00:23:18,000
have some type of proxies there so
and then rules built around that so you

320
00:23:18,039 --> 00:23:22,799
can be offloading them. But it's
just still a matter of if that re

321
00:23:22,000 --> 00:23:29,000
replica is a synchronous and it's eventually
consistent, then that's more of the issue

322
00:23:29,039 --> 00:23:32,200
than necessarily like you need to know
it. The whole world has been taught

323
00:23:32,240 --> 00:23:36,759
that by Facebook because Facebook clearly uses
read replicas, and when you didn't immediately

324
00:23:36,759 --> 00:23:38,720
see your post, you would post
it again and then you see them both.

325
00:23:40,519 --> 00:23:44,279
Like everybody knows about that problem now
just because they learned Facebook. Yeah,

326
00:23:44,279 --> 00:23:48,839
I think there's definitely something to it
in terms of note like people are

327
00:23:48,880 --> 00:23:52,559
a little bit more familiar with with
it, whether they're technical or not,

328
00:23:52,599 --> 00:23:57,200
that can sometimes probably guess what's happening. Yeah, but still it's not the

329
00:23:57,279 --> 00:24:02,519
greatest obviously, and I think it's
similar whether it's a re replica or whether

330
00:24:02,559 --> 00:24:07,759
it's a cash they're both are potentially
stale at any given time. It's like

331
00:24:08,279 --> 00:24:12,839
it's contact specific. Most users,
I would think, in your example,

332
00:24:12,839 --> 00:24:17,440
if they performed some right, which
they may not know they're doing, but

333
00:24:17,680 --> 00:24:19,839
yeah, if they're performing some right
and you're immediately going to provide them with

334
00:24:19,960 --> 00:24:23,799
some read of that right, they're
expecting it. Yeah, and you And

335
00:24:23,839 --> 00:24:27,559
there's lots of ways to cheat on
that too, absolutely and say I already

336
00:24:27,640 --> 00:24:30,519
you won't You just want to see
your data, so I'll keep a copy

337
00:24:30,559 --> 00:24:34,759
of your data around to show you
right away while it spends X many milliseconds

338
00:24:34,799 --> 00:24:38,880
getting synchronized on the back end.
I mean, we're maybe we're getting a

339
00:24:38,880 --> 00:24:42,240
little nitty gritty here, but I
found the bigger thing for performance in the

340
00:24:42,240 --> 00:24:49,200
rereplica model was that the right database
A was insert only and B had minimal

341
00:24:49,240 --> 00:24:53,240
indexes on it because you didn't you
didn't need them. You were never going

342
00:24:53,319 --> 00:24:56,519
to read from them, and index
has caused the law of a blocking and

343
00:24:56,599 --> 00:25:03,640
locking that they then you would later
synchronize it later being milliseconds later, would

344
00:25:03,680 --> 00:25:07,079
synchronize to a read replica that was
orgoned. It only had one place of

345
00:25:07,440 --> 00:25:12,319
right path coming from the right database, and then did have all that indexing

346
00:25:12,359 --> 00:25:18,599
to optimize for read that as well
as which is another option as we're talking

347
00:25:18,599 --> 00:25:23,720
about options for scaling, is creating
what I'll call like there's different ways of

348
00:25:23,799 --> 00:25:29,000
determining that calling this is like a
materialized view, right, creating some type

349
00:25:29,000 --> 00:25:33,079
of projection where that's specifically for that's
something that's query optimized. Right. It's

350
00:25:33,119 --> 00:25:37,440
that kind of separating these concerns of
Okay, I have these rights, like

351
00:25:37,440 --> 00:25:41,720
you're saying you want them to be
fast or kind of off floating indexes.

352
00:25:41,720 --> 00:25:45,759
There that contention and doing the same
thing on that read side, which is,

353
00:25:45,839 --> 00:25:49,480
let's optimize for reads, whether that
be indexes, whether that be more

354
00:25:49,599 --> 00:25:55,279
denormalized in regardless of what type of
data store, it is just more structured

355
00:25:55,319 --> 00:25:57,160
to the way that you want to
fetch that data. Well, it really

356
00:25:57,160 --> 00:26:02,519
salient point. It doesn't all have
to be relation databases, like one could

357
00:26:02,680 --> 00:26:07,200
argue, and I have made the
argument before and on this show that when

358
00:26:07,240 --> 00:26:11,359
you've received an order, which is
basically a glob of objects, now,

359
00:26:11,000 --> 00:26:15,759
making the customer wait while you decompose
that in the rows and columns is kind

360
00:26:15,799 --> 00:26:19,640
of daft, like just store the
object. It is the source of truth,

361
00:26:21,160 --> 00:26:26,000
send the customer on their way,
and do your decomposition into the read

362
00:26:26,119 --> 00:26:30,039
system separately. I'll take it a
step further and say where we're going with

363
00:26:30,079 --> 00:26:37,680
this is offloading work. So that
offloading of that decomposition to whatever immune secreture

364
00:26:37,799 --> 00:26:42,880
process exactly. But that cannot be
just like that view and composing that view.

365
00:26:42,920 --> 00:26:48,480
It's actually composing the work, like
actually performing the work. So like

366
00:26:48,559 --> 00:26:51,839
I said, like if you're placing
an order, it's I don't necessarily need

367
00:26:51,880 --> 00:26:57,440
to persist the actual order and perform
the payment in everything, It's okay,

368
00:26:57,480 --> 00:27:03,880
here's my message dropped a CE.
Do this asynchronously where that I can perform

369
00:27:03,920 --> 00:27:07,119
that work. And in terms of
scaling, that's like I would say,

370
00:27:07,440 --> 00:27:14,079
kind of the I think it's a
way that people immediately can think of in

371
00:27:14,119 --> 00:27:17,400
your system. If you're not using
any type of messaging, not using queues

372
00:27:17,559 --> 00:27:19,839
or anything, and you want to
start somewhere down the road, that way

373
00:27:22,119 --> 00:27:26,039
is just look at something simple that
you know can be asynchronous, like an

374
00:27:26,079 --> 00:27:29,880
email. Right when you click that
button that says do something, and it

375
00:27:30,079 --> 00:27:33,839
performs some type of tasks it's say
persisting data and then needs to send out

376
00:27:33,880 --> 00:27:38,039
an email, It's like nobody expects
that email to be instantly there. Right,

377
00:27:38,079 --> 00:27:42,000
So that's kind of the immediate place
you can look at your system.

378
00:27:42,000 --> 00:27:45,319
Where can I offload some of this
work? Where can I run this asynchronously?

379
00:27:47,960 --> 00:27:51,960
Yeah? Yeah, And I love
the expectation part. Nobody expects it

380
00:27:52,400 --> 00:27:55,799
like they're used to. This is
asynchronous. That's and it's going to have

381
00:27:55,839 --> 00:27:59,799
some latency and that's fine, right, And I think it's how you're how

382
00:28:00,000 --> 00:28:03,680
you're providing it to the user.
Kind of then I hate to use user

383
00:28:03,720 --> 00:28:07,559
experience, but it is. It's
it's how what their expectation is. Like

384
00:28:07,559 --> 00:28:11,359
I said, was reading your right
is do they expect to see immediately the

385
00:28:11,480 --> 00:28:17,440
receipt with their transaction number of their
credit card? Like not necessarily so that

386
00:28:17,480 --> 00:28:19,000
it's just a lot of this work
can happen. It's how you're presenting it

387
00:28:19,039 --> 00:28:22,839
to them. Thank you, We've
I mean, we've accepted your orgale.

388
00:28:22,920 --> 00:28:26,480
Will let you know when it's processed. I like e commerce systems like that,

389
00:28:26,599 --> 00:28:30,720
like okay, I've received your order, all right, we've yeah,

390
00:28:30,759 --> 00:28:33,960
we definitely have. All another emails
is I've we've picked your product. We

391
00:28:33,039 --> 00:28:37,519
know we have it all. Now
I've build your card, here's the receipt

392
00:28:37,599 --> 00:28:41,039
like and that I a lot of
ways. Like I like that better because

393
00:28:41,079 --> 00:28:44,759
you see it's clearly a workflow.
They're not making anything up, they're validating

394
00:28:44,799 --> 00:28:47,519
as they go, and more importantly, we'll step off if there's a problem

395
00:28:47,559 --> 00:28:52,799
and they're using known methods to communicate
email, text, whatever. What I

396
00:28:52,839 --> 00:28:56,640
don't like is when you may want
to track your package install this app.

397
00:28:57,759 --> 00:29:02,799
Yeah, no, go away,
thanks, no spying, no spying,

398
00:29:02,799 --> 00:29:07,000
thanks very much. Yeah. The
queuing model is you talk about a programming

399
00:29:07,039 --> 00:29:11,240
intensive modification to a piece of software, is to go from a synchronous database

400
00:29:11,279 --> 00:29:18,119
connection to a que approach like a
takes some time to get your head around

401
00:29:18,160 --> 00:29:21,519
that, but it takes time for
the users to get used to the fact

402
00:29:21,559 --> 00:29:25,319
that all of that is now different
too. Yes, for sure, an

403
00:29:25,400 --> 00:29:30,640
existing app depending on like what we
said, is depending on how you're implementing

404
00:29:30,680 --> 00:29:33,200
it. But like I said,
I think there's a lot of places that

405
00:29:33,200 --> 00:29:36,759
you could probably look in your if
you think if people are listening or now

406
00:29:36,799 --> 00:29:38,319
thinking of where can I do that, it's it's just trying to find those

407
00:29:38,400 --> 00:29:44,720
natural places that are asynchronous. And
I think that's just an easier place to

408
00:29:44,880 --> 00:29:48,839
start, especially, like you said, wrapping your head around at how it's

409
00:29:48,880 --> 00:29:52,960
working in your system. But it's
there's more places probably than not that you

410
00:29:52,960 --> 00:29:56,519
can that are really good fits.
Yeah, there are some building gotchas with

411
00:29:56,559 --> 00:30:03,440
that kind of system too, such
as let's just take a very simple example.

412
00:30:03,559 --> 00:30:08,640
You have a model and you want
to add this data to the database

413
00:30:08,720 --> 00:30:12,759
through this model, and the model
doesn't have a primary key because there's no

414
00:30:12,880 --> 00:30:17,400
primary key created in the database.
Yet. You might have a you might

415
00:30:17,480 --> 00:30:21,440
have an identifier for that model,
but it's not a database identifier. But

416
00:30:21,519 --> 00:30:26,839
then you can't really use it until
you get that and you get that from

417
00:30:26,880 --> 00:30:30,039
the database, right, the database
is going to assign you and tell you

418
00:30:30,079 --> 00:30:33,440
what that unique identifier is. So
in the meantime, you can't do any

419
00:30:33,559 --> 00:30:36,920
edits, you can't do any updates, and you can't even do a delete.

420
00:30:36,960 --> 00:30:40,799
I mean you really kind of have
to for that record that you're you

421
00:30:40,920 --> 00:30:45,599
just created. Your user is in
limbo. Yeah, that is one.

422
00:30:45,640 --> 00:30:48,799
There's a bunch of gotcha's here,
for sure. That's probably the one that

423
00:30:48,880 --> 00:30:53,960
I think people run into most.
But oftentimes a solution there is depending on

424
00:30:55,000 --> 00:30:59,519
where you're making the requests from,
is just providing that identifier from the get

425
00:30:59,519 --> 00:31:03,079
go. It may not be the
primary key, but it's some other way

426
00:31:03,119 --> 00:31:07,960
that you can look up separately with
what you've generated. Yeah, right,

427
00:31:07,000 --> 00:31:11,400
So if it's some type of guid, I've moved to GUIDs for primary keys

428
00:31:11,480 --> 00:31:14,240
instead of letting the database do it
for me. I mean, anybody can

429
00:31:14,279 --> 00:31:17,160
generate guid at any time and it's
going to be unique. Yeah, exactly,

430
00:31:17,200 --> 00:31:19,440
It's just you're at the client,
and I don't mean the client as

431
00:31:19,480 --> 00:31:22,960
the end user. I mean is
wherever that needs to initially make that request

432
00:31:23,640 --> 00:31:29,359
is essentially providing some identifier that wherever
else it needs to be doing those lookups

433
00:31:29,359 --> 00:31:32,640
like you said, so it doesn't
necessarily need to know when the request was

434
00:31:32,680 --> 00:31:37,160
processed. Right. The example I
love to use in terms of visually two

435
00:31:37,400 --> 00:31:41,680
is if you're in AS, you're
you're in AWS wherever, and let's say

436
00:31:41,680 --> 00:31:47,680
you go to stop, restart or
do something with some type of resource.

437
00:31:48,400 --> 00:31:51,920
You know that's not happening immediately.
You're not just like making that request.

438
00:31:52,000 --> 00:31:56,039
Then know this VM is stopping like
it just stopped like right, Like it's

439
00:31:56,079 --> 00:32:00,079
an asynchronous process, you know for
sure, that that thing behind the scenes

440
00:32:00,640 --> 00:32:04,880
is queuing that up for that request
to be process. Now, in terms

441
00:32:04,920 --> 00:32:08,440
of feedback, like we're talking about, if that is a thing where you're

442
00:32:08,839 --> 00:32:13,920
behind the scenes providing some identifier,
it may be using i mean some type

443
00:32:13,920 --> 00:32:17,559
of web sockets connection to get pushed
back down of that update happening, which

444
00:32:17,640 --> 00:32:21,240
most of them do, so that
you kind of get that instant feedback,

445
00:32:21,279 --> 00:32:24,200
but it's not really full proof if
you've ever used it before. So you

446
00:32:24,240 --> 00:32:28,319
are refreshing to kind of see the
latest, and there's usually your little refresh

447
00:32:28,359 --> 00:32:30,839
button there for that purpose, but
you know it's in the indicated to you.

448
00:32:30,920 --> 00:32:35,759
It's like it's stopping, it's restarting
and shutting down. It's you know,

449
00:32:35,799 --> 00:32:38,000
it's not instant. Yeah, absolutely, And Derek coming in and run

450
00:32:38,039 --> 00:32:44,400
for one moment for this very important
message. There is always something new from

451
00:32:44,400 --> 00:32:47,759
our sponsor, text Control. As
a developer, do you need to integrate

452
00:32:47,799 --> 00:32:53,160
PDF generation, document editing, or
electronic signatures into your asp net corp or

453
00:32:53,200 --> 00:32:58,960
angular applications, or you want to
learn more about the differences between electronic and

454
00:32:59,079 --> 00:33:04,920
digital signatures. Text Control is offering
a free consulting service to educate you about

455
00:33:04,960 --> 00:33:08,920
digital document processing and how text control
products can help you add these features to

456
00:33:08,960 --> 00:33:15,240
your applications. Go to text control
dot com, slash contact and request your

457
00:33:15,279 --> 00:33:23,480
free personal consultation and we're back.
It's done at Rocks. I'm Richard Campbell.

458
00:33:23,480 --> 00:33:27,680
That's Carl Franklin, Hey, and
talking to our new friend Derek O.

459
00:33:27,759 --> 00:33:30,400
Martin, who writes his great blog
posts on Code Opinion and as an

460
00:33:30,400 --> 00:33:37,240
excellent YouTube channel, talking about scaling
the monolith. That being said, have

461
00:33:37,400 --> 00:33:40,440
you seen scenarios where micro services were
the right choice? I think so.

462
00:33:40,720 --> 00:33:45,200
I think, Oh well, let
me start by saying I can't deal with

463
00:33:45,240 --> 00:33:49,960
the micro part of the word there. Yeah, it's just silly. Yeah

464
00:33:50,079 --> 00:33:58,079
it is, but yeah, I
know, um, but I think it's

465
00:33:58,200 --> 00:34:01,720
I think it's applicable. I think
I wish the industry would get more on

466
00:34:02,759 --> 00:34:09,679
thinking in terms of monolith and micro
services, but rather thinking about logical boundaries

467
00:34:09,679 --> 00:34:14,280
and physical boundaries. I wish we
could just term it that way. So

468
00:34:14,360 --> 00:34:16,320
I mean by that right is thinking
about if you're defining, like if you

469
00:34:16,320 --> 00:34:21,440
have some type of large system,
define logical boundaries, which I say are

470
00:34:21,599 --> 00:34:27,400
incredibly important to do, yet they're
really difficult to quote unquote get right.

471
00:34:27,480 --> 00:34:30,960
Because of what right kind of changes
as things evolved. Sure, but it's

472
00:34:31,000 --> 00:34:37,039
thinking about what does your system do, like what what pieces of functionality?

473
00:34:37,519 --> 00:34:43,599
Where's the value defining those piece of
functionality, grouping that altogether logically, and

474
00:34:43,639 --> 00:34:46,599
then deciding, okay, once we
have all this, how do we deploy

475
00:34:46,679 --> 00:34:50,639
this? What's the physical aspect of
this? Right? Can this all to

476
00:34:50,679 --> 00:34:53,800
be deployed together? Can this be
all composed into a single unit? And

477
00:34:53,920 --> 00:35:00,360
maybe this is just deployed as a
container, maybe always built separate correcting because

478
00:35:00,360 --> 00:35:05,000
a unit yep, deployed as a
unit. Maybe we are using messaging and

479
00:35:05,079 --> 00:35:10,599
queuing and it's still underneath the hood
using the same like all that same code,

480
00:35:12,360 --> 00:35:15,920
but the entry points are different rather
than let's say we had our first

481
00:35:15,960 --> 00:35:20,400
piece of the puzzle here was an
htb API or some web AP, but

482
00:35:20,440 --> 00:35:22,880
there's still a queueing component of that, which could be just a separate container

483
00:35:22,960 --> 00:35:28,559
that's listening to whatever queuing message bus
or you know what I mean, broker

484
00:35:28,639 --> 00:35:31,800
that we're using, still using the
same underlying code. So there's just this

485
00:35:32,239 --> 00:35:37,800
aspect of we could compose this however
physically that we want to. One logical

486
00:35:37,800 --> 00:35:43,199
boundary could be deployed independently if it
needs to scale and it has different resources.

487
00:35:43,519 --> 00:35:49,159
That's a certainly situation I've run into
where we realized we're scaling this large

488
00:35:49,199 --> 00:35:52,239
set of classes, most of which
are not being called in each of the

489
00:35:52,280 --> 00:35:57,039
scale instances. But you know,
there's just one problem a child that gets

490
00:35:57,039 --> 00:36:00,960
called a lot, and if we
peel it out of that larger ball of

491
00:36:00,039 --> 00:36:05,639
goo, it'll scaree. It's easier
to ramp that up, it's lighter weight

492
00:36:05,679 --> 00:36:09,760
to do so, and the rest
you don't need is a bunch of the

493
00:36:09,800 --> 00:36:13,800
other stuff. So it's just like
pull the too part together in exchange to

494
00:36:13,840 --> 00:36:17,400
the complexity of now we have another
security boundary, we have another API boundary,

495
00:36:17,480 --> 00:36:22,079
like all of those things had to
be addressed in exchange. Absolutely,

496
00:36:22,079 --> 00:36:24,000
Like it's trade offs, right if
you all of a sudden want to decide,

497
00:36:24,000 --> 00:36:27,559
Okay, we're gonna peel out this
part, and a lot of this

498
00:36:27,599 --> 00:36:31,960
comes down to how you're coupling between
these logical boundaries, right, So that's

499
00:36:32,320 --> 00:36:36,079
kind of a big factor in whether
you're going to be able to extract something,

500
00:36:36,800 --> 00:36:38,719
but how you're doing that. But
if you decide that is something you

501
00:36:38,760 --> 00:36:43,679
need to do, like you said, for scale, purposes. Then you

502
00:36:43,840 --> 00:36:49,559
have a lot of options about just
in terms of how you're communicating with the

503
00:36:49,559 --> 00:36:54,360
other logical boundaries. Whether that's something
that you hopefully from the start maybe went

504
00:36:54,480 --> 00:36:58,920
down a more loosely coupled route,
but I realized that's not always the case.

505
00:36:59,599 --> 00:37:01,159
But you realize that, Okay,
if you weren't, and you were

506
00:37:01,159 --> 00:37:06,840
doing in process calls, say between
logical we'll call service A and service B,

507
00:37:07,559 --> 00:37:10,760
and now you're going to do that
over HTTP, gRPC, whatever the

508
00:37:10,760 --> 00:37:17,360
case with some request response that's latency. There's a whole lot of that's not

509
00:37:17,639 --> 00:37:22,000
like, oh, we're loosely coupled
now because we have two services that communicate

510
00:37:22,039 --> 00:37:27,400
over the network. No, you
just created a huge performance bottle, exactly

511
00:37:27,559 --> 00:37:31,480
done, exactly so, thinking that's
why I said I don't love the monolith

512
00:37:31,639 --> 00:37:37,320
versus micro services. I'd rather the
conversation was around, Okay, let's define

513
00:37:37,400 --> 00:37:42,559
logical boundaries and then separately, let's
talk about how these things are deployed.

514
00:37:43,079 --> 00:37:45,280
Right, So, what are the
logical boundaries? I mean, scale is

515
00:37:45,400 --> 00:37:49,559
one of them, but I'm sure
there's others in well, So the way

516
00:37:49,599 --> 00:37:53,840
I often think of logical boundaries,
the way I describe it because I lived

517
00:37:53,920 --> 00:37:59,880
in warehousing and distribution for a long
time. And my explanation of this of

518
00:38:00,079 --> 00:38:01,960
how to think about it is,
Okay, yes, you have a warehouse

519
00:38:02,000 --> 00:38:07,519
system. It's enormous, right,
it does everything, It does a whole

520
00:38:07,599 --> 00:38:10,360
lackload of things. It runs the
entire company essentially. So what does that

521
00:38:10,400 --> 00:38:15,280
mean though, Well, it's if
you think about it, if you were

522
00:38:15,280 --> 00:38:17,159
just to think about the business itself, there's a lot of departments, like

523
00:38:17,239 --> 00:38:23,159
they're shipping and receiving, there's sales, there's purchasing, accounting, the warehouse

524
00:38:23,199 --> 00:38:27,840
itself, people working in the warehouse, and if you want to think of

525
00:38:27,840 --> 00:38:30,119
it that way, at a sense, that is a logical boundary, and

526
00:38:30,159 --> 00:38:34,400
that would be a logical boundary in
your system. And kind of the way

527
00:38:34,440 --> 00:38:37,760
that I like to use to describe
this is if you were working in that

528
00:38:37,800 --> 00:38:42,599
system and you're talking to anybody that
works in that business, and you're to

529
00:38:42,599 --> 00:38:45,559
go to them and you say,
like, what's a product, they would

530
00:38:45,559 --> 00:38:50,559
all give you different answers because each
one of them has a different concern about

531
00:38:50,599 --> 00:38:54,199
what a product is. Right,
So if you're talking to somebody in sales,

532
00:38:54,280 --> 00:38:59,199
they care about the price. If
you're talking to somebody and purchasing they're

533
00:38:59,239 --> 00:39:02,280
talking about like the vendor cost manufacturer. If you're talking to something in the

534
00:39:02,280 --> 00:39:06,800
warehouse, they care none of that. They just care about where's that product

535
00:39:06,880 --> 00:39:12,039
physically in the warehouse or warehouses.
They just have different concerns. So I

536
00:39:12,079 --> 00:39:16,079
think that's where the kind of the
I think people get in trouble is thinking

537
00:39:16,199 --> 00:39:22,280
of quote unquote entities as there's like
one singular like be all end all of

538
00:39:22,320 --> 00:39:27,760
a product, right, But there's
not. It's it's logically it's the same

539
00:39:27,960 --> 00:39:30,639
product, but it just exists in
different ways, in different logical boundaries.

540
00:39:30,719 --> 00:39:35,159
Yeah, and that's normal. It's
always been true. It just becomes more

541
00:39:35,199 --> 00:39:38,079
apparent as you press against these kinds
of problems. And that's the thing is

542
00:39:38,079 --> 00:39:42,639
that when you think about when you
think about them that way, and you

543
00:39:42,679 --> 00:39:45,079
think, okay, okay, I
have this subset of functionality that we're performing

544
00:39:45,119 --> 00:39:49,920
on, like in sales, for
example, about how we sell products,

545
00:39:49,920 --> 00:39:53,239
their prices, their discounts, all
those types of things, and you have

546
00:39:53,360 --> 00:39:58,719
some other like let's say purchasing.
As was using the example and thinking about

547
00:39:58,800 --> 00:40:04,320
vendors. It's kind of liberating in
a sense because they're different ways of thinking

548
00:40:04,400 --> 00:40:08,039
about it and not conflating two ideas
together, which then in terms of your

549
00:40:08,039 --> 00:40:12,000
codebase, you're starting to think about, okay, well it's not just this

550
00:40:12,280 --> 00:40:16,360
what I call entity services where it
has all this mixed behavior about all these

551
00:40:16,400 --> 00:40:22,440
things. It's no. Then you
become a little bit more focused on what

552
00:40:21,599 --> 00:40:24,079
the how I say is, like, what the capabilities are of that logical

553
00:40:24,079 --> 00:40:30,719
boundary. The biggest part is usually
is inevitably these things need to be composed

554
00:40:30,760 --> 00:40:36,000
in some way. Yeah, that
represent a product. Like if some users

555
00:40:36,039 --> 00:40:37,360
on a screen, they might want
to see, okay, well what's the

556
00:40:37,360 --> 00:40:42,760
sale price and what's the actual purchase
price? Right, So how you're composing

557
00:40:42,800 --> 00:40:46,199
those things if you're in process together, well, maybe you are just making

558
00:40:46,320 --> 00:40:52,599
API calls, I mean in process
from as it was. Let's use the

559
00:40:52,639 --> 00:40:55,760
example of you are making these things
different projects within a solution. Maybe it's

560
00:40:55,760 --> 00:41:00,480
just some interface that you're calling,
some type of class that you're calling to

561
00:41:00,480 --> 00:41:04,119
get that data. But there's still
that boundary there physically that you're doing.

562
00:41:04,199 --> 00:41:06,400
It's just how you wanted to then
do that. If like you're saying,

563
00:41:06,440 --> 00:41:08,920
if you're kind of ripping it apart, you need to be aware about when

564
00:41:08,920 --> 00:41:12,320
you're going ahead of this, like
ahead of time. Okay, we're gonna

565
00:41:12,360 --> 00:41:15,079
rip this out and then we have
all these in process calls. That's going

566
00:41:15,119 --> 00:41:16,880
to be a problem. Yeah,
where where is it going to? Where

567
00:41:16,920 --> 00:41:19,960
is it going to impact things?
You can't just pull it out and hope

568
00:41:19,960 --> 00:41:22,400
for the best. Do You need
to have some sense of organization and where

569
00:41:22,960 --> 00:41:29,039
where the code dependencies actually exist and
decide if it's actually worthwhile too, Right,

570
00:41:29,039 --> 00:41:31,280
there can be cases where it's like
the performance gains just not enough for

571
00:41:31,360 --> 00:41:37,920
the complexity being added. Yeah,
that's one of the thing with complexity is

572
00:41:37,920 --> 00:41:40,760
it's it's you're moving. You're getting
pretty high when you don't need to if

573
00:41:40,800 --> 00:41:45,280
you don't need to move stuff out
of process. Right, It's just I

574
00:41:45,280 --> 00:41:50,119
guess there's this sense that moving stuff
out of process, are starting that way

575
00:41:50,199 --> 00:41:58,400
immediately for the sake of scale.
Is I'm genuinely curious sometimes that people really

576
00:41:58,440 --> 00:42:02,920
know what they're getting into in terms
of all the like just deployment in I

577
00:42:04,079 --> 00:42:08,199
realize things like open telemetry are awesome, but not that simple. It's not

578
00:42:08,239 --> 00:42:13,519
that simple. Well, this is
this is the developer credo. We we

579
00:42:14,000 --> 00:42:16,440
did these things not because they're easy, but because we thought they were easy.

580
00:42:16,599 --> 00:42:19,840
Yeah, I want to hear you
say that with a John F.

581
00:42:19,960 --> 00:42:29,400
Kennedy accent. Not because they are
easy easy, but you know, we

582
00:42:29,440 --> 00:42:32,320
have this terrible disease in software development
where we keep calling stuff easy that clearly

583
00:42:32,320 --> 00:42:36,199
has never been easy. Like virtually
none of this is easy. You may

584
00:42:36,280 --> 00:42:38,719
know how to do it, but
that doesn't make it easy. All everything

585
00:42:38,800 --> 00:42:43,840
is effort, and everything comes with
a cost. And and you know,

586
00:42:44,039 --> 00:42:46,719
and you're and you're shifting problems around. There's no free lunch here, not

587
00:42:46,800 --> 00:42:51,360
a bit. I think it's a
good way of thinking about as shifting problems

588
00:42:51,360 --> 00:42:54,320
are like just creating I was creating
problems you're yeah, I mean you're trying

589
00:42:54,320 --> 00:42:59,360
to come up with solutions. But
everything we've mentioned right in terms of cashing

590
00:42:59,719 --> 00:43:05,400
or read replicas and queuing, they
all come with a lot of trade offs,

591
00:43:05,440 --> 00:43:08,559
a lot of complexity that you're adding
that you need to be like that

592
00:43:08,679 --> 00:43:12,840
it's got to come with value,
like you actually need need it. And

593
00:43:12,920 --> 00:43:15,239
if you're unfamiliar with it, some
of these things that you're going to get

594
00:43:15,280 --> 00:43:20,440
a root awakening, right, Well, that's an overhead too. If how

595
00:43:20,440 --> 00:43:23,760
long is it going to take to
learn this to do it decently. But

596
00:43:23,920 --> 00:43:29,039
also I don't think there's any way
to predict the outcome, Like you can't

597
00:43:29,159 --> 00:43:30,280
do a calculus and go, hey, if we do this, we'll get

598
00:43:30,320 --> 00:43:35,880
sufficient performance for effort. In some
ways, there's almost no way around putting

599
00:43:35,880 --> 00:43:39,039
out the effort to get to a
point to even know this has a return.

600
00:43:39,639 --> 00:43:44,760
And that's certainly the challenge I had
was scaling anything was we're going to

601
00:43:44,880 --> 00:43:46,559
try this, well, you do
it as quickly as we can, but

602
00:43:46,599 --> 00:43:49,440
we're not really going to know the
results to we do it. I mean,

603
00:43:49,440 --> 00:43:52,880
hopefully we measured before we started so
that we can measure after we've done

604
00:43:52,920 --> 00:43:55,280
it to say there was a return. The number of times I've seen stuff

605
00:43:55,280 --> 00:44:00,159
people just do things and go does
it feel faster to you? LIKEE know,

606
00:44:00,320 --> 00:44:05,559
faster. That's the thing brings up
a good point in terms of measuring,

607
00:44:05,599 --> 00:44:08,079
because a lot of this now for
me is it's it's purely based on

608
00:44:08,119 --> 00:44:13,039
that of knowing, just having metrics, having some type of visibility, and

609
00:44:13,360 --> 00:44:16,000
how your systems performing. Besides the
well, this seems slow, It's like

610
00:44:16,079 --> 00:44:21,519
yeah, is it? It only
seems slow because the CTO keeps telling me

611
00:44:21,599 --> 00:44:25,000
it's slow. Yeah, everything seems
slow. Nothing's quite fast enough generally.

612
00:44:25,199 --> 00:44:30,719
Yeah, well and is that return
right? Like, how much faster can

613
00:44:30,760 --> 00:44:32,639
I make this? Yeah, I'm
used to. I'm used to using an

614
00:44:32,639 --> 00:44:37,079
I nine computer that I built myself. That's just the fastest thing I've ever

615
00:44:37,159 --> 00:44:42,239
used in my life. And the
other day I set up a webcam using

616
00:44:42,320 --> 00:44:47,719
one of those little Intel Mini stick
computers for gigs of RAM or something like

617
00:44:47,760 --> 00:44:52,920
that. And if you know,
watching that thing just crawl, you know,

618
00:44:53,079 --> 00:44:58,360
just sit there at a prompt thinking
and thinking and thinking, and I'm

619
00:44:58,440 --> 00:45:04,599
thinking, wait for computers like this
and we don't even realize it because they

620
00:45:04,599 --> 00:45:07,599
were they were so slow, they
weren't realize there's a slow until we've got

621
00:45:07,599 --> 00:45:10,679
something faster. Well, I think
when we move back kind of in the

622
00:45:10,679 --> 00:45:15,360
conversation and we were talking about,
I mean being elastic and having those options,

623
00:45:15,400 --> 00:45:20,440
it's it really is incredible now to
be able to do it in terms

624
00:45:20,480 --> 00:45:23,679
of land as in anything, even
if we're talking about just the ability to

625
00:45:23,719 --> 00:45:30,760
scale up quickly with minimal minimal downtime
kind of gives you that option when even

626
00:45:30,760 --> 00:45:34,599
if it's just for a moment of
time where you don't really know what the

627
00:45:34,639 --> 00:45:37,559
heck's going on and you're having issues, you can do it and at least

628
00:45:37,679 --> 00:45:42,400
kind of weather the storm a little
bit so you can investigate what what you're

629
00:45:42,400 --> 00:45:45,000
going to do. But I generally
find most of these things they're they're kind

630
00:45:45,000 --> 00:45:49,719
of if you have metrics, if
you know what's happening in your system,

631
00:45:49,840 --> 00:45:52,519
you can kind of tell slowly over
time where things are going to start going

632
00:45:52,559 --> 00:45:57,320
south, whether like what infrastructure it
is, what resources it is it is

633
00:45:57,320 --> 00:46:00,559
it your app compute, is it
your day to base, is it your

634
00:46:00,639 --> 00:46:07,639
cash whatever services you're using. Ultimately
you can kind of start telling. But

635
00:46:07,679 --> 00:46:09,679
it's I find one of those things
that's usually you know the metrics, usually

636
00:46:09,679 --> 00:46:13,760
when it's somewhat too later, you
don't have the foresight to know what you

637
00:46:13,800 --> 00:46:16,440
need to measure now. I mean
when you really go back and read that

638
00:46:16,559 --> 00:46:22,000
post by Prime Video, you see
exactly that. Over time as we measured

639
00:46:22,039 --> 00:46:25,880
it, we saw performance problems,
we saw them with problems, and we

640
00:46:25,920 --> 00:46:30,960
saw costs increases. Like they didn't
know when they went into this. I

641
00:46:30,960 --> 00:46:34,480
mean one would argue they built it
server list because it was quick, it

642
00:46:34,559 --> 00:46:37,760
was an easy way to go,
and it's only after it ran for a

643
00:46:37,800 --> 00:46:40,679
while and it got more popular.
It's like, huh, now, let's

644
00:46:40,719 --> 00:46:46,159
and they literally say, let's revisit
architecture because you have that option and got

645
00:46:46,239 --> 00:46:52,239
great results from the revisit, Like
this is actually a good news story.

646
00:46:52,599 --> 00:46:54,960
I think it was, And especially
at the end of it, I believe

647
00:46:55,000 --> 00:46:58,920
at the end of that post they
were saying how most of the code was

648
00:46:59,000 --> 00:47:01,679
reused. It was it's basically pulling
it out of landas that were howard they

649
00:47:01,719 --> 00:47:06,960
were being invoked, and it's putting
it into that process that's being executed in

650
00:47:07,239 --> 00:47:10,480
as a container in ECS, like
they did a platform shift, like this

651
00:47:10,559 --> 00:47:15,800
is actually wicked cool that a lot
of this code was just fine, but

652
00:47:15,840 --> 00:47:17,800
when you shifted the platform around,
and if you shifted the platform around,

653
00:47:19,000 --> 00:47:22,599
you got rid of a bunch of
contention, it reduced costs, Like there

654
00:47:22,679 --> 00:47:25,719
was all these benefits as different architecture. Would it work for you? Done?

655
00:47:25,719 --> 00:47:30,599
O, You got to go measure
what you're doing right now to try

656
00:47:30,599 --> 00:47:34,360
and compare against other architectures. I
think that's the most difficult thing. I

657
00:47:34,360 --> 00:47:37,480
think you alluded to you earlier.
It's just like we want this cookie cutter

658
00:47:37,559 --> 00:47:39,159
solution that this is just going to
work all the time, and it's just

659
00:47:39,320 --> 00:47:43,280
not the case. It's just like
the one right way. Please. Yeah,

660
00:47:43,320 --> 00:47:46,840
it's just not the case. It
doesn't exist. It's very it's very

661
00:47:46,880 --> 00:47:51,960
funny just that. Yeah. I
wish it was that simple, but there's

662
00:47:52,000 --> 00:47:54,239
too many different kinds of workloads,
and there's too many different ways at things

663
00:47:54,280 --> 00:47:58,159
evolved. You know, I wonder
if this was a great solution when they

664
00:47:58,199 --> 00:48:02,159
started. I think it was.
I how I remember it correctly is like

665
00:48:02,199 --> 00:48:07,039
I think their exact kind of message
was we never intended it to be at

666
00:48:07,079 --> 00:48:12,239
the scale that it was. Yeah, so when and I dealt with lots

667
00:48:12,239 --> 00:48:14,440
of e commerce sites like that,
we thought it was only going to have

668
00:48:14,440 --> 00:48:16,079
this many customers, and then it
got all this much bigger. It's like,

669
00:48:16,119 --> 00:48:21,840
wow, great problem, Like part
of this is his whole You ain't

670
00:48:21,880 --> 00:48:25,280
gonna need it. Like how do
you go into a complex architecture having no

671
00:48:25,440 --> 00:48:29,679
idea if the product's really going to
take off or not? To build it

672
00:48:29,719 --> 00:48:34,400
as simply as possible, because delivering
it is an important value too, you

673
00:48:34,440 --> 00:48:37,280
know. One way to make sure
it never provides value is never finished the

674
00:48:37,400 --> 00:48:39,679
darn thing, because you made an
architecture is so complicated it takes forever to

675
00:48:39,679 --> 00:48:43,320
get it built. Yeah, it
is. And when we go back to

676
00:48:43,360 --> 00:48:46,480
the kind of the one way that
this is going to work is it is

677
00:48:46,519 --> 00:48:52,880
it's it's starting simply based on what
you're aware of kind of that space.

678
00:48:52,079 --> 00:48:54,519
But like I said, if you
if you focus to me, if you

679
00:48:54,599 --> 00:48:59,840
focus on defining logical boundaries, trying
its best you can to understand the coupling

680
00:49:00,000 --> 00:49:02,360
between them, You've got a lot
of options about why you can choose.

681
00:49:02,480 --> 00:49:05,599
Then you can choose how you want
to do this stuff. Like you said,

682
00:49:05,599 --> 00:49:09,840
if there's one particular part of your
system that is heavily overloaded, yeah,

683
00:49:09,880 --> 00:49:14,920
maybe that's where you choose to remove
it and peel it off and scale

684
00:49:14,960 --> 00:49:16,039
it on its own and see if
that's sufficient. You know. The other

685
00:49:16,039 --> 00:49:21,679
thing about that good architecture, that
separation and concerns is the experiments are easier

686
00:49:21,719 --> 00:49:24,880
too. Yeah, well, I
to based on experiments. I would also

687
00:49:24,880 --> 00:49:29,960
say that not everything needs to be
created the same way, right right,

688
00:49:30,000 --> 00:49:34,400
So that means that if each if
each boundary has defines how it wants to

689
00:49:34,400 --> 00:49:37,679
do a storage and that could be
still the same underlying physical database. Instance,

690
00:49:37,920 --> 00:49:40,320
Let's say it like, hey,
we're using this relational database for the

691
00:49:40,440 --> 00:49:44,920
entire thing, the exact same data
we got it. Yeah, we're not

692
00:49:44,960 --> 00:49:47,719
gonna like split these things up more
costs also just to use the exact same

693
00:49:47,800 --> 00:49:52,119
instance. It could be in the
same physical database. But hey, these

694
00:49:52,239 --> 00:49:57,559
particular tables are owned by this particular
boundary. Don't go start muddling in my

695
00:49:57,679 --> 00:50:00,440
stuff, right, Like, defind
some type of API we want to exchange

696
00:50:00,440 --> 00:50:05,440
this if we need to. Yeah, but just define those boundaries and then

697
00:50:05,639 --> 00:50:08,880
from there maybe you decide later on, you know what, like this particular

698
00:50:08,880 --> 00:50:14,639
boundary that relational just wasn't a good
choice here isn't needed. So yeah,

699
00:50:14,679 --> 00:50:17,599
so like when you're staying like experiment, it's like you get that option,

700
00:50:19,000 --> 00:50:22,920
right, It's and it's not like
you're doing this because you want that option.

701
00:50:22,960 --> 00:50:25,000
It's just you're getting it kind of. It kind of is a little

702
00:50:25,000 --> 00:50:29,079
free lunch. And that's it comes
at the complexity of you have to define

703
00:50:29,079 --> 00:50:32,320
these boundaries. It's not just one
massive thinks about it. Yeah, but

704
00:50:32,400 --> 00:50:36,360
also now that you have that boundary, it's like, hey, would this

705
00:50:36,440 --> 00:50:39,599
be better served in an object store
instead of a relational database. Well,

706
00:50:39,679 --> 00:50:43,639
let's let's see what it takes to
do that. You know, maybe a

707
00:50:43,679 --> 00:50:45,639
little spike on it to do some
experimentation, and it's like, hey,

708
00:50:45,639 --> 00:50:49,119
this works pretty good. I'll finish
implementing it, and then let's do some

709
00:50:49,159 --> 00:50:52,039
benchmarks. You know, I've added
that they you know, then we'll maybe

710
00:50:52,079 --> 00:50:55,360
deal with some of the complexity around
it. Like it is. These are

711
00:50:55,440 --> 00:51:01,719
fun explorers too, right, Like
I found I had pretty good patterns for

712
00:51:01,760 --> 00:51:05,960
scaling websites because I did a ton
of them, and I was often right.

713
00:51:06,559 --> 00:51:09,480
But you'd get into more esoteric systems, more interior type architectures, you're

714
00:51:09,559 --> 00:51:13,760
like, yeah, I see that
this is likely the bottleneck. I see

715
00:51:13,800 --> 00:51:15,920
three ways for us to try and
scale us. I can't tell you which

716
00:51:15,920 --> 00:51:21,960
one's gonna win, Like, we've
got to try exactly. And I think

717
00:51:22,239 --> 00:51:25,880
kind of my point when I wrote
this post even some of the videos is

718
00:51:25,920 --> 00:51:30,559
just there's just you have different ways
of dealing with it, right, So

719
00:51:30,599 --> 00:51:34,760
whether that be scaling up, scaling
out, knowing where you're going to kind

720
00:51:34,800 --> 00:51:38,719
of move that ballneck move that problem, whether you're off floating work with queues,

721
00:51:38,840 --> 00:51:44,800
messaging, whether it be materialized views
for queries, and the other point

722
00:51:44,840 --> 00:51:47,960
I want to make is, at
least in my experience, is generally there's

723
00:51:49,000 --> 00:51:52,360
hot paths. Right, Like,
especially in big systems, I always kind

724
00:51:52,360 --> 00:51:55,880
of use eighty twenty rule, is
that you're going to have the twenty percent

725
00:51:55,960 --> 00:52:01,199
that's causing all your havoc basically right, and just being able to optimize those

726
00:52:01,239 --> 00:52:06,079
So whether that be never mind from
an infrastructure point of view, but just

727
00:52:07,280 --> 00:52:09,360
let's look at where those routes are, Like, let's look at those code

728
00:52:09,360 --> 00:52:13,840
pass What can we be doing there? Specifically? Are we making too many

729
00:52:13,880 --> 00:52:15,800
round trips in the database? Maybe
we're just doing something absurd where we're just

730
00:52:16,000 --> 00:52:21,280
hitting our database and fetching able to
a whole lot of nonsense that we don't

731
00:52:21,320 --> 00:52:24,719
need. You'd be surprised how much
that happens. So it's even just and

732
00:52:24,760 --> 00:52:29,320
it can be cost effective, as
crazy as sounds. Sometimes it's like,

733
00:52:29,679 --> 00:52:32,320
let's just spend some time doing this, Like, let's just look at what

734
00:52:32,320 --> 00:52:37,360
we're actually doing. The question is
do you know what twenty percent or do

735
00:52:37,400 --> 00:52:39,599
you have to get out of the
field and run it for a while ago,

736
00:52:39,639 --> 00:52:44,039
Oh, this is the twenty percent
that's the problem shelves. I think

737
00:52:44,079 --> 00:52:46,400
metrics, but I think intuitively in
a large system, least in my experience,

738
00:52:46,719 --> 00:52:52,159
you know what that core part of
functionality is generally I think even from

739
00:52:52,199 --> 00:52:54,760
if you were to ask, say, people on the business side, like

740
00:52:54,800 --> 00:52:59,199
hey, and the app, where
do you think the most action is at

741
00:52:59,280 --> 00:53:01,400
the because that's what they're in most
of the time, right, Like it's

742
00:53:01,639 --> 00:53:04,960
I would say, there's kind of
the core part of your system as well

743
00:53:05,000 --> 00:53:12,199
as that fringe supporting more generic stuff. So like when I was talking about

744
00:53:12,320 --> 00:53:15,280
distribution, say let's say like CRM
or something like that, maybe you're like,

745
00:53:15,280 --> 00:53:17,280
you know what, that's not a
big part of our business. We

746
00:53:17,280 --> 00:53:21,400
have some rudimentary thing for dealing with
customers. It's really not that big a

747
00:53:21,400 --> 00:53:23,079
deal. Like our bread and butter
is warehouse management, and that's where all

748
00:53:23,079 --> 00:53:27,599
the complexity is, right, so
you kind of know to a degree,

749
00:53:27,639 --> 00:53:30,320
I think even on the business side, they could probably give you some hints.

750
00:53:30,840 --> 00:53:35,079
Well, in the web world,
nobody ever went wrong tuning a landing

751
00:53:35,119 --> 00:53:37,239
page, you know, because it
just had so much traffic, like it

752
00:53:37,280 --> 00:53:40,199
was pretty much a guaranteed win.
It spends some time in there or usually

753
00:53:40,199 --> 00:53:43,880
it was just you got to a
point where it's like, hey, the

754
00:53:43,920 --> 00:53:49,320
incremental improvement left is so small you
can't justifind more time on it. There

755
00:53:49,320 --> 00:53:53,239
are easier winds elsewhere, but they
may not be as important. Ah,

756
00:53:53,280 --> 00:53:57,639
it's a fun battle, you know. It's not like there's any simple solution

757
00:53:57,639 --> 00:54:00,280
to this. You've got to go
out measure and feel an ound and hypothesize

758
00:54:00,320 --> 00:54:04,559
and build some tests and push a
little further. But I wonder if we're

759
00:54:04,559 --> 00:54:07,000
speaking heresy here, because last time
I look, there's a cloud and I

760
00:54:07,039 --> 00:54:09,639
just have a knob I have to
turn up right, Like, isn't there?

761
00:54:09,639 --> 00:54:13,440
They go faster knob of everything related
to the cloud. You just spend

762
00:54:13,480 --> 00:54:17,519
more. I mean too, I
like we're joking, but like somewhat yea

763
00:54:17,840 --> 00:54:22,719
in this sense, right, it's
at least being able to scale up in

764
00:54:22,760 --> 00:54:25,280
a lot of circumstances, like I
can always shift to a larger VM,

765
00:54:25,360 --> 00:54:30,280
and they are perfectly willing to sell
you a bigger and bigger VM these days.

766
00:54:30,280 --> 00:54:34,480
And seeing two is that you can
do that with at least with app

767
00:54:34,519 --> 00:54:37,800
services on Azure you can. You
can. It's really trivial to add and

768
00:54:38,280 --> 00:54:42,480
scale it up exactly like if you
if you already are in the situation where

769
00:54:42,480 --> 00:54:46,320
all we we scale out, say
maybe our web app and we're running three

770
00:54:46,360 --> 00:54:51,400
instances, but all of a sudden
things are going south, and we'll just

771
00:54:51,440 --> 00:54:53,760
add more instances. But like I
said, and that may work. You

772
00:54:53,800 --> 00:54:58,840
had one instance and then all of
a sudden, you start noticing, like

773
00:54:58,880 --> 00:55:02,039
I said, downstream start suffering,
and then it just bottleneck and you get

774
00:55:02,039 --> 00:55:06,199
a back end bottleneck. Like well, yeah, okay, you also have

775
00:55:06,280 --> 00:55:10,400
to be your code has to be
able to handle multiple spanning, multiple machines.

776
00:55:12,000 --> 00:55:14,639
That's an old talk I used to
do from one server to two.

777
00:55:14,800 --> 00:55:17,840
Yeah, you know, it's a
pretty hard leap just to get to that

778
00:55:17,880 --> 00:55:22,800
point, you know what I mean. With Blazer server anyway, which is

779
00:55:22,800 --> 00:55:28,360
sort of like in my wheelhouse now
that if you're using their um the signal

780
00:55:28,480 --> 00:55:34,119
ar service, it's pretty trivial.
You there's affinity is turned on by default,

781
00:55:34,159 --> 00:55:37,679
so whatever, the first server that
you logged into, that's the one

782
00:55:37,679 --> 00:55:40,320
that you're going to use for the
rest of your session. And that's that's

783
00:55:40,440 --> 00:55:45,559
nice to not have to worry about
that. Yeah, I think I think

784
00:55:45,559 --> 00:55:51,239
the scale ups scale out just with
cloud just making it so much easier is

785
00:55:51,280 --> 00:55:54,559
great, and I leverage it quite
often when things start going south. But

786
00:55:55,119 --> 00:55:58,559
I guess in experience, I kind
of okay, well, like we got

787
00:55:58,599 --> 00:56:00,800
some thresholds here where I know,
okay, if this is scaling out,

788
00:56:01,920 --> 00:56:06,760
this is when it's a little bit
too far. I just can't infinitely scale

789
00:56:06,760 --> 00:56:09,280
out and everything's going to be going
to be great. And to that effect

790
00:56:09,280 --> 00:56:14,480
too, A lot of it is
things that aren't even in your control.

791
00:56:15,000 --> 00:56:20,559
So if you're leveraging, say some
external services, and you're making requests to

792
00:56:20,599 --> 00:56:23,840
them, I don't know the examples, like say you're making a call to

793
00:56:24,639 --> 00:56:29,679
being Maps or Google Maps or any
other service, some type of payment gateway,

794
00:56:29,679 --> 00:56:32,440
and you expect that to on the
happy time, it only takes like

795
00:56:32,519 --> 00:56:37,480
hunter milliseconds, it's fine, and
all of a sudden that thing starts taking

796
00:56:37,320 --> 00:56:40,199
seconds. Yeah, right, like
all of a sudden. It's so,

797
00:56:40,360 --> 00:56:45,079
what the heck's going on? Where
what we were mentioning with metrics that comes

798
00:56:45,079 --> 00:56:47,320
into play because you know, how
matter how much you scale out, you

799
00:56:47,360 --> 00:56:52,360
ain't going to help that. Yeah, yeah, the simple So what's next

800
00:56:52,400 --> 00:56:58,960
for you, Derek? What's in
your same old thing of just creating videos

801
00:56:59,000 --> 00:57:01,679
and blogs at all? Kind of
pertain to everything we just talked about pretty

802
00:57:01,760 --> 00:57:06,519
much for the most part. Well, I'm going to urge our listeners to

803
00:57:06,639 --> 00:57:14,159
go check out your blog and continue
reading it. Thanks so much for spending

804
00:57:14,159 --> 00:57:16,360
a time with us. It's been
enlightening. Yeah, I appreciate this was

805
00:57:16,519 --> 00:57:19,960
this was really cool, all right, and we'll see you next time on

806
00:57:20,159 --> 00:57:45,119
dot net rocks. Dot net Rocks
is brought to you by Franklin's Net and

807
00:57:45,239 --> 00:57:50,559
produced by Pop Studios, a full
service audio, video and post production facility

808
00:57:50,880 --> 00:57:54,800
located physically in New London, Connecticut, and of course in the cloud online

809
00:57:54,800 --> 00:58:00,639
at pwop dot com. Visit our
website at dt nt R o c ks

810
00:58:00,719 --> 00:58:07,239
dot com for RSS feeds, downloads, mobile apps, comments, and access

811
00:58:07,239 --> 00:58:10,719
to the full archives going back to
show number one, recorded in September two

812
00:58:10,719 --> 00:58:15,280
thousand and two. And make sure
you check out our sponsors. They keep

813
00:58:15,360 --> 00:58:19,039
us in business. Now go write
some code, See you next time.

814
00:58:19,920 --> 00:58:21,519
You got a vand
