WEBVTT

1
00:00:01.080 --> 00:00:04.799
How'd you like to listen to dot
net rocks with no ads? Easy?

2
00:00:05.360 --> 00:00:09.439
Become a patron for just five dollars
a month. You get access to a

3
00:00:09.480 --> 00:00:14.240
private RSS feed where all the shows
have no ads. Twenty dollars a month.

4
00:00:14.279 --> 00:00:18.440
We'll get you that and a special
dot net Rocks patron mug. Sign

5
00:00:18.519 --> 00:00:35.000
up now at Patreon dot dot NetRocks
dot com. Hey guess what, it's

6
00:00:35.039 --> 00:00:39.159
dot net rocks. I'm Carl Franklin
and I'm Richard Campbell here for another hour

7
00:00:39.200 --> 00:00:43.320
of Meret Gordon Nurse. Yes,
because we were talking about meat before the

8
00:00:43.359 --> 00:00:46.640
show. Yes, yes, we
were, as you do. So you

9
00:00:46.679 --> 00:00:51.240
know, every time we end a
show and it's like solid awesome, which

10
00:00:51.280 --> 00:00:54.920
is most of them, Richard always
says, well, that was an hour

11
00:00:55.000 --> 00:01:03.679
of media goodness. Well, and
we're digging into AP making APIs better,

12
00:01:03.759 --> 00:01:06.120
then this is going to be all
medi goodness for sure. Oh, it's

13
00:01:06.159 --> 00:01:08.959
totally gonna be all medi goodness.
Anthony Alaibe is here. We're going to

14
00:01:10.000 --> 00:01:12.280
talk to him in a few minutes. But first I have some more goodness

15
00:01:12.400 --> 00:01:26.599
from Microsoft for better no framework awesome. So I just saw this as a

16
00:01:26.640 --> 00:01:37.280
blog post from Dan Roth. Yeah, introducing this experimental U tool or feature

17
00:01:37.400 --> 00:01:45.680
components called smart components, and these
are essentially AI wrapped edit controls. So

18
00:01:46.000 --> 00:01:49.920
one of them is a smart paste, so it's takes the place of an

19
00:01:49.920 --> 00:01:53.200
input textbox and by smart pace.
You know, if you go to a

20
00:01:53.239 --> 00:01:56.799
form and it's got all these fields
name, address, phone number YadA,

21
00:01:56.840 --> 00:02:00.920
YadA, YadA, credit card number
YadA, well you could copy, like

22
00:02:00.280 --> 00:02:07.680
text from notepad or something that has
all those details arranged in paragraphs or whatever,

23
00:02:07.879 --> 00:02:10.599
copy and then paste it into the
form, and poof, everything goes

24
00:02:10.639 --> 00:02:15.800
in the right place. Nice.
Are you interested? I am? This

25
00:02:15.840 --> 00:02:19.599
is really cool. No, no, you know, this is what I

26
00:02:19.639 --> 00:02:22.960
figured all along. As these technologies
mature, we're just going to incorporate them.

27
00:02:22.960 --> 00:02:24.400
We're not going to make apps about
them. We're just going to incorporate

28
00:02:24.400 --> 00:02:28.960
them in our apps exactly. And
that's what I love about this. It's

29
00:02:28.960 --> 00:02:36.039
a great it's a great application of
a high technology to make every day ordinary

30
00:02:36.120 --> 00:02:39.680
things easier. Absolutely, and that's
what They also have a text area,

31
00:02:40.319 --> 00:02:45.599
so it will do sort of you
put some details of things. You can

32
00:02:45.639 --> 00:02:50.400
train it very quickly on just some
sentences that are in the style of and

33
00:02:50.439 --> 00:02:53.879
then it will suggest to you like
autocomplete, you know, like Gmail does

34
00:02:53.919 --> 00:02:58.479
when you're but with real details.
And then there's also a combo box,

35
00:02:59.199 --> 00:03:04.960
so when you're pasting components, it
will pick the right value from a dropdown

36
00:03:05.039 --> 00:03:07.680
combo box if one is there.
Nice little things like that. So this

37
00:03:07.719 --> 00:03:12.879
is all good. So we're gonna
link to it. It's eighteen ninety one

38
00:03:12.960 --> 00:03:17.680
dot pop, dot me, or
you could just search for dot net smart

39
00:03:17.680 --> 00:03:22.919
components. Daniel Roth and Steve Sanderson
does a great demo. And by the

40
00:03:22.919 --> 00:03:28.240
way, he is getting really animated
lately in his videos, like he's turning

41
00:03:28.280 --> 00:03:31.800
into like Joe actor, like he
I was really like a used car salesman,

42
00:03:31.919 --> 00:03:37.120
but not quite as not quite as
catchy. But he's really selling it.

43
00:03:37.639 --> 00:03:40.520
Oh wow, that's interesting because he's
only so reserved. He's subdued most

44
00:03:40.560 --> 00:03:46.319
of the time. I think that
was Glenn Block, but yes, yeah,

45
00:03:46.360 --> 00:03:49.960
he is a very reserved guy.
But he's really excited about this and

46
00:03:50.479 --> 00:03:53.159
it's good, such a good idea, it's very cool, fantastic. So

47
00:03:53.520 --> 00:03:58.199
eighteen ninety one dot pop, dot
me, go check it out. Who's

48
00:03:58.240 --> 00:04:01.639
talking to us Richard gradyment of Show
eighteen o two. So I went back

49
00:04:01.680 --> 00:04:05.240
a bit that's July of twenty two
when we were at ANC Lennon. We

50
00:04:05.360 --> 00:04:10.840
talked to Victoria al Mazova, who
we should talk to again because she's so

51
00:04:10.919 --> 00:04:15.599
fishit and smart. That was the
whole measuring of dev secops, which is

52
00:04:15.599 --> 00:04:17.279
a bit of a non sequity of
this comment from Rob Garner, one of

53
00:04:17.279 --> 00:04:21.600
our longtime listeners. Hey Rob,
thanks for commenting again, even though middlely

54
00:04:21.600 --> 00:04:26.160
a couple of years ago, because
I love what he said here. He

55
00:04:26.160 --> 00:04:29.720
says, Okay, someone has to
say it. It's bound to result in

56
00:04:29.759 --> 00:04:32.839
the loss of cool points. But
as youre sir, seems like it'd be

57
00:04:32.879 --> 00:04:36.079
hard to use at times. Sometimes
I don't think I was supposed to say

58
00:04:36.079 --> 00:04:42.240
that, but I'm saying it.
And my example is functions. They're supposed

59
00:04:42.279 --> 00:04:45.920
to really the developer of the complexity
of thinking about the structure of an API,

60
00:04:46.480 --> 00:04:49.399
to free you to just write code. And the Microsoft examples were great

61
00:04:49.480 --> 00:04:54.959
right up until you need to apply
the repository pattern. Then you have to

62
00:04:55.040 --> 00:04:59.199
use the pendency injection. They discover
you'd be better using the correct dependency approach

63
00:04:59.399 --> 00:05:02.600
for your version of functions or whether
you're in or out of process, and

64
00:05:02.600 --> 00:05:05.079
then you have to dig through all
the examples to figure out what you're doing,

65
00:05:05.120 --> 00:05:10.720
because the approach is change several sigiment
ways for each version of Azure function.

66
00:05:10.800 --> 00:05:13.759
And at that point you should be
asking yourself, is a function really

67
00:05:13.759 --> 00:05:15.839
what I want here? Yeah?
You know, and because that's a code

68
00:05:15.839 --> 00:05:18.439
smell right well. And it's the
thing that made me jump, was like

69
00:05:18.600 --> 00:05:23.800
not thinking about the structure API,
because you should always think about the structure

70
00:05:23.879 --> 00:05:26.199
API. Yeah. I think we're
going to talk about that a lot today.

71
00:05:26.279 --> 00:05:29.639
I think so. But Rob,
you know, you said the thing

72
00:05:29.639 --> 00:05:31.279
we're not allowed to say out loud. And part of this is just the

73
00:05:31.360 --> 00:05:35.720
twitching of Azure right Like Microsoft still
figuring out how to deliver these things to

74
00:05:35.800 --> 00:05:39.519
us too, which makes it really
makes it tough to write code against it

75
00:05:39.519 --> 00:05:43.319
because you don't know what's going to
happen next. And I don't know if

76
00:05:43.439 --> 00:05:46.240
I'm put if I'm making that API
available to more than just me, I

77
00:05:46.279 --> 00:05:49.920
need to think a lot about making
it right and what that looks like.

78
00:05:50.240 --> 00:05:53.360
Indeed, So Rob, thank you
so much for comment. To copy of

79
00:05:53.439 --> 00:05:55.439
music code by is on its way
to you. And if you'd like a

80
00:05:55.480 --> 00:05:58.120
copy of music Code buy, I
write a comment on the website at Donna

81
00:05:58.240 --> 00:06:00.759
rocks dot com or on the facebooks. We publish it show there, an

82
00:06:00.759 --> 00:06:02.079
if you comment there and I read
on the show, will send you copy

83
00:06:02.120 --> 00:06:04.560
of us to go by, and
you can follow us on ex Twitter,

84
00:06:04.600 --> 00:06:08.399
Twitter x or whatever the hell they're
calling it these days. But the cool

85
00:06:08.439 --> 00:06:12.639
kids are hanging out on mastadon.
I'm at Carl Franklin at techob dot social,

86
00:06:12.720 --> 00:06:15.920
and I'm Rich Campbell at mastadon dot
social, and of course you can

87
00:06:15.959 --> 00:06:18.600
find all the ways to get in
touch with me at Carl Franklin dot com.

88
00:06:19.279 --> 00:06:24.680
All right, let's introduce Anthony.
This is his first time on dot

89
00:06:24.720 --> 00:06:29.160
net rocks, so let me give
them the formal introduction. Anthony Alaibe has

90
00:06:29.160 --> 00:06:33.600
spent over a decade building software at
companies like Opera, Parody, Polka Dot,

91
00:06:33.680 --> 00:06:39.519
and Delivery Hero. He has faced
his fair share of dealing with unreliability

92
00:06:39.560 --> 00:06:46.040
and breaking changes and APIs, including
losing over two million dollars in orders to

93
00:06:46.199 --> 00:06:51.439
such API issues at Delivery Hero,
which prompted him to build API toolkit dot

94
00:06:51.480 --> 00:06:58.560
io to help companies navigate their back
end and API landscape. He has an

95
00:06:58.600 --> 00:07:01.519
academic background in medicine and it is
currently based in Berlin. When he's not

96
00:07:01.519 --> 00:07:06.360
writing code, you can find him
binging an anime series or thinking about how

97
00:07:06.399 --> 00:07:13.120
principles from the medical world can help
us build software better. So from the

98
00:07:13.160 --> 00:07:19.319
medical world, So you're saying we
should measure software using the metric system.

99
00:07:19.879 --> 00:07:24.600
Obviously the rest of the world does
you guys need to catch up. Hey,

100
00:07:24.920 --> 00:07:29.480
I didn't start the fire, Okay, I just live here, make

101
00:07:29.519 --> 00:07:31.800
the freaking rules. In fact,
I got an A on my metric test

102
00:07:31.879 --> 00:07:45.759
in sixth grade in moose Humper.
Okay, silliness. So, yeah,

103
00:07:45.800 --> 00:07:50.399
what did you think of the comment
that Richard wrote about functions being I think

104
00:07:50.399 --> 00:07:55.079
I only read it. I didn't
read it. Yeah, you wrote it

105
00:07:55.079 --> 00:07:59.519
with your mouth kind of. I
made noises about it. It's gonna be

106
00:07:59.519 --> 00:08:05.360
one of those Yeah ahead, Yeah, I mean I think Richard said it

107
00:08:05.600 --> 00:08:09.759
said a nice right, we want
to use functions functions as much as possible.

108
00:08:09.879 --> 00:08:16.079
You're small constrained, But then soon
you want to access it that's a

109
00:08:16.160 --> 00:08:20.319
base or you want to access access
to the dependencies, and it doesn't work

110
00:08:20.319 --> 00:08:28.319
out anymore because yeah, you need
dependencies somehow. Pretty soon you're just holding

111
00:08:28.319 --> 00:08:33.200
on to functions. Is for the
purpose of having a function exactly, but

112
00:08:33.440 --> 00:08:39.279
I mean so at the code level, I think when we can, you

113
00:08:39.320 --> 00:08:43.600
know, functions can be pretty or
I think they might preferred way you know,

114
00:08:43.720 --> 00:08:50.080
to go when I can, just
because they're constrained, you know exactly

115
00:08:50.080 --> 00:08:54.080
what goes in here. You don't
expect so much magic, especially if it's

116
00:08:54.159 --> 00:08:58.200
like, you know, some kind
of pure simple function. You know,

117
00:08:58.279 --> 00:09:03.480
it's like maybe not gonna reach out
to data days without extra Also, I

118
00:09:03.480 --> 00:09:07.240
find that functions are best used when
they're used a lot, so they don't

119
00:09:07.279 --> 00:09:11.120
go to sleep. Yeah you know
what I mean, Because when a function

120
00:09:11.200 --> 00:09:13.480
goes to sleep and the next user
comes around and wakes it up, they

121
00:09:13.519 --> 00:09:18.919
gotta they might take the wrap is
broken. Yeah, I what fund did

122
00:09:18.919 --> 00:09:26.360
I be talking about? I think
Azure functions. Functions? Yeah, okay,

123
00:09:26.360 --> 00:09:31.559
okay, I was talking about beyond
the functions somehow. Yeah, I'm

124
00:09:31.600 --> 00:09:35.799
sorry, that's fine. So,
yeah, we've done a bunch of shows

125
00:09:35.840 --> 00:09:39.480
around the whole concept of the modular
monolith, and to me, it's like

126
00:09:39.080 --> 00:09:43.600
the function is where you put the
the badly behaved piece of your monolith.

127
00:09:45.480 --> 00:09:48.279
That it's the one that's being called
all the time, and every time it

128
00:09:48.320 --> 00:09:54.159
needs to change, it resonates the
whole uh block a day of app like,

129
00:09:54.679 --> 00:09:56.000
so you want to put it in
its own wrap, or it's gonna

130
00:09:56.039 --> 00:10:01.399
always be active or most of the
time active. You need to scale independently

131
00:10:01.440 --> 00:10:05.279
of everything else, Like why why
I have to light up more instead of

132
00:10:05.320 --> 00:10:09.440
app service when you could just have
this noisy thing running in it in a

133
00:10:09.519 --> 00:10:15.840
function exactly. Also when you want
to when you're already dip in an ecosystem,

134
00:10:15.960 --> 00:10:22.120
for example, when you want to
you want to react to events,

135
00:10:22.360 --> 00:10:28.360
say, you know, like streaming
events, do something and do something else

136
00:10:28.360 --> 00:10:33.279
and trigger something. Gain action functions
are very good for that because they just

137
00:10:33.320 --> 00:10:37.240
get caught when that event happens,
especially if it's an event that doesn't happen

138
00:10:39.360 --> 00:10:43.519
constantly. You know. Yeah,
hey, can you tell us the delivery

139
00:10:43.559 --> 00:10:52.039
hero story? Because I love hearing
about people losing millions of dollars. I

140
00:10:52.240 --> 00:10:56.840
know, I think the delivery hero
story is not that. I think it's

141
00:10:56.840 --> 00:11:01.559
a story most of us have experience, maybe you know, at different scales,

142
00:11:01.039 --> 00:11:07.039
and what happened was that? Wait? Wait, what is delivery hero?

143
00:11:07.159 --> 00:11:09.519
Because I don't know. This is
a popular in the United States,

144
00:11:09.679 --> 00:11:15.720
right, but elsewhere this is like
this uber eats kind of thing. Yeah,

145
00:11:16.000 --> 00:11:20.000
So deliver Hero is this company of
companies. That's why the brand is

146
00:11:20.039 --> 00:11:24.399
not as popular. But it's a
company that owns I would say, most

147
00:11:24.440 --> 00:11:28.919
of the food delivery brands outside of
China. So if you think of Global

148
00:11:30.200 --> 00:11:33.080
or food Panda, you know,
depending on where you are food, but

149
00:11:33.159 --> 00:11:39.639
they only deliver Hero sandwiches. No, most of the brands that are owned

150
00:11:39.639 --> 00:11:43.639
by deliver here, Like there's an
online pizza brand and I think they only

151
00:11:43.960 --> 00:11:50.759
deliver pizza. But then the other
regular Uber eats style right brands? Yeah,

152
00:11:50.360 --> 00:11:52.639
yeah, and I see, like
this is not North America, this

153
00:11:52.759 --> 00:11:58.759
is South America, Europe, Africa, Middle East, Southeast Asia. Exactly.

154
00:12:00.519 --> 00:12:03.320
Interesting, So what were the API
issues that lost two million dollars?

155
00:12:05.039 --> 00:12:11.000
That specifically was a migration, so
it had to migrate. We were writing

156
00:12:11.080 --> 00:12:15.559
a service, so we're writing just
taking out a little bit of a monolith

157
00:12:16.120 --> 00:12:22.639
to be a separate service. And
this service was the sech and discovery experience

158
00:12:22.720 --> 00:12:26.600
where you could set for food for
most of these apps and get the list

159
00:12:26.639 --> 00:12:33.519
of dishes. And so we implemented
this. So my team then we implemented

160
00:12:33.559 --> 00:12:39.080
this service like you would write,
you know, we we tried to get

161
00:12:39.120 --> 00:12:45.360
the specification of the endpoint that we're
migrating. But you know, with legacies

162
00:12:45.679 --> 00:12:50.399
services that documentation might not always be
the best, so well, that's a

163
00:12:50.519 --> 00:12:58.759
very polite way to put it.
So yeah, so we of course did

164
00:12:58.840 --> 00:13:01.919
the manual a way as well,
which would be that you you know,

165
00:13:03.000 --> 00:13:07.679
copy the request and maybe difits use
that as as the infut to implement this

166
00:13:07.759 --> 00:13:13.879
new service. And when it was
time to roll out, we even went

167
00:13:13.960 --> 00:13:20.639
to step further that we would we
run both of them on staging and you

168
00:13:20.679 --> 00:13:24.159
know, differing, so when a
request comes, to send it to the

169
00:13:24.279 --> 00:13:28.879
legacy service and also send it to
the new service, and then put requests

170
00:13:28.879 --> 00:13:31.320
together to make sure that you know, we was doing exactly what was right.

171
00:13:31.360 --> 00:13:35.000
So you're you're literally just white boxing
this. You can't see what the

172
00:13:35.039 --> 00:13:39.000
original code is. You're just saying, if I do am I getting the

173
00:13:39.039 --> 00:13:41.559
same outputs for the same input on
the old one as the new one,

174
00:13:43.919 --> 00:13:50.399
exactly. So this the old code
was really it just it's just some I

175
00:13:50.440 --> 00:13:52.600
don't like you said the word legacy, but it was one of these services

176
00:13:52.639 --> 00:13:58.320
where most of the original authors were
no longer in the company. They're gone,

177
00:13:58.440 --> 00:14:03.320
Yeah, yeah, they're gone.
Totally normal exactly, and it's difficult

178
00:14:03.360 --> 00:14:09.159
to you know, to get dip
into the weeds properly. But even with

179
00:14:09.200 --> 00:14:15.159
this care, defering all the requests, writing as much tests as possible,

180
00:14:15.759 --> 00:14:20.639
when we went to production, thinks
they went crazy, you know, So

181
00:14:20.720 --> 00:14:26.559
did you know right away there was
a problem or did it just was losing

182
00:14:26.639 --> 00:14:30.639
data missing things? So when we
went to production, obviously we you know,

183
00:14:30.879 --> 00:14:35.720
we have the deployments checklists, you
know, check that things are still

184
00:14:35.759 --> 00:14:41.720
working as expected in as many countries
as possible, but we didn't check every

185
00:14:41.720 --> 00:14:43.840
country because we were perating were at
the time we were put it in fifty

186
00:14:43.879 --> 00:14:50.000
five countries. You know, we're
not gonna test fifty five countries. Yeah,

187
00:14:50.960 --> 00:14:54.960
And so what happened was that in
scandy In some of these countries,

188
00:14:56.000 --> 00:15:03.000
specifically in Scandinavia, they have a
leg lego we requirements that food delivery companies

189
00:15:03.159 --> 00:15:09.480
have to include the dietary requirements of
any dishes that they offer. Right,

190
00:15:09.639 --> 00:15:13.799
none of us knew about this requirements, Like, I had no idea requirements

191
00:15:13.879 --> 00:15:20.720
what requirements? So are these nutritional
nutrition values all that kind of stuff,

192
00:15:20.120 --> 00:15:26.679
exact cast whatever, and also allergies
and things like that. Okay, yes,

193
00:15:26.919 --> 00:15:31.080
but this was a requirement only in
Scandinavia. The other countries couldn't curt

194
00:15:31.200 --> 00:15:35.039
us. So everything worked perfectly in
the other countries of course. So you

195
00:15:35.120 --> 00:15:39.879
just you just turned off. So
did it fail in Scandinavia or did you

196
00:15:39.000 --> 00:15:46.279
not provide the data or did you
get sued? Yes, we're just just

197
00:15:46.639 --> 00:15:54.799
crashing in Scandinavia, so wine exactly. So a couple one hundred thousand people

198
00:15:54.799 --> 00:16:03.279
didn't get their Ludificit deliveries. Yeah, So that that's basically what happened.

199
00:16:03.360 --> 00:16:07.200
And it seemed like a selly thing, you know, just a couple of

200
00:16:07.240 --> 00:16:11.679
missing fields. We had pretty good
monitoring set up we have, you know,

201
00:16:11.720 --> 00:16:17.399
we try to do things carefully with
this migration, but that did not

202
00:16:17.840 --> 00:16:21.559
prevent us from running into this trouble
and maybe start thinking, you know,

203
00:16:22.600 --> 00:16:26.679
why can't we automate catching you know, breaking changes or any kind of issues.

204
00:16:27.799 --> 00:16:30.200
So that is basically what happened.
You know, we most of us

205
00:16:30.240 --> 00:16:34.799
have been there, so yeah,
yeah, I know the pain. Maybe

206
00:16:34.799 --> 00:16:38.360
not that much money, but I
know the pain. Yeah, we have

207
00:16:38.399 --> 00:16:42.080
to be very careful, do you
like that's the whole point, Like,

208
00:16:42.200 --> 00:16:47.879
be more careful next time. Isn't
a good strategy? Like we should be

209
00:16:47.960 --> 00:16:52.200
able to not be careful and we
can't do harm. You know, what's

210
00:16:52.200 --> 00:16:56.240
a good idea is to have a
lunch and pass around the Arizona missions insurance

211
00:16:56.279 --> 00:17:00.320
policy that your company has, and
it tells you what you're on the hook

212
00:17:00.399 --> 00:17:04.200
for. And you know, typically
in one of those policies, it'll list

213
00:17:04.279 --> 00:17:11.759
right there failure to prevent a denial
of service attacks for example. So if

214
00:17:11.759 --> 00:17:18.400
you're publishing an API and you don't
have any kind of throttling on that API,

215
00:17:18.599 --> 00:17:23.599
you could be sued for one of
your downstream customers having a denial of

216
00:17:23.640 --> 00:17:30.480
service attack. How about that?
I'm just shocked at Jillie. That is

217
00:17:30.039 --> 00:17:33.079
in a lot of contracts. Well, it's in an insurance policy. The

218
00:17:33.160 --> 00:17:37.200
kinds of things that it would cover. Yeah, well, I mean first

219
00:17:37.200 --> 00:17:42.640
problem with reading insurance policies is staying
awake. Yeah. The second problem is

220
00:17:42.799 --> 00:17:48.119
it will just strike you with fear
at all the possible risks. You know,

221
00:17:48.160 --> 00:17:49.759
but that's a good thing to know, Like, what what are the

222
00:17:49.799 --> 00:17:55.519
things that the insurance companies are concerned
about in terms of aris and omissions that

223
00:17:55.640 --> 00:18:00.039
you should kind of you know,
think about. Yeah, not the litigating

224
00:18:00.119 --> 00:18:04.640
is ever is likely to provide a
useful outcome. Now I don't want to

225
00:18:04.640 --> 00:18:10.799
avoid that. Yeah, winning a
lawsuits like winning an earthquake, right,

226
00:18:10.880 --> 00:18:14.960
Like, there's no good outcomes there, right, So that the key is

227
00:18:15.119 --> 00:18:18.359
to not get suited in the first
place. Yeah, try and try and

228
00:18:18.400 --> 00:18:22.000
work this out. So is was
this the story that led you towards API

229
00:18:22.119 --> 00:18:29.559
toolkit? Yeah, it is precisely
this. But you know, all through

230
00:18:29.799 --> 00:18:34.079
our careers, we've we've faced a
lot of these little issues that kind of

231
00:18:34.119 --> 00:18:38.440
stack up in the back of our
minds before even a delivery. Here.

232
00:18:38.599 --> 00:18:44.519
I used to work in a at
a basically a digital bank, you know,

233
00:18:44.680 --> 00:18:48.440
and with these digital banks we have, we still have to work with

234
00:18:48.519 --> 00:18:55.880
dead parties. M So the dead
parties could be other aps like MasterCard or

235
00:18:55.880 --> 00:18:57.839
other banks. In this case,
it was in Nigeria, so we had

236
00:18:57.839 --> 00:19:04.279
to communic get with other bands and
the national into band settlement system. And

237
00:19:04.640 --> 00:19:10.559
it was very common that, you
know, these tech parties would either just

238
00:19:10.799 --> 00:19:15.880
go down or they would just introduce
breaking changes. It could be something as

239
00:19:15.880 --> 00:19:19.119
simple as we're naming a field,
you know, maybe someone named the field

240
00:19:19.200 --> 00:19:25.400
messages before and then some new engineer
says, why is this messages it's always

241
00:19:25.440 --> 00:19:30.759
one message and then changes it to
a message harmlets from his perspective. But

242
00:19:30.039 --> 00:19:33.680
you know, no one was prepared
for that. I worked on a project

243
00:19:33.720 --> 00:19:40.079
once where the architect had every field
be an array instead of just a single

244
00:19:40.160 --> 00:19:45.839
value. In the event that someday
down the road, perhaps perhaps you might

245
00:19:45.880 --> 00:19:52.160
want to pass two of those values
instead of one. Yeah, that was

246
00:19:52.160 --> 00:19:56.160
a lot of fun, to be
fair, We don't know the trauma or

247
00:19:56.240 --> 00:20:02.119
that experience before that made him do
that. Yeah, that's that's but you

248
00:20:02.160 --> 00:20:06.359
know, there's there's preparing for trauma, and then there's just common sense being

249
00:20:06.400 --> 00:20:11.119
agile, right, all right,
So we haven't really talked about what API

250
00:20:11.200 --> 00:20:15.279
toolk io is. If you go
the API toolk io, it says AI

251
00:20:15.440 --> 00:20:22.559
powered API observability, quality assurance,
and insights. So give us the elevator

252
00:20:22.559 --> 00:20:26.000
pitch there. Yeah, that's a
lot of words, but the whole idea

253
00:20:26.039 --> 00:20:30.559
is, you know, we already
have a lot we have our monitoring platforms

254
00:20:30.920 --> 00:20:37.160
already, but can't we go step
lower you the most monitoring platforms would catch

255
00:20:37.319 --> 00:20:41.839
several issues, maybe some logs and
any errors you put in your lugs,

256
00:20:41.920 --> 00:20:47.720
maybe, but do we go step
for them, actually analyze the payloads you

257
00:20:47.759 --> 00:20:53.039
know, will requests body and response
body that your customers are making to you,

258
00:20:53.200 --> 00:20:57.680
but also that you are making to
tear party integrations. And it is

259
00:20:59.319 --> 00:21:03.559
and the reason is that and not
every error is going to be an error

260
00:21:03.559 --> 00:21:07.079
in your log or an exception that
you can catch. Some errors could just

261
00:21:07.119 --> 00:21:14.400
be you know, missing data,
something was renamed, or an error that

262
00:21:14.480 --> 00:21:17.920
is coming from a dependence. I
can give a story about this dependency because

263
00:21:17.920 --> 00:21:26.440
there's something that happened. A customer
had to deal with a library. You

264
00:21:26.480 --> 00:21:30.200
know, it is simple date library, you know, and this date library

265
00:21:30.400 --> 00:21:41.839
was created by an American, so
but the diffault but it diffaulted you know,

266
00:21:41.920 --> 00:21:47.359
the US date formats, which is
I think it's month day and then

267
00:21:47.440 --> 00:21:52.720
yeah, and there was this very
long conversation in this on this library jub

268
00:21:52.839 --> 00:21:57.079
that hey, we should use the
international default of the day a month year.

269
00:21:57.200 --> 00:22:00.440
And it went on for I don't
know, maybe with a for years.

270
00:22:00.960 --> 00:22:03.240
Then the author gave in and said, okay, let's make this change.

271
00:22:03.920 --> 00:22:10.240
And there was I think a six
months depplication. Notice it's just a

272
00:22:10.240 --> 00:22:14.319
live you know, everyone no one's
reading the git hop issues of all the

273
00:22:14.400 --> 00:22:21.839
libries they use. So when this
update happened. Eventually, it caused subtle

274
00:22:22.599 --> 00:22:27.799
changes were for some customers the date
field, you know, was now like

275
00:22:30.119 --> 00:22:37.200
the international dates type. But that
is a hard thing to identify it because

276
00:22:37.240 --> 00:22:42.599
some days of the year are basically
the same on both the US date and

277
00:22:42.680 --> 00:22:51.839
the international and like fest of General
eleven eleven ten exactly. I'm really surprised

278
00:22:51.839 --> 00:22:56.759
that out of that meeting didn't come
the solution, which is to separate the

279
00:22:56.839 --> 00:23:02.480
date into three arrays, one with
the day, one with the month,

280
00:23:02.799 --> 00:23:11.000
one with the ear because that's clearly
the solution that might have walked you,

281
00:23:11.960 --> 00:23:18.559
to be honest. But in any
case, it was a breaking change and

282
00:23:18.839 --> 00:23:22.480
it causes company quite some money.
So it was not the kind of change

283
00:23:22.480 --> 00:23:26.640
that you would blame a developer.
You know, maybe some developer was working

284
00:23:26.680 --> 00:23:32.200
on a completely different task, decided
to update some dependencies and now there's an

285
00:23:32.240 --> 00:23:36.119
incident that he has no idea where
it came from. So those are the

286
00:23:36.160 --> 00:23:38.799
kind of issues I was thinking,
can we catch them at the level?

287
00:23:40.920 --> 00:23:44.440
Wow? Yeah, IO eighty six
O one exists for a reason. It's

288
00:23:44.559 --> 00:23:48.960
year, month, day just at
least, you know, however you want

289
00:23:48.000 --> 00:23:52.279
to display it after that, knock
yourself out story. It is year,

290
00:23:52.359 --> 00:23:59.000
month, day, right, what
could happen? Yeah, it's a classic

291
00:23:59.000 --> 00:24:03.720
words. So you feel like you
could catch this from at an API level

292
00:24:03.839 --> 00:24:07.599
to say, hey, this API
is measuring up dates. Now it's doing

293
00:24:07.640 --> 00:24:12.680
something down with dates exactly. So
what what what we're doing is, it's

294
00:24:12.799 --> 00:24:18.319
imagine a middleware on your service that
every time a request comes into your service,

295
00:24:18.359 --> 00:24:22.240
it just takes a copy, so
it doesn't really impact your run time

296
00:24:22.400 --> 00:24:26.359
or whatever. It just copies it
and then you know, sends it somewhere

297
00:24:26.519 --> 00:24:30.640
and that in that somewhere, which
is a kid m we're like just learning.

298
00:24:30.640 --> 00:24:34.160
We build a model of the API, so we learn what all the

299
00:24:34.240 --> 00:24:41.079
fields are, whether all the different
permutations of fields that are possible on this

300
00:24:41.160 --> 00:24:44.160
API. You know what at the
type is this field supposed to be a

301
00:24:44.279 --> 00:24:48.880
uu i D or is this some
random number? And with this model a

302
00:24:48.880 --> 00:24:53.640
lot of things become possible. For
example, if this representation changes, if

303
00:24:53.680 --> 00:24:56.400
some field used to be a uu
i D and all of a sudden it's

304
00:24:56.440 --> 00:25:00.440
just a number or it's a text, right, and someone gets notified and

305
00:25:00.480 --> 00:25:04.000
say, hey, this fields changed. Was it what you intended? If

306
00:25:04.000 --> 00:25:10.039
it was what you intended, then
just acknowledge it, but sometimes it's a

307
00:25:10.039 --> 00:25:12.920
bug and someone can fix it.
But I like the idea of you just

308
00:25:14.079 --> 00:25:18.240
snap this onto the system and let
it run for a month and it should

309
00:25:18.279 --> 00:25:22.240
build up a pretty good catalog of
all the shape of API calls out there.

310
00:25:22.279 --> 00:25:25.799
Like in a month, you're going
to figure out if you misunderstood the

311
00:25:25.839 --> 00:25:30.720
day, feel exactly exactly. And
it's like it's it's open to the developers

312
00:25:30.720 --> 00:25:33.960
because you can just go. You
can go and see all your endpoints.

313
00:25:34.279 --> 00:25:37.079
Pick one of the endpoints and see
all the different ships. You know,

314
00:25:37.599 --> 00:25:41.759
at the end of the day,
most endpoints don't have quite so many ships.

315
00:25:42.240 --> 00:25:47.279
You know, maybe there's a lot
of different status codes and then different

316
00:25:47.319 --> 00:25:49.359
responses. I'm sure eighty percent of
them are fine. You know, they're

317
00:25:49.400 --> 00:25:52.559
all the same, and maybe it's
even ninety five percent of the fine.

318
00:25:52.640 --> 00:26:04.319
It's all the edges that matter.
Sometimes you've got Scandinavians that requirements just to

319
00:26:04.400 --> 00:26:07.880
highlight that, hey, there's an
additional chunk of data in anything. Going

320
00:26:07.920 --> 00:26:12.240
to these end points would have been
enough flag for you at least look to

321
00:26:12.400 --> 00:26:17.000
know, oh that's something weird there. We should go look there. Yeah,

322
00:26:17.599 --> 00:26:22.079
appreciate, So we basically did that, and along the way we realized,

323
00:26:22.119 --> 00:26:26.839
oh, now we're analyzing and building
this model, there's much more we

324
00:26:26.839 --> 00:26:30.559
can do, for example, So
when I started to think, okay,

325
00:26:30.559 --> 00:26:34.839
what what can we do? For
example, we can generate open API specifications

326
00:26:34.880 --> 00:26:40.960
from this model that we have now. And the next step is we can

327
00:26:41.319 --> 00:26:49.480
generate simplistic h kind of API tests. You know, because you understand the

328
00:26:49.640 --> 00:26:53.680
users journey on the back end,
sure you can say okay, use our

329
00:26:53.720 --> 00:26:59.319
logs in. Then it does.
I can just generate some tests that can

330
00:26:59.359 --> 00:27:03.359
now be auto make it and say, okay, make this call, make

331
00:27:03.400 --> 00:27:07.160
this synthetic monitor call every one hour, you know, just behave like a

332
00:27:07.279 --> 00:27:12.960
user and check that everything is as
it should be. That's basically it.

333
00:27:14.000 --> 00:27:17.279
So it's the It's the thing I
wish we had at delivery here. Yeah.

334
00:27:17.559 --> 00:27:18.880
Yeah, absolutely, if it existed, you probably would have got that.

335
00:27:18.920 --> 00:27:23.680
I guess the question is the overhead
Can I can I feel it when

336
00:27:23.680 --> 00:27:27.559
this thing's turned on as a number
of requests per second go down just because

337
00:27:27.599 --> 00:27:32.319
you this is going to cost me
something, it will cost you something,

338
00:27:32.839 --> 00:27:41.079
and that's something depends on the technology
stock. So if you're using a stock

339
00:27:41.200 --> 00:27:45.599
like PhD, the challenge with PhD
is that it's it's single process. Every

340
00:27:45.640 --> 00:27:51.039
request is processed in a single process, right, so we can't just you

341
00:27:51.079 --> 00:27:53.440
know, just do something behind the
scenes, although we try and use a

342
00:27:53.480 --> 00:27:56.880
lot of different techniques. But if
you're using phper used to pain anyway,

343
00:27:57.039 --> 00:28:07.519
right, But but you know the
other technology stacks, you'd almost you would

344
00:28:07.559 --> 00:28:11.640
notice. It's like copying of request
happens in nane a seconds, micro sequence

345
00:28:11.960 --> 00:28:18.519
max. The sending of the data. It's like if you have any luck,

346
00:28:18.559 --> 00:28:21.079
you know, any telemetry, it's
basically the same. You know,

347
00:28:21.119 --> 00:28:25.759
it's just a synchronous maybe you get
you spend a little bit more memory.

348
00:28:26.119 --> 00:28:30.279
I mean, I just like this
from an observability perspective to see, Okay,

349
00:28:30.319 --> 00:28:33.079
well what do you see about what
my APIs are up to? Like

350
00:28:33.160 --> 00:28:37.960
we've talked in the past about Azure
API management, but that's mostly about you

351
00:28:37.960 --> 00:28:41.279
know, something that Carl mentioned earlier
on which was going and yeah, can

352
00:28:41.319 --> 00:28:47.000
you deal with throttling when a runaway
process is calling it fifty times a second?

353
00:28:47.400 --> 00:28:51.359
Certainly the most popular feature. So
the unilease say that one bad actor

354
00:28:51.400 --> 00:28:56.039
can't knock everybody else down. Yeah, no, you guys are doing content

355
00:28:56.079 --> 00:28:59.759
analysis, which I think is a
much trickier problem. Yeah, exactly.

356
00:29:00.039 --> 00:29:03.160
We can't go on an Arctic proxy
unfortunately, so we can't we can't trottle

357
00:29:03.279 --> 00:29:08.839
anyone. That's a different thing.
Use APR management for that. Yeah,

358
00:29:08.880 --> 00:29:12.960
exactly. Hey, guys, holding
that thought for just a minute, while

359
00:29:14.000 --> 00:29:17.440
we take a moment for these very
important messages. We'll be right back,

360
00:29:21.680 --> 00:29:23.799
and we're back. You're listening to
dot net Rocks. I'm Carl Franklin.

361
00:29:23.839 --> 00:29:27.680
That's my friend Richard Campbell. Hey, and that's my new friend Anthony aler

362
00:29:27.759 --> 00:29:37.200
Rebe. And yeah, he's talking
about APIs and observability and the AI part

363
00:29:37.319 --> 00:29:41.079
of this, which is really content
analysis as he was just talking about.

364
00:29:41.759 --> 00:29:47.799
I'm really interested in how you use
your medical training to write better software.

365
00:29:52.559 --> 00:29:57.640
That's that's an interesting question. Something
that I that I have been thinking about

366
00:29:59.279 --> 00:30:03.839
that I think could learn from the
medical world is s OPS or against We

367
00:30:04.039 --> 00:30:08.359
like to call it everyone's books in
our industry, but in medicine, there

368
00:30:08.440 --> 00:30:15.599
is an ESPN s P Standard Operating
prosidure, So there's a standard operating procedure

369
00:30:15.680 --> 00:30:18.880
for pretty much everything. You know, if you if your doctor is gonna

370
00:30:19.119 --> 00:30:22.559
open your hearts, he's not gonna
be like, oh, I'm feeling crative

371
00:30:22.640 --> 00:30:33.079
today. Let's just go for it
idea. Yeah right, I remember just

372
00:30:33.119 --> 00:30:37.200
opening from the down from from down
this time, but no, let's go

373
00:30:37.319 --> 00:30:44.920
through the button transplant. Yeah.
So, but it doesn't mean there is

374
00:30:44.960 --> 00:30:48.920
no creativity happening in the medical you
know, there still is. But there

375
00:30:48.960 --> 00:30:56.240
is creativity happens with constraints. You
know, when all the the common problems

376
00:30:56.279 --> 00:31:00.240
are solved, then you can like
you know, you can get like small

377
00:31:00.279 --> 00:31:06.079
things at the time. And actually, like in software, we're always inventing

378
00:31:06.160 --> 00:31:11.039
the same pop the same things over
and over and over. There's a lot

379
00:31:11.039 --> 00:31:15.200
of blog posts. If I want
to create an up today, it might

380
00:31:15.240 --> 00:31:19.559
be different from how I created an
up last morning. Well, and I

381
00:31:19.559 --> 00:31:23.559
do think we have that problem in
software where no two projects are ever the

382
00:31:23.599 --> 00:31:27.480
same. One could be excused by, hey, the stacks are advancing,

383
00:31:27.519 --> 00:31:30.839
but the other is that we are
prone to wanting to play with the new

384
00:31:30.880 --> 00:31:34.160
toys. So you know, the
opportunity to go, oh, I want

385
00:31:34.160 --> 00:31:37.400
to play with this stack now,
which not many. You know, that's

386
00:31:37.480 --> 00:31:41.880
kind of service to us rather than
service to the customer. The rather to

387
00:31:41.960 --> 00:31:45.000
go with the stack. I already
knew as well. Instrumented. You know,

388
00:31:45.079 --> 00:31:48.880
has the pipeline set up for just
resists. It's okay to work within

389
00:31:48.880 --> 00:31:52.200
the same stack. There's innovations that
can happen inside there. Well said,

390
00:31:53.160 --> 00:31:57.440
I think that is basically it that
you know we have as engineers. We

391
00:31:57.480 --> 00:32:02.759
want to expect events, want to
try new things. But if we can

392
00:32:04.119 --> 00:32:07.799
just agree on some standard I don't
know, base layers, you could move

393
00:32:07.880 --> 00:32:14.640
that innovation step further. So maybe
instead of everyone creating one more and plus

394
00:32:14.680 --> 00:32:19.240
one framework that is I don't know, almost the same as the other,

395
00:32:19.559 --> 00:32:22.960
we can start I don't know,
innovating at I don't know, you know,

396
00:32:23.119 --> 00:32:27.799
some of the things that are actually
different, like our business logics or

397
00:32:27.839 --> 00:32:31.319
the problems you really want to solve
our performance. Maybe apps can finally be

398
00:32:31.400 --> 00:32:36.880
faster and we can only innovate on
how to make things faster, et cetera.

399
00:32:37.759 --> 00:32:42.359
But it's something that I'm thinking about. Have you seen more maybe a

400
00:32:42.480 --> 00:32:47.640
question for you, like in your
experience, how much have you seen one

401
00:32:47.680 --> 00:32:54.039
books being used in internal organizations?
I mean more? Uh? And you

402
00:32:54.079 --> 00:32:59.680
know, and when I hear run
books, I think chef right? Is

403
00:32:59.720 --> 00:33:04.400
there really the ones who popularized that
net names? As I said, A

404
00:33:04.519 --> 00:33:08.319
cid CD pipelines. There's a bunch
of different approaches, but it's automation.

405
00:33:08.759 --> 00:33:15.880
It's about don't open a word document, right, don't it's code. H

406
00:33:16.079 --> 00:33:20.279
You know, today we look at
GitHub actions or as your DevOps, like

407
00:33:20.400 --> 00:33:24.160
in the in the dot net world, where often just checking the code in

408
00:33:24.319 --> 00:33:30.519
accepting the PR kicks off the process
that begins all those integrations, decks,

409
00:33:30.519 --> 00:33:35.640
the rum book is activated, and
I definitely see more and more developers.

410
00:33:35.720 --> 00:33:37.680
Was like, I don't want to
think about this. I want to get

411
00:33:37.720 --> 00:33:40.160
as far as it worked on my
machine, it passed my unit tests,

412
00:33:40.640 --> 00:33:45.480
I push it up as a PR, we go through the review process and

413
00:33:45.559 --> 00:33:49.880
the rest isn't my responsibility. The
whole team took care of that. And

414
00:33:49.960 --> 00:33:53.759
I think there's a natural cycle that
devs go through or dev teams where something

415
00:33:53.759 --> 00:33:58.960
new comes out and it promises to
you know, be a little more complex

416
00:33:59.039 --> 00:34:01.200
upfront, but then save you time
down the road, right, And this

417
00:34:01.279 --> 00:34:06.960
happens over and over again, and
most devs resist that because they don't want

418
00:34:06.960 --> 00:34:10.599
to go through the initial pain of
learning something new and changing moving your cheese

419
00:34:10.639 --> 00:34:15.400
and you know, changing their routine. But then you know, then they

420
00:34:15.480 --> 00:34:20.440
see somebody else, just like going
at one thousand miles an hour and things

421
00:34:20.519 --> 00:34:23.320
are just happening, you know,
Like the first time we interviewed Mark Rendel

422
00:34:23.719 --> 00:34:28.719
Richard and he told us all about
like all these crazy processes that he had

423
00:34:28.760 --> 00:34:30.679
in automation that he was doing,
and it was all manual and stuff.

424
00:34:31.039 --> 00:34:34.519
And the first my first thought was, oh my god, I'm never going

425
00:34:34.599 --> 00:34:37.159
to do that. But then I
thought about, wow, the you know,

426
00:34:37.320 --> 00:34:45.000
from thought to implementation to publishing can
just be instantaneous, and how powerful

427
00:34:45.039 --> 00:34:46.840
is that? Right? And then
you know, after a while, these

428
00:34:46.880 --> 00:34:51.960
devs adopt these things, but it
takes a while. I have customers that

429
00:34:52.159 --> 00:34:58.880
are still you know, living without
source control. Oh man, can you

430
00:34:58.920 --> 00:35:05.239
believe that? And I have to
educate them and how to use GitHub before

431
00:35:05.800 --> 00:35:09.239
before we can even start working.
I found that interesting. Just like you

432
00:35:09.320 --> 00:35:15.880
said, I've seen that run books
are most popular in c I CIT you

433
00:35:15.920 --> 00:35:19.760
know, or in deployments. You
know, let's have a run book for

434
00:35:19.800 --> 00:35:24.880
how to roll out the new service. And because we have those run books,

435
00:35:25.400 --> 00:35:30.480
a lot of evolution happened, like
like anty Ball and optio, you

436
00:35:30.519 --> 00:35:36.480
know, having Docker for example.
Just the benefit we have in our industries

437
00:35:36.519 --> 00:35:38.440
that if a lot of if things
are done over and over, it might

438
00:35:38.480 --> 00:35:43.920
be possible to just you know,
box it up into Docker or into some

439
00:35:44.000 --> 00:35:50.840
library or something. But I I
feel like it can be run books,

440
00:35:51.039 --> 00:35:54.920
or the idea of run books could
be applied even further to more things,

441
00:35:55.440 --> 00:36:00.480
you know, And I mean,
I'm not going to pretend can do the

442
00:36:00.559 --> 00:36:07.440
how. But assuming we had more
maybe an industry wide agreed upon run books

443
00:36:07.960 --> 00:36:13.079
for a lot of things like maybe
how do I beld X y Z or

444
00:36:13.079 --> 00:36:19.480
how do I you can onboard even
the more junior developers and you can trust

445
00:36:19.519 --> 00:36:23.519
them to do quite a lot of
task without being afraid because they're really just

446
00:36:23.559 --> 00:36:31.119
following a run book and then allowed
the creativity just happen. Maybe in creating

447
00:36:31.159 --> 00:36:35.559
new run books for example, are
we dancing around? The main thing here

448
00:36:35.639 --> 00:36:40.679
is which is part of that pipeline
is testing, right in automated testing,

449
00:36:40.840 --> 00:36:45.320
so that the junior can't write a
piece of code that's going to cause a

450
00:36:45.320 --> 00:36:50.159
problem because the test is going to
kick it back. You're not you know,

451
00:36:50.320 --> 00:36:52.960
I think too many people think about
the pipeline as just deploy this.

452
00:36:52.000 --> 00:36:58.519
For me, don't think right,
it's really just the continuous deployment part and

453
00:36:58.559 --> 00:37:01.199
the only part of a continuous integration
that's in there is compile it, which

454
00:37:01.519 --> 00:37:08.559
really real integration is is this code
suitable to be integrated? I very much

455
00:37:08.639 --> 00:37:13.199
agree with that. Yeah, well, I think the tool your building here

456
00:37:13.360 --> 00:37:16.480
is about I have collected data for
how this API has behaved in the past,

457
00:37:16.480 --> 00:37:20.280
so I can generate the set of
tests for you that become part of

458
00:37:20.280 --> 00:37:24.199
the pipeline. So if your new
code doesn't comply with what we know is

459
00:37:24.239 --> 00:37:30.320
the current way that the API behaves, it's not getting integrated. Yeah,

460
00:37:30.360 --> 00:37:34.760
exactly, it is exactly that you
know that we can catch. And if

461
00:37:34.760 --> 00:37:38.360
you consider how as developers we always
know the ideal, we know what we

462
00:37:38.400 --> 00:37:43.199
should be doing. We know we
should all be writing tests. But every

463
00:37:43.199 --> 00:37:45.400
time I speak with a developer,
I ask them, you know, like,

464
00:37:45.920 --> 00:37:50.679
how confident are you in all the
tests you've written? Do you feel

465
00:37:50.719 --> 00:37:55.320
like the software you maintained right now
is perfectly tested? It always feels like

466
00:37:57.719 --> 00:38:05.400
anybody who says yes is lying,
right, like the the that's the old

467
00:38:05.480 --> 00:38:09.119
are you a good man? Anybody
says you question, it's like the correct

468
00:38:09.119 --> 00:38:14.119
answer is I'm not sure, Like
arguably it's not up to you, right,

469
00:38:14.480 --> 00:38:20.199
are you perfectly tested almost certainly.
Not am I sufficiently tested? Perhaps,

470
00:38:20.800 --> 00:38:24.800
Like there's no absolutes here, just
just for the just for as much

471
00:38:25.639 --> 00:38:30.039
for as I have. You know, at least I'm tested enough for the

472
00:38:30.119 --> 00:38:35.239
last incidents that we experienced. Yeah, I'm not likely to fail on the

473
00:38:35.239 --> 00:38:38.599
thing that knocked the system down last
week. I'm not even saying certain about

474
00:38:38.639 --> 00:38:44.840
that. I'm not likely to fail
on that. I was a betting man,

475
00:38:45.119 --> 00:38:47.559
Yeah, I kind of. I
took it on the head for that

476
00:38:47.559 --> 00:38:51.679
one already. And I think I've
written the test that that that would catch

477
00:38:51.760 --> 00:38:53.239
that before it gets deployed. Now, well, let's go to the next

478
00:38:53.239 --> 00:38:57.840
one. Let's see what happens again. I think the most important thing here

479
00:38:58.000 --> 00:39:02.960
is this idea that stated period of
monitor of observability with this tool builds a

480
00:39:04.000 --> 00:39:07.960
test suite for you, because who
likes writing tests? And then and here's

481
00:39:07.960 --> 00:39:12.639
a joke, like I write those
tests, then we rev the API,

482
00:39:12.880 --> 00:39:15.039
so the tests are wrong and we
got to go again. Right, So

483
00:39:15.079 --> 00:39:20.639
the idea that you could regenerate them
after that is pretty compelling to me.

484
00:39:20.840 --> 00:39:22.960
Like that's a bunch of work nobody
really wants to do in the first place.

485
00:39:23.159 --> 00:39:29.320
Yeah, Actually, this idea.
Half of it came from something we

486
00:39:29.360 --> 00:39:32.920
did at Delivery Hero, which is
we used to have this lot test that

487
00:39:34.000 --> 00:39:37.440
we would like write, you know
with like case six, you know,

488
00:39:37.519 --> 00:39:43.880
write some general tests to show I
don't know, a million requests a minute

489
00:39:43.880 --> 00:39:51.239
at the seven right, But they
were always wrong because we had very good

490
00:39:51.559 --> 00:39:55.199
cushion, so pretty much all the
steps would just get cushion and the great

491
00:39:55.639 --> 00:40:05.320
I don't just want. We got
better results when we actually recorded, like

492
00:40:05.840 --> 00:40:13.000
there are lots of what reques production
work exactly, and then just replayed that

493
00:40:13.159 --> 00:40:17.440
well, And that's because humans are
weirder than testers. I mean, testers

494
00:40:17.480 --> 00:40:22.519
are pretty weird, but humans are
weirder still, Like, yeah, they

495
00:40:22.559 --> 00:40:27.039
do stuff you couldn't even imagine to
think of. Just think of little Bobby

496
00:40:27.079 --> 00:40:32.199
tables. Here you go. No, my favorite one was working on a

497
00:40:32.199 --> 00:40:37.639
site that was barely hanging on,
like it was overwhelmed by the load and

498
00:40:37.679 --> 00:40:40.239
the reaction. And part of this
problem was that the customers when the first

499
00:40:40.320 --> 00:40:44.440
page wind load, opened another window
and tried again, and opened the window,

500
00:40:44.519 --> 00:40:47.360
tried again, and so it's like
one ip looks like it's own DDoS

501
00:40:47.400 --> 00:40:52.360
attack and you get multiplied by ten
thousand of those people and you you know,

502
00:40:52.440 --> 00:40:55.760
you designed your tests where each ip
made one request, one page was

503
00:40:55.840 --> 00:41:04.480
and that is just not what was
happening exactly us Just yeah, no,

504
00:41:05.440 --> 00:41:09.559
this this recording the workload and then
being able to play, you know,

505
00:41:09.679 --> 00:41:20.039
a Saturday afternoon football tournament workload a
bad one. And you would hope that

506
00:41:20.079 --> 00:41:23.480
whatever workload you run includes Scandinavian countries. I think that's gonna be important.

507
00:41:24.159 --> 00:41:30.800
Hopefully maybe that week all of Scandinavia. I was like, they were on

508
00:41:30.920 --> 00:41:35.519
vacation. You missed it. Yeah, they need to get their lutafisk on

509
00:41:35.679 --> 00:41:40.000
time. Can we talk about pricing
here? I'm looking at pricing and there's

510
00:41:40.039 --> 00:41:45.159
a free uh tier, a plus
tier for twenty dollars a month, I

511
00:41:45.199 --> 00:41:51.239
think yeah, and an enterprise for
police call and so for free you get

512
00:41:51.400 --> 00:41:55.719
what twenty thousand requests per month,
build monthly, one team member on the

513
00:41:55.800 --> 00:42:00.119
last fourteen days of data retained.
So you can get aready checking this out

514
00:42:00.159 --> 00:42:07.440
without without you know, any pain. Why wouldn't you? So how do

515
00:42:07.519 --> 00:42:10.239
you hook this in? Like?
Is this code I compile into my app

516
00:42:10.280 --> 00:42:14.559
and deploy it or is this a
service? What does this look like?

517
00:42:15.519 --> 00:42:20.320
Exactly? It isn't middleware that you
you know, you just added line in

518
00:42:20.360 --> 00:42:23.480
your code when we started out.
You know, there's been a lot of

519
00:42:23.519 --> 00:42:29.360
movement in this e BPF space,
and that was originally what I was thinking

520
00:42:29.360 --> 00:42:32.440
about, but then I realized that, you know, if you want to

521
00:42:32.480 --> 00:42:37.119
really help develop us, we want
to give them as much context as possible.

522
00:42:37.239 --> 00:42:40.079
Sure, and that context includes things
like, you know, when when

523
00:42:40.079 --> 00:42:45.480
this customer made this request and it
failed, these were the exceptions that happened

524
00:42:45.920 --> 00:42:51.480
right in the code at that time. And when we do things with the

525
00:42:51.480 --> 00:42:53.159
e b p F for out,
we don't have that context. And what's

526
00:42:53.280 --> 00:42:58.599
in the code, you know,
we have just the HDTP Yeah, you

527
00:42:58.639 --> 00:43:02.000
want to be in that process,
so you see all those exceptions occur exactly.

528
00:43:02.519 --> 00:43:06.679
So, so it's a middlewhere you
log, you put it in the

529
00:43:06.719 --> 00:43:10.360
code, and it copies the request. If there are exceptions of the errors,

530
00:43:10.440 --> 00:43:16.800
it attaches the errors that happen to
the to that particular users. I

531
00:43:16.840 --> 00:43:20.199
don't know log you know, so
you can see, okay, this user

532
00:43:20.360 --> 00:43:24.239
with this IP address made this request
and got this response, but there was

533
00:43:24.280 --> 00:43:30.639
an error with this tackt traits and
whatever that happened in the meantime and you

534
00:43:30.719 --> 00:43:34.800
picked. So that line of code
is then an invocation to a service you're

535
00:43:34.840 --> 00:43:39.519
hosting on their behalf or could they
run it themselves internally, So that line

536
00:43:39.559 --> 00:43:43.880
of code is India code. It's
in your application, you know, and

537
00:43:43.920 --> 00:43:50.639
you can so what is it calling
to? Like, it's it's there's an

538
00:43:50.639 --> 00:43:55.960
open source SDK for most languages,
which what the KID does is basically copy,

539
00:43:57.119 --> 00:44:00.519
you know, get all of this
information for some cost them as they

540
00:44:00.559 --> 00:44:04.840
have sensitive data which they don't want
to even live there save us in the

541
00:44:04.880 --> 00:44:09.079
first place. So it's able to
redact that sensitive data and then just put

542
00:44:10.159 --> 00:44:15.800
put the data on, just send
it to API to KID. For some

543
00:44:15.960 --> 00:44:21.320
enterprise customers, they also just run
it on prem in that case, so

544
00:44:21.360 --> 00:44:23.400
there is an on prem option if
you want to pay for it. Exactly

545
00:44:23.480 --> 00:44:27.239
in that case, it is just
a ducker image you're configuring and it just

546
00:44:27.280 --> 00:44:31.679
sends it there. That's great,
And exactly what I was thinking is like

547
00:44:32.079 --> 00:44:36.039
it's in many cases. In some
cases like I want to say, they'll

548
00:44:36.079 --> 00:44:43.119
leave my data center or my assurance
then so it's contained and it had to

549
00:44:43.159 --> 00:44:47.880
happen. It had to happen because
I built this, because I worked in

550
00:44:47.880 --> 00:44:52.360
a bank in the digital bank and
you know half of the problem came from

551
00:44:52.360 --> 00:44:58.800
there. But digital but are not
gonna trust well, they're under regulatory requirements,

552
00:44:58.840 --> 00:45:06.719
like they'll lose their license exactly.
So what's next for you? What

553
00:45:06.760 --> 00:45:10.440
are you working on? What I'm
working on is basically this is just making

554
00:45:10.639 --> 00:45:16.400
especially the things around testing. I'm
trying to see what context we can get.

555
00:45:16.519 --> 00:45:21.280
And you know, it's like you
have all of this data. Every

556
00:45:21.280 --> 00:45:22.960
time you look at you you're like, oh, I could do this.

557
00:45:24.320 --> 00:45:29.280
So it's just you know, how
can we make the life of developments better

558
00:45:29.360 --> 00:45:32.599
with the data we already get in
anyway? Yeah, wow, if you

559
00:45:32.639 --> 00:45:36.519
can help me write tests for my
API so I don't break it in the

560
00:45:36.559 --> 00:45:39.159
next rev you're my friend. Yeah, this is good stuff. Yeah.

561
00:45:39.679 --> 00:45:43.880
And to start with a free tier
just to see does this make sense for

562
00:45:43.960 --> 00:45:46.679
me? And it's like, yeah, your first HiT's free, you'll get

563
00:45:46.719 --> 00:45:52.679
addicted. Yeah. And I think
probably the takeaway message from this interview is

564
00:45:52.719 --> 00:45:58.639
that this is not an API management
replacement. This is content. You're you're

565
00:45:58.719 --> 00:46:02.400
you're testing content and you're looking for
that and using AI for that. So

566
00:46:04.119 --> 00:46:07.599
thanks Anthony, it's been great.
This is a great product. Thanks.

567
00:46:07.679 --> 00:46:12.760
Thanks go. Thank you're welcome,
thanks for us beinging this hour with us,

568
00:46:12.800 --> 00:46:36.840
and we'll see you next time on
dot net Rocks. Than dot net

569
00:46:36.960 --> 00:46:40.519
Rocks is brought to you by Franklin's
Net and produced by Pop Studios, a

570
00:46:40.679 --> 00:46:45.760
full service audio, video and post
production facility located physically in New London,

571
00:46:45.760 --> 00:46:52.840
Connecticut, and of course in the
cloud online at pwop dot com. Visit

572
00:46:52.880 --> 00:46:55.119
our website at d O T N
E t R O c k S dot

573
00:46:55.159 --> 00:47:00.519
com for RSS feeds, downloads,
mobile apps, comments, and access to

574
00:47:00.559 --> 00:47:06.239
the full archives going back to show
number one, recorded in September two thousand

575
00:47:06.280 --> 00:47:08.719
and two. And make sure you
check out our sponsors. They keep us

576
00:47:08.719 --> 00:47:14.159
in business. Now go write some
code, see you next time. You

577
00:47:14.280 --> 00:47:22.840
got jud Middle vans Man

