1
00:00:00,000 --> 00:00:03,780
Well, here we are at the last SpringOne platform tour.

2
00:00:03,920 --> 00:00:04,960
SpringOne tour platform.

3
00:00:05,220 --> 00:00:05,560
That's right.

4
00:00:05,680 --> 00:00:06,020
SpringOne tour.

5
00:00:06,340 --> 00:00:06,940
Spring tour.

6
00:00:07,120 --> 00:00:07,640
Spring tour.

7
00:00:07,860 --> 00:00:08,520
Let's just call it that.

8
00:00:08,880 --> 00:00:10,180
That sounds almost French.

9
00:00:10,240 --> 00:00:12,280
Up here in Toronto, the last one of the year.

10
00:00:12,520 --> 00:00:15,740
I think we're going to be back in Toronto in December.

11
00:00:16,340 --> 00:00:18,000
We need to start coming here in, like, June.

12
00:00:19,200 --> 00:00:21,440
Nothing against, you know, December in Toronto.

13
00:00:21,540 --> 00:00:24,040
I'm a Minnesotan, so this is normal for me.

14
00:00:24,220 --> 00:00:26,860
I'm actually north of, I live north of where we are right now.

15
00:00:26,980 --> 00:00:27,260
Yeah.

16
00:00:27,380 --> 00:00:28,580
Which I always find rather ironic.

17
00:00:28,580 --> 00:00:29,520
Thank you, Curve of the Earth.

18
00:00:29,740 --> 00:00:30,860
Yeah, it's fun coming here.

19
00:00:30,940 --> 00:00:33,200
You realize that the cold could kill you.

20
00:00:33,460 --> 00:00:33,880
It can.

21
00:00:34,440 --> 00:00:34,760
Yes.

22
00:00:34,760 --> 00:00:35,460
If you weren't protecting yourself.

23
00:00:35,460 --> 00:00:36,280
If you're not careful.

24
00:00:36,800 --> 00:00:41,680
Well, at least, now, as a former Texan, because now, you know, you're not a Texan really anymore.

25
00:00:41,840 --> 00:00:43,400
Are you once a Texan, always a Texan?

26
00:00:43,620 --> 00:00:44,220
I guess so.

27
00:00:44,340 --> 00:00:44,820
I'm not sure.

28
00:00:45,240 --> 00:00:50,820
But in Minnesota, and places where we get that kind of snow and cold, you have to, or you're

29
00:00:50,820 --> 00:00:55,160
supposed to, when you go on a road trip, you have to put warm stuff in your car.

30
00:00:55,480 --> 00:00:56,680
Oh, in case you get a wrecked.

31
00:00:56,680 --> 00:00:59,480
Because you might get stranded, you have a wrecked, you might be there.

32
00:00:59,480 --> 00:00:59,840
Yeah.

33
00:00:59,840 --> 00:01:00,500
For a little while.

34
00:01:00,600 --> 00:01:04,640
So you put a couple sleeping bags, you know, some boots, some hats, mittens, you know,

35
00:01:04,680 --> 00:01:07,040
maybe even some kind of non-perishable food item.

36
00:01:07,280 --> 00:01:07,580
Yeah.

37
00:01:07,720 --> 00:01:08,960
And, of course, power bars.

38
00:01:09,200 --> 00:01:11,000
A little, you got to have a little something, a little something, something.

39
00:01:11,960 --> 00:01:16,980
Some people even put cat litter in their car, and that serves dual purpose.

40
00:01:16,980 --> 00:01:18,040
It gives you a little extra weight.

41
00:01:18,760 --> 00:01:22,360
And then, if you do get in a slippery situation, you can pour the cat litter down, and then you

42
00:01:22,360 --> 00:01:22,820
get traction.

43
00:01:23,080 --> 00:01:26,760
Oh, my first thought, which I realized was incorrect, is like, if you have your cats with you, they

44
00:01:26,760 --> 00:01:26,840
stay in your car.

45
00:01:26,840 --> 00:01:28,760
Right, if you bring your cat, well, the cats will help keep you warm.

46
00:01:29,000 --> 00:01:30,200
See, you've heard of three-dog night.

47
00:01:30,460 --> 00:01:30,760
Uh-huh.

48
00:01:30,920 --> 00:01:32,540
There's like the five-cat road trip.

49
00:01:32,780 --> 00:01:33,760
Five-cat road trip.

50
00:01:33,860 --> 00:01:34,060
Right.

51
00:01:34,120 --> 00:01:34,700
Just in case.

52
00:01:34,760 --> 00:01:34,880
Just in case.

53
00:01:34,880 --> 00:01:36,080
One for each two, I guess.

54
00:01:36,080 --> 00:01:36,320
Exactly.

55
00:01:36,420 --> 00:01:36,980
Got to keep warm.

56
00:01:37,040 --> 00:01:37,600
And then you have a spare.

57
00:01:37,700 --> 00:01:38,560
Got to rotate them in and out.

58
00:01:38,760 --> 00:01:39,040
Yeah.

59
00:01:39,400 --> 00:01:40,440
Yeah, it's cold here.

60
00:01:40,560 --> 00:01:40,800
It's a little chilly.

61
00:01:40,800 --> 00:01:42,440
And it was snowing when I came in here.

62
00:01:42,600 --> 00:01:43,180
I'm so sorry.

63
00:01:43,280 --> 00:01:44,520
And I hadn't seen snow in a long time.

64
00:01:44,620 --> 00:01:47,360
I was thinking, I went skiing in New Mexico last year.

65
00:01:47,440 --> 00:01:47,640
Wow.

66
00:01:47,760 --> 00:01:48,840
But I think that was fake snow.

67
00:01:49,100 --> 00:01:49,560
Oh, could be.

68
00:01:49,560 --> 00:01:51,720
I mean, not fake snow, but, you know, generated snow.

69
00:01:51,720 --> 00:01:51,920
Generated, right.

70
00:01:51,920 --> 00:01:53,160
User-generated snow.

71
00:01:53,940 --> 00:01:54,820
Snow as a service?

72
00:01:55,020 --> 00:01:55,560
That's right.

73
00:01:55,920 --> 00:01:56,380
That's right.

74
00:01:56,700 --> 00:02:03,140
Well, so you just gave a talk, your talk, going over, like, how you architecturally think

75
00:02:03,140 --> 00:02:08,000
through, like, choosing the various layers of the stack and the popular stuff nowadays

76
00:02:08,000 --> 00:02:13,100
of, you know, your Kubernetes and your serverless and your functions and even Knative.

77
00:02:13,360 --> 00:02:13,760
Absolutely.

78
00:02:13,840 --> 00:02:15,300
Which I'm excited to talk about.

79
00:02:15,360 --> 00:02:17,240
We'll see what your scoop on it is.

80
00:02:17,320 --> 00:02:20,100
And I was thinking, now we both travel a lot.

81
00:02:20,220 --> 00:02:20,460
We do.

82
00:02:20,460 --> 00:02:25,420
And I think, at least for me, it's always instructed to have, like, an example application

83
00:02:25,420 --> 00:02:28,560
that isn't just like a fortune-telling app, right?

84
00:02:28,580 --> 00:02:29,160
A travel app.

85
00:02:29,240 --> 00:02:33,940
Because that requires, it requires a little more imagination to figure out how this is

86
00:02:33,940 --> 00:02:34,440
related.

87
00:02:34,560 --> 00:02:39,080
But I thought of something that I think, was it this past year, probably both of us experienced.

88
00:02:39,300 --> 00:02:42,560
And that is, let's just say, theoretically, two giant hotel chains.

89
00:02:43,240 --> 00:02:44,880
They merge together.

90
00:02:45,140 --> 00:02:49,120
And they have different ways of tracking what your member number is, right?

91
00:02:49,120 --> 00:02:55,980
And so, somewhere in this process where you are in what seemed like, eventually became,

92
00:02:56,140 --> 00:02:58,300
but in this theoretic world.

93
00:02:58,420 --> 00:02:58,740
Hypothetical.

94
00:02:59,140 --> 00:03:03,560
That you would basically sign in, and you would sign into both accounts, and it would magically

95
00:03:03,560 --> 00:03:04,320
merge them together.

96
00:03:04,400 --> 00:03:05,420
All sorts of things were happening.

97
00:03:05,500 --> 00:03:08,560
But I was thinking of one little, maybe, serverless function thing.

98
00:03:09,080 --> 00:03:13,820
Is at some point in this theoretic architecture, there was this point where you had the old number

99
00:03:13,820 --> 00:03:18,620
and the new number, and it called out to something else that said, these are now the same number.

100
00:03:18,800 --> 00:03:24,280
Now, there's a footnote that, for whatever reason, in this theoretic example, some month

101
00:03:24,280 --> 00:03:27,660
later, they came up with the fix that you would get a brand new number.

102
00:03:27,780 --> 00:03:28,240
Of course.

103
00:03:28,500 --> 00:03:31,700
Even though, previously, you could choose to keep one of your numbers, which I thought

104
00:03:31,700 --> 00:03:32,640
was kind of a quaint thing.

105
00:03:32,780 --> 00:03:34,000
Like, are you that attached to a number?

106
00:03:34,000 --> 00:03:39,680
Who wouldn't be attached to a random, multi-digit number they were assigned by a large corporation?

107
00:03:39,680 --> 00:03:41,520
I guess if you had it memorized, it could be handy.

108
00:03:41,680 --> 00:03:42,640
And I know people who did.

109
00:03:42,740 --> 00:03:43,920
It's kind of weird.

110
00:03:44,440 --> 00:03:47,920
Anyway, so, let's pick this one thing that we've got.

111
00:03:48,040 --> 00:03:53,700
We're merging these two hotels together, and in their loyalty program, you, you know,

112
00:03:54,060 --> 00:03:59,480
Joe and Jane Hotel Stayer are going to now have one number.

113
00:03:59,780 --> 00:03:59,960
Yep.

114
00:03:59,960 --> 00:04:03,480
And you call out to a function that says, these two numbers used to exist, and now it's

115
00:04:03,480 --> 00:04:04,020
this one number.

116
00:04:04,100 --> 00:04:07,420
Now, let's not get too wrapped up in what the logic of that is.

117
00:04:07,420 --> 00:04:07,640
Sure.

118
00:04:07,740 --> 00:04:11,680
But the after calling this thing, which is assume is simple, you now have one number, right?

119
00:04:11,680 --> 00:04:12,240
Yeah, yeah.

120
00:04:12,320 --> 00:04:14,660
And so, okay, so, then here we are.

121
00:04:15,120 --> 00:04:16,260
It's snowing on the ground.

122
00:04:16,560 --> 00:04:17,740
Now, you don't have to do this first part.

123
00:04:17,920 --> 00:04:20,400
We build a building, a data center.

124
00:04:20,780 --> 00:04:23,220
And then, also, we don't need to discuss this part.

125
00:04:23,340 --> 00:04:27,400
You call up our good friends at Dell, and they bring in a bunch of racks and hardware.

126
00:04:28,140 --> 00:04:30,340
And then, and then, and then it's just sitting there.

127
00:04:30,400 --> 00:04:31,400
Someone's plugged it in.

128
00:04:32,200 --> 00:04:33,120
Now, what happens?

129
00:04:33,340 --> 00:04:33,580
Right.

130
00:04:34,040 --> 00:04:38,360
Well, so, one of the things that I was thinking of as we were walking through this completely

131
00:04:38,360 --> 00:04:43,860
hypothetical example, one of the things one might need to do in that is to figure out,

132
00:04:43,940 --> 00:04:45,160
is our data really the same?

133
00:04:45,560 --> 00:04:46,940
Are we really talking about the same person?

134
00:04:47,300 --> 00:04:47,560
Right.

135
00:04:47,580 --> 00:04:50,540
Because you could have multiple people living at the same address that are not, in fact,

136
00:04:50,600 --> 00:04:52,800
the same instance of using the same number, even.

137
00:04:53,160 --> 00:05:00,120
Sometimes, one of the things that I hypothetically learned during this experience was that in

138
00:05:00,120 --> 00:05:02,740
one system, my first name was Nate.

139
00:05:03,180 --> 00:05:05,700
And in another system, my first name was Nathaniel.

140
00:05:05,980 --> 00:05:06,720
Oh, right, right, right.

141
00:05:06,740 --> 00:05:08,900
And so, I went in and linked my accounts.

142
00:05:09,680 --> 00:05:11,240
I said, these two accounts are linked.

143
00:05:11,360 --> 00:05:11,520
Yeah.

144
00:05:11,960 --> 00:05:16,000
And then, at some point, and who knows how they did this, I'm sure some batch run went

145
00:05:16,000 --> 00:05:20,280
through and actually did a comparison between these and said, whoa, mismatch, kick this

146
00:05:20,280 --> 00:05:20,540
out.

147
00:05:20,900 --> 00:05:25,300
And my guess is, you know, if we're thinking about this architecturally, a function could

148
00:05:25,300 --> 00:05:30,740
then have been called to say, here's a list of name mismatches, please go retrieve from

149
00:05:30,740 --> 00:05:37,260
their account information, their preference for contact, and contact them in their preferred

150
00:05:37,260 --> 00:05:38,180
way to tell them that.

151
00:05:38,180 --> 00:05:39,480
See, that's an even simpler one.

152
00:05:39,540 --> 00:05:41,600
Your accounts do not, in fact, match.

153
00:05:42,360 --> 00:05:43,600
And now we have unlinked your accounts.

154
00:05:43,720 --> 00:05:43,880
Yeah.

155
00:05:43,880 --> 00:05:48,000
Do they want a phone call, an email, a singing courier?

156
00:05:48,220 --> 00:05:48,500
Yes.

157
00:05:48,640 --> 00:05:52,260
And so, you probably have a function that says, well, go tell me what their contact preference

158
00:05:52,260 --> 00:05:52,600
is.

159
00:05:52,700 --> 00:05:53,140
Right, right.

160
00:05:53,160 --> 00:05:57,480
And then, that tells another function, okay, Mr. Coté, his preference is this.

161
00:05:57,560 --> 00:06:02,360
Now, please go send Coté an email or a text message or a phone call to say, there's something

162
00:06:02,360 --> 00:06:03,460
we can't discern here.

163
00:06:03,560 --> 00:06:04,060
They don't match.

164
00:06:04,200 --> 00:06:04,700
Yeah, yeah, yeah.

165
00:06:05,000 --> 00:06:09,120
Now, where it gets kind of frustrating from a consumer experience standpoint is then you

166
00:06:09,120 --> 00:06:12,680
get that email or text message or phone call, and you're like, great, what doesn't

167
00:06:12,680 --> 00:06:12,960
match?

168
00:06:13,240 --> 00:06:14,020
Oh, we don't know.

169
00:06:14,400 --> 00:06:14,640
Yeah.

170
00:06:14,800 --> 00:06:17,800
We can't actually tell you that because I can't actually look at both systems because

171
00:06:17,800 --> 00:06:19,980
I work for this side of the house, not that side of the house.

172
00:06:20,060 --> 00:06:23,380
In this theoretic example, it sounds like you and I had to deal with a lot of crap.

173
00:06:23,760 --> 00:06:28,200
Theoretically, I may have had that exact scenario happen to me, and I got not one but two pings,

174
00:06:28,320 --> 00:06:30,080
one from each side saying it didn't match.

175
00:06:30,200 --> 00:06:32,920
But, of course, neither of them could tell me what didn't actually match.

176
00:06:33,460 --> 00:06:34,600
That was interesting.

177
00:06:34,600 --> 00:06:41,900
But I've long since learned that the worst, if you think integration is easy, you should

178
00:06:41,900 --> 00:06:43,000
try these kinds of projects.

179
00:06:43,140 --> 00:06:43,820
Yeah, yeah, yeah.

180
00:06:43,860 --> 00:06:47,380
Because even though you would think like hotel is hotel is hotel, it must all be the same

181
00:06:47,380 --> 00:06:47,800
information.

182
00:06:47,960 --> 00:06:49,580
Don't we all have the same business object model?

183
00:06:49,920 --> 00:06:50,360
Oh, no.

184
00:06:50,600 --> 00:06:51,400
No, we do not.

185
00:06:51,820 --> 00:06:56,740
In this hypothetical example, perhaps one hotel chain had a concept of stays in addition

186
00:06:56,740 --> 00:06:59,460
to nights, whereas the other one only cared about nights.

187
00:06:59,960 --> 00:07:02,880
And now, all of a sudden, we have a very different way of discerning what your status level might

188
00:07:02,880 --> 00:07:03,160
be.

189
00:07:03,540 --> 00:07:06,980
And, you know, I think it's handy to have like a software background in an instance like

190
00:07:06,980 --> 00:07:07,160
this.

191
00:07:07,220 --> 00:07:07,380
It does.

192
00:07:07,380 --> 00:07:10,000
Because while it may be frustrating, you can understand it very well.

193
00:07:10,000 --> 00:07:10,780
We're more forgiving.

194
00:07:10,960 --> 00:07:11,440
Yeah, yeah.

195
00:07:11,520 --> 00:07:17,860
Because it is like an almost, I remember, well, in my theoretical life, I remember going

196
00:07:17,860 --> 00:07:22,480
through that and just having more compassion than anything else.

197
00:07:22,600 --> 00:07:22,760
Correct.

198
00:07:22,900 --> 00:07:24,900
This is a difficult problem.

199
00:07:25,000 --> 00:07:25,200
They are.

200
00:07:25,200 --> 00:07:30,220
And I bet until it catastrophically fails, it's not like you get support for solving it,

201
00:07:30,220 --> 00:07:30,380
right?

202
00:07:30,440 --> 00:07:30,620
Right, right.

203
00:07:30,680 --> 00:07:32,360
It just seems like it'll be easy.

204
00:07:32,840 --> 00:07:34,760
But it is a hard problem.

205
00:07:35,160 --> 00:07:37,360
And, yeah, it's too bad.

206
00:07:37,500 --> 00:07:38,800
I see it a lot with airlines, too.

207
00:07:39,060 --> 00:07:40,160
I'm sure you've had this experience.

208
00:07:40,880 --> 00:07:42,840
This actually recently happened to me a few weeks ago.

209
00:07:42,980 --> 00:07:46,340
I was flying on what, from my standpoint, was my mainline carrier, Delta.

210
00:07:46,980 --> 00:07:50,260
Unfortunately, well, it happened to be a KLM branded flight.

211
00:07:50,540 --> 00:07:54,940
So, Delta can't change my seats because they don't have access to KLMs.

212
00:07:55,200 --> 00:07:55,820
Oh, yeah.

213
00:07:55,820 --> 00:07:56,340
Seating system.

214
00:07:56,420 --> 00:07:56,920
Yeah, yeah, yeah.

215
00:07:56,920 --> 00:07:59,500
And then I had another flight on another KLM subsidiary.

216
00:07:59,920 --> 00:08:03,180
And, again, KLM doesn't have access to those systems, so they can't change my seats.

217
00:08:03,300 --> 00:08:04,500
You have to go talk to their desk.

218
00:08:05,000 --> 00:08:05,180
Yeah.

219
00:08:05,260 --> 00:08:10,460
And it's like, but from my standpoint, I just booked a ticket on my mainline airline, but

220
00:08:10,460 --> 00:08:12,020
not really because partners.

221
00:08:12,720 --> 00:08:12,880
Yeah, yeah, yeah.

222
00:08:12,880 --> 00:08:15,580
And you're like, can't someone please integrate your systems?

223
00:08:15,960 --> 00:08:17,440
Yeah, that is weird.

224
00:08:17,580 --> 00:08:21,260
There should at least be a human, like a meatware integration, where they have a secret phone

225
00:08:21,260 --> 00:08:21,920
number they call.

226
00:08:22,040 --> 00:08:22,800
Wouldn't that be nice?

227
00:08:22,920 --> 00:08:25,140
And it's like, hey, it's so-and-so at this desk.

228
00:08:25,240 --> 00:08:26,840
Can you type something for me?

229
00:08:27,100 --> 00:08:29,260
I did have an experience kind of like that once.

230
00:08:29,360 --> 00:08:34,000
I was trying to get on an airplane on some international trip several years ago, and I

231
00:08:34,000 --> 00:08:37,800
gave the counter my passport, and they typed in a bunch of stuff.

232
00:08:37,860 --> 00:08:40,560
And they always seem to type in a lot of things, which I'm always amazed at.

233
00:08:40,620 --> 00:08:44,380
Every time you ever interact with a travel system, there's a lot of typing going on.

234
00:08:44,420 --> 00:08:48,460
If you ever glance behind the screen, they're almost always using some kind of a mainframe

235
00:08:48,460 --> 00:08:48,800
system.

236
00:08:48,940 --> 00:08:50,380
There's some emulator that they're dealing with.

237
00:08:50,380 --> 00:08:51,420
It's like an old BBS.

238
00:08:51,580 --> 00:08:51,860
Totally.

239
00:08:52,200 --> 00:08:53,660
It's stunning, honestly.

240
00:08:54,280 --> 00:08:55,520
And a lot of typing, a lot of typing.

241
00:08:55,800 --> 00:08:56,700
Couldn't give me my ticket.

242
00:08:56,980 --> 00:08:57,860
You know, picked up the phone.

243
00:08:58,000 --> 00:08:58,960
Three other agents come over me.

244
00:08:58,980 --> 00:09:00,420
There's all sorts of clickety-clickety-clacking.

245
00:09:00,420 --> 00:09:04,060
And I'm like watching my watch going, hey, I got to go through security here.

246
00:09:04,160 --> 00:09:06,040
You know, we're getting closer and closer and closer to takeoff.

247
00:09:06,640 --> 00:09:09,100
And so finally, she like takes my passport and like walks away.

248
00:09:09,760 --> 00:09:11,920
I'm like, well, this doesn't sound good.

249
00:09:12,160 --> 00:09:13,280
I didn't get her name.

250
00:09:13,360 --> 00:09:14,280
I didn't know where she was going.

251
00:09:14,320 --> 00:09:15,600
And eventually, she comes back.

252
00:09:16,160 --> 00:09:17,740
And she called like Ryan.

253
00:09:18,280 --> 00:09:19,320
I'm making up a name.

254
00:09:19,560 --> 00:09:20,740
But she called a person.

255
00:09:21,220 --> 00:09:24,120
And like literally, a minute and a half later, out comes my ticket.

256
00:09:25,000 --> 00:09:29,220
I assume Ryan like literally went into the database and like flipped a bit or something.

257
00:09:29,440 --> 00:09:30,080
Yeah, that's right.

258
00:09:30,080 --> 00:09:34,140
And that like, Ryan must be the guy they call when nothing else works.

259
00:09:34,360 --> 00:09:34,900
Yeah, yeah, yeah.

260
00:09:34,900 --> 00:09:38,100
And then Ryan probably has like never bought lunch in his life because everyone's like, thank

261
00:09:38,100 --> 00:09:42,140
God for Ryan because, you know, he knows how to write a SQL query, you know, that he probably

262
00:09:42,140 --> 00:09:43,120
shouldn't even be able to do.

263
00:09:43,260 --> 00:09:43,820
But he did.

264
00:09:44,200 --> 00:09:44,360
Yeah.

265
00:09:44,500 --> 00:09:48,620
I've seen that before where customers actually had access to the production databases and

266
00:09:48,620 --> 00:09:51,180
made changes directly against the production databases.

267
00:09:51,180 --> 00:09:53,460
That's a perfect return to our exercise.

268
00:09:53,540 --> 00:09:54,720
We always come back around in tools.

269
00:09:54,820 --> 00:09:55,240
Now, let me.

270
00:09:55,480 --> 00:09:56,020
I'm an architect.

271
00:09:56,280 --> 00:09:57,660
I'll de-obsertify it a little bit.

272
00:09:57,740 --> 00:09:57,920
Please.

273
00:09:58,020 --> 00:10:02,180
You know, like you don't necessarily need to worry about the bare metal stuff.

274
00:10:02,440 --> 00:10:05,780
But let's and like, let's look at that whole application.

275
00:10:06,100 --> 00:10:09,740
Like, so first of all, I'm going to install Kubernetes, right?

276
00:10:09,840 --> 00:10:10,100
Sure.

277
00:10:10,220 --> 00:10:13,980
Like what and then what, what do I need to figure out to do that?

278
00:10:14,240 --> 00:10:18,580
Like as, as the, the person in charge of which one do we choose?

279
00:10:18,660 --> 00:10:23,220
I want to figure out how, how to contact you to reconcile your account.

280
00:10:23,300 --> 00:10:23,560
Sure, sure.

281
00:10:24,180 --> 00:10:29,760
Well, so again, this, that might be far too fine grained for an abstraction like Kubernetes.

282
00:10:30,160 --> 00:10:33,100
You know, because as soon as we start to talk Kubernetes, well, okay, we've got some kind

283
00:10:33,100 --> 00:10:34,480
of a container we're running on top of that.

284
00:10:34,560 --> 00:10:34,820
Right, right.

285
00:10:34,820 --> 00:10:35,720
Do we really even need a container?

286
00:10:35,720 --> 00:10:40,800
Do we want to maintain a container for what might be a 12 line bit of code to go up to

287
00:10:40,800 --> 00:10:42,260
a database and pull back some information?

288
00:10:42,880 --> 00:10:45,860
You know, so again, that might be where we think about, well, how would we run that function?

289
00:10:46,340 --> 00:10:46,420
Right.

290
00:10:46,460 --> 00:10:49,860
Now we have lots of different options today, both on-prem and in the cloud.

291
00:10:50,000 --> 00:10:52,240
I mean, everybody's got an abstraction around functions.

292
00:10:52,720 --> 00:10:57,640
You know, you mentioned Knative earlier, you know, that's a very new sort of agnostic

293
00:10:57,640 --> 00:11:01,140
fuzz, you know, coming out of Google and, you know, we've contributed to others.

294
00:11:01,140 --> 00:11:01,280
Yeah, yeah.

295
00:11:02,060 --> 00:11:04,920
You know, and of course we've got Riff layered on top of that as well.

296
00:11:05,280 --> 00:11:07,560
And, you know, the goals are all fundamentally the same.

297
00:11:07,640 --> 00:11:11,100
How do we give you a higher level of abstraction over that?

298
00:11:11,300 --> 00:11:11,660
Yeah, yeah.

299
00:11:11,660 --> 00:11:16,480
Giving you more control over some of the interesting bits that go into functions.

300
00:11:16,980 --> 00:11:21,420
Well, let me ask you this one along those lines, sort of fundamental or something.

301
00:11:21,560 --> 00:11:27,160
It's like, so our system that looks up how to contact you, how do we decide not to put

302
00:11:27,160 --> 00:11:30,640
that into just like the reconciling code somewhere?

303
00:11:30,900 --> 00:11:33,580
Like, how are we going to decide to separate it or not separate it?

304
00:11:33,660 --> 00:11:36,200
Yeah, well, a lot of that's the art of what we do.

305
00:11:36,520 --> 00:11:39,280
You know, it's kind of looking at it and saying, does this stand alone on its own?

306
00:11:39,360 --> 00:11:40,520
Is it its own little piece?

307
00:11:40,660 --> 00:11:42,780
Is it something we want to reuse in other places?

308
00:11:43,380 --> 00:11:46,600
You know, when I think about contacting you, that seems like something I might have to do

309
00:11:46,600 --> 00:11:47,820
in multiple different contexts.

310
00:11:48,340 --> 00:11:51,000
You know, it might just be there's a problem with your reservation.

311
00:11:51,140 --> 00:11:56,260
It might be to tell you your key is ready or to tell you you've got an upgrade or whatever.

312
00:11:56,260 --> 00:12:01,360
And so I probably want to use that in more than just one, just this reconciliation of accounts.

313
00:12:01,620 --> 00:12:01,880
Right, right.

314
00:12:01,980 --> 00:12:03,740
What your preferred contact information is.

315
00:12:03,740 --> 00:12:03,920
Right.

316
00:12:04,040 --> 00:12:08,660
So I might want to have that be a more standalone piece that I can leverage and use and then

317
00:12:08,660 --> 00:12:11,180
make it simpler for me to reuse it in other contexts.

318
00:12:11,380 --> 00:12:11,520
Right.

319
00:12:11,720 --> 00:12:12,820
So that's a huge part of it.

320
00:12:12,860 --> 00:12:17,240
Is this a nugget that I can easily plug in somewhere else to be valuable to me or not?

321
00:12:17,360 --> 00:12:21,420
And do you think with reuse, people value, maybe they value them the same, but like are

322
00:12:21,420 --> 00:12:27,080
they valuing the economic efficiency of not repeating yourself, as they used to say, or

323
00:12:27,080 --> 00:12:30,420
is it the value of having a consistent way of doing something?

324
00:12:30,560 --> 00:12:32,820
I hope it's both because we like consistency.

325
00:12:32,980 --> 00:12:37,820
Nothing's quite as irritating as, well, when you call this function, you have to give it

326
00:12:37,820 --> 00:12:38,580
these three bits.

327
00:12:38,580 --> 00:12:41,840
And the same function that does the same thing needs four bits.

328
00:12:42,240 --> 00:12:43,600
I mean, I can't remember the order, but they're different.

329
00:12:43,600 --> 00:12:45,220
And even worse if they return different things.

330
00:12:45,300 --> 00:12:45,760
Of course.

331
00:12:46,020 --> 00:12:47,780
Yeah, one gives you back this, one gives you back that.

332
00:12:47,820 --> 00:12:48,480
That's no fun.

333
00:12:48,860 --> 00:12:52,280
And then obviously there's the economic side of it is I don't have to rewrite your logic

334
00:12:52,280 --> 00:12:53,460
if somebody already wrote that logic once.

335
00:12:53,460 --> 00:12:54,660
And then test the code and all that kind of stuff.

336
00:12:54,660 --> 00:12:54,900
Right.

337
00:12:54,940 --> 00:12:57,740
And then that's the other part of this we don't always appreciate is the fact that, well,

338
00:12:57,820 --> 00:13:01,780
if this is something we've reused tens of millions of times, we've probably worked

339
00:13:01,780 --> 00:13:03,120
out a lot of the bugs, I would hope.

340
00:13:03,280 --> 00:13:03,640
Yeah, yeah, yeah.

341
00:13:03,640 --> 00:13:07,660
And so now we know we have this very stable, repeatable thing that does exactly what we think

342
00:13:07,660 --> 00:13:10,500
it does, and it is tested, battle-hardened, as you will.

343
00:13:10,500 --> 00:13:10,720
Right.

344
00:13:10,720 --> 00:13:12,360
So then, let's see.

345
00:13:12,500 --> 00:13:15,940
So we have a simple preferred contact information thing.

346
00:13:16,020 --> 00:13:16,220
Right.

347
00:13:16,280 --> 00:13:19,980
And just for our purpose, we'll assume it's going to be containerized.

348
00:13:20,200 --> 00:13:20,360
Sure.

349
00:13:20,360 --> 00:13:22,440
I don't know what else it would be.

350
00:13:22,740 --> 00:13:27,420
I guess you could run it in a VM or on physical Linux somewhere.

351
00:13:27,800 --> 00:13:28,220
I mean, you could.

352
00:13:28,420 --> 00:13:28,900
Right, right.

353
00:13:28,960 --> 00:13:30,280
I'm just kind of eliminating things.

354
00:13:30,360 --> 00:13:33,280
But nowadays, one would probably write it in a container.

355
00:13:34,120 --> 00:13:34,900
Chances are.

356
00:13:35,020 --> 00:13:35,260
Right.

357
00:13:35,920 --> 00:13:40,480
And so, I guess the first thing would be, like, I'm going to build a container that

358
00:13:40,480 --> 00:13:48,320
has, you know, whatever baseline OS I have, and it has this, I don't know, what would it

359
00:13:48,320 --> 00:13:49,440
be inside of there?

360
00:13:49,520 --> 00:13:50,520
Well, your technology stack.

361
00:13:50,740 --> 00:13:51,100
Yeah, yeah.

362
00:13:51,100 --> 00:13:53,140
So presumably, I mean, I'm a long-time Java guy.

363
00:13:53,220 --> 00:13:56,080
That's where I've written most of my code, so I'd probably reach for something in the

364
00:13:56,080 --> 00:13:56,700
Java space.

365
00:13:57,200 --> 00:14:00,880
I'm kind of a fan of Spring Boot these days because it takes away a lot of the boilerplate

366
00:14:00,880 --> 00:14:03,980
that I've had to do throughout my career, and so you're probably going to start with some

367
00:14:03,980 --> 00:14:08,040
kind of an image that has a base level of Java, it's got your Spring Boot bits, and then

368
00:14:08,040 --> 00:14:10,540
here's my application bits, and now here you go.

369
00:14:10,820 --> 00:14:12,600
Everything's sitting in that box, and away we go.

370
00:14:12,700 --> 00:14:16,700
Now, the interesting challenge in a lot of organizations is, how do we govern what goes

371
00:14:16,700 --> 00:14:17,380
in that box?

372
00:14:17,580 --> 00:14:17,780
Right.

373
00:14:17,780 --> 00:14:21,660
How do we get to an agreement on, this is the level of Java we want to be at, this

374
00:14:21,660 --> 00:14:24,580
is the, you know, we all want to be at Spring Boot level this, we want to be on

375
00:14:24,580 --> 00:14:25,940
this operating system with this patch.

376
00:14:26,300 --> 00:14:29,260
That's where a lot of the challenge, I think, comes in in many organizations, is trying

377
00:14:29,260 --> 00:14:34,780
to govern that, and make sure that we don't have 19 different ways of doing the same thing.

378
00:14:34,980 --> 00:14:35,480
Yeah, yeah, yeah.

379
00:14:35,480 --> 00:14:39,520
It seems like in a lot of companies that Docker image growth explodes, you know, talk about

380
00:14:39,520 --> 00:14:43,160
a, may a thousand flowers bloom, you know, may there be a thousand Docker containers that

381
00:14:43,160 --> 00:14:47,160
are all just slightly different from one another, you know, and oh, hey, now we have to try to

382
00:14:47,160 --> 00:14:48,960
rev some of that, what does that look like?

383
00:14:49,280 --> 00:14:53,920
Right, right, and then the basic mechanisms, all good points, and then the basic mechanism

384
00:14:53,920 --> 00:15:00,000
of getting to that is, I guess, is going to be through basically ports on your image when

385
00:15:00,000 --> 00:15:01,640
it's running, the container when it's running, right?

386
00:15:01,640 --> 00:15:06,200
And you're going to tell your Spring Boot app in there, whatever app, like, listen to this

387
00:15:06,200 --> 00:15:10,880
port, and this is going to send in a number, or not, it's going to send in a number, let's

388
00:15:10,880 --> 00:15:11,780
just say that's your ID.

389
00:15:12,380 --> 00:15:16,160
And then what you're going to do is, and we'll just ignore this for now, you're going to

390
00:15:16,160 --> 00:15:19,220
somehow look up in a database or something what they're preferred.

391
00:15:19,220 --> 00:15:20,500
Yeah, those databases are pesky.

392
00:15:20,700 --> 00:15:21,200
Yeah, yeah, yeah.

393
00:15:21,200 --> 00:15:22,460
There's always data somewhere, dang it.

394
00:15:22,460 --> 00:15:26,340
And that'll be another thing that if you're doing this all on your own, you'll have to

395
00:15:26,340 --> 00:15:31,560
figure out when your container boots up or whatever, how does it get a handle, I don't

396
00:15:31,560 --> 00:15:33,340
mean that literally, how does it get connected to the database?

397
00:15:33,340 --> 00:15:35,160
How do I connect to the database, what does that look like?

398
00:15:35,280 --> 00:15:35,300
Right, right.

399
00:15:35,300 --> 00:15:39,260
And then, so then the third thing will be like, and I guess depending on how you do it, but

400
00:15:39,260 --> 00:15:42,240
you're going to need to return what this value is, and whether it's synchronous

401
00:15:42,240 --> 00:15:45,080
or asynchronous will be another annoyance layer.

402
00:15:45,160 --> 00:15:46,940
There's probably Kafka in here somewhere just because of that.

403
00:15:46,940 --> 00:15:47,060
That's right.

404
00:15:47,540 --> 00:15:50,020
But you've got at least like two things going on.

405
00:15:50,200 --> 00:15:53,760
Like there's the thing that comes in and asks you a question, and then it has to wait around

406
00:15:53,760 --> 00:15:56,800
if it's synchronous and blocking or whatever the kids call it nowadays.

407
00:15:57,680 --> 00:16:01,080
And then the second thing, you're going to talk to a database to find that, hey, you like

408
00:16:01,080 --> 00:16:01,380
email.

409
00:16:01,840 --> 00:16:05,080
And then that thing's like sitting around in the waiting room like Beetlejuice waiting, and

410
00:16:05,080 --> 00:16:08,180
then finally you reply back to it, and you're like, boom, this email, and then it runs

411
00:16:08,180 --> 00:16:11,260
off, and then that container's done with its job at the moment, right?

412
00:16:11,660 --> 00:16:14,160
So, you know, the beauty to me of what functions give us is the fact

413
00:16:14,160 --> 00:16:19,280
is the fact that they can spin up and spin down, and because something like this might

414
00:16:19,280 --> 00:16:22,800
be sporadic, you know, it might not have a real predictable curve to it.

415
00:16:22,860 --> 00:16:26,220
You know, if you're a retail business, you know that you're going to get a lot of sales

416
00:16:26,220 --> 00:16:27,020
around the holidays.

417
00:16:27,580 --> 00:16:31,220
I spent a bunch of my career in insurance, and so you've got very predictable times a

418
00:16:31,220 --> 00:16:32,440
year where there's going to be renewals.

419
00:16:32,960 --> 00:16:34,420
And so you can kind of build around that.

420
00:16:34,580 --> 00:16:38,300
And you look at something like this, it's probably a lot more spiky when it comes to when

421
00:16:38,300 --> 00:16:40,220
do we need to contact you, you know?

422
00:16:40,380 --> 00:16:43,520
And so you think about, well, let's say you went in and updated your address.

423
00:16:43,620 --> 00:16:46,360
Let's say you moved, and so you went in and changed your address.

424
00:16:46,500 --> 00:16:49,120
Well, you're going to get a contact about that as well.

425
00:16:49,500 --> 00:16:51,860
And so that's another one of those things that will happen sporadically.

426
00:16:52,340 --> 00:16:55,920
And so to me, again, another nice use of a function that we can scale it up when you

427
00:16:55,920 --> 00:16:59,480
move, you go in, you change your account, some number of seconds or minutes later, you get

428
00:16:59,480 --> 00:17:00,040
that ping.

429
00:17:00,140 --> 00:17:00,300
Right.

430
00:17:00,580 --> 00:17:03,220
And it doesn't require an immediate response.

431
00:17:03,480 --> 00:17:03,680
Right.

432
00:17:03,820 --> 00:17:08,740
And so if there's one, if so, just as a spoiler alert, eventually we'll get to it, it should

433
00:17:08,740 --> 00:17:09,300
be a function.

434
00:17:10,140 --> 00:17:11,620
There's always a function in there somewhere.

435
00:17:11,720 --> 00:17:13,200
Or, you know, it should be a serverless.

436
00:17:13,200 --> 00:17:14,500
It just functions all the way down.

437
00:17:14,600 --> 00:17:18,740
But if we weren't doing that, basically, you would have created this container with the

438
00:17:18,740 --> 00:17:20,100
code that does the two things.

439
00:17:20,220 --> 00:17:20,340
Right.

440
00:17:20,400 --> 00:17:20,560
Right.

441
00:17:20,940 --> 00:17:21,500
That connects to the two things.

442
00:17:21,500 --> 00:17:23,500
And it's probably going to be sitting around idle a lot.

443
00:17:23,680 --> 00:17:24,060
Right, right.

444
00:17:24,060 --> 00:17:27,540
And then you need to figure out, like, so when does that run?

445
00:17:27,760 --> 00:17:29,240
How many of them do I need running?

446
00:17:29,660 --> 00:17:32,400
And then how am I going to tell it how to connect to a database?

447
00:17:32,680 --> 00:17:34,980
And then how do I tell other things how to get to this thing?

448
00:17:35,060 --> 00:17:35,220
Right.

449
00:17:35,220 --> 00:17:37,580
I guess you're sort of registering and finding stuff.

450
00:17:37,640 --> 00:17:37,760
Sure.

451
00:17:37,760 --> 00:17:45,880
And so are those things that, like, are defined for you in most infrastructure things?

452
00:17:46,040 --> 00:17:49,700
Or do most people, like, whether it's a good idea or not, do most people, like, bring

453
00:17:49,700 --> 00:17:51,980
all of that stuff and set it up on their own?

454
00:17:52,440 --> 00:17:53,620
How do you manage all that stuff?

455
00:17:53,620 --> 00:17:55,340
It depends on how we're trying to do this.

456
00:17:55,340 --> 00:17:58,240
You know, and so this is where we start getting, again, these different levels of abstraction.

457
00:17:58,960 --> 00:18:04,020
You know, if we're coarser grain, you know, if we're at that IaaS level, I've got to manage

458
00:18:04,020 --> 00:18:04,500
all this.

459
00:18:04,640 --> 00:18:07,980
And I'm responsible for figuring all these things out, putting all these moving parts in.

460
00:18:08,380 --> 00:18:11,400
You know, and as we keep kind of moving up the hierarchy, fewer and fewer of those things

461
00:18:11,400 --> 00:18:12,280
become my responsibility.

462
00:18:12,820 --> 00:18:15,680
You know, we go all the way up to a serverless environment.

463
00:18:16,320 --> 00:18:20,400
The serverless platform I'm using, whether that's on a public cloud provider, whether that's

464
00:18:20,400 --> 00:18:26,020
an open source thing like Knative, Riff, et cetera, that's managing the, oh, there's a lot

465
00:18:26,020 --> 00:18:26,400
of lag here.

466
00:18:26,460 --> 00:18:28,340
Let me create more instances of the container.

467
00:18:29,000 --> 00:18:34,760
But me, it knows how to talk to your service bus, your queue, whatever it is you're talking

468
00:18:34,760 --> 00:18:35,000
to.

469
00:18:35,860 --> 00:18:39,640
As I slide back down to your example, if I try to do this as an application, well, I have

470
00:18:39,640 --> 00:18:40,380
to talk to the queue.

471
00:18:40,560 --> 00:18:41,740
I have to figure out how to do that.

472
00:18:42,140 --> 00:18:46,820
I probably have to manually say I want three of these to be in existence at all time.

473
00:18:47,220 --> 00:18:50,200
And, you know, with some of our platforms that are good enough to say, hey, there's lag

474
00:18:50,200 --> 00:18:50,400
here.

475
00:18:50,460 --> 00:18:51,380
Let's add two more.

476
00:18:51,880 --> 00:18:56,900
But, again, it's more for me to manage, more for me to worry about than, you know, if we

477
00:18:56,900 --> 00:18:58,100
keep trying to go up the curve.

478
00:18:58,100 --> 00:18:58,380
Yeah, yeah, yeah.

479
00:18:58,560 --> 00:19:03,220
So then, I mean, just to state, as I'm doing here, just to state the obvious absurd thing,

480
00:19:03,660 --> 00:19:07,700
if you have, let's say, a distributed application driven by microservices, like these little

481
00:19:07,700 --> 00:19:08,160
functions.

482
00:19:08,420 --> 00:19:09,160
That's what all the kids want.

483
00:19:09,160 --> 00:19:15,240
Like, normally, if you have a single process, traditional application, you basically don't

484
00:19:15,240 --> 00:19:18,480
need to worry about, like, routing things around or finding things.

485
00:19:18,480 --> 00:19:20,980
It's all just sort of, like, connected together in your code.

486
00:19:21,100 --> 00:19:24,880
And you might have some configuration, but basically, you're not sort of, like, looking

487
00:19:24,880 --> 00:19:26,660
for that other object instance.

488
00:19:26,820 --> 00:19:26,980
Right.

489
00:19:27,000 --> 00:19:27,760
It's just, like, there.

490
00:19:28,140 --> 00:19:32,300
Whereas, once you introduce a microservices thing, you, I guess, maybe reintroduce?

491
00:19:32,360 --> 00:19:32,600
I don't know.

492
00:19:32,640 --> 00:19:35,800
You introduce this new notion of, like, how do I find all my friends?

493
00:19:35,920 --> 00:19:36,060
Yep.

494
00:19:36,160 --> 00:19:36,340
Right?

495
00:19:36,420 --> 00:19:40,100
And once I find all my friends, how do I connect to them?

496
00:19:40,220 --> 00:19:40,360
Right.

497
00:19:40,360 --> 00:19:41,260
And what do I do with them?

498
00:19:41,260 --> 00:19:41,400
Right.

499
00:19:41,400 --> 00:19:47,420
And so, one, if you just were relying on, like, something like a Kubernetes, like, it doesn't

500
00:19:47,420 --> 00:19:49,000
really do that stuff for you, right?

501
00:19:49,040 --> 00:19:52,560
There's other things that you layer on top of Kubernetes to handle, I don't know, what

502
00:19:52,560 --> 00:19:52,960
do people call it nowadays?

503
00:19:52,960 --> 00:19:54,360
Service registry, service discovery.

504
00:19:54,600 --> 00:19:55,420
Service mesh?

505
00:19:55,840 --> 00:19:57,700
Or do people say that anymore?

506
00:19:57,720 --> 00:19:58,320
Yeah, I don't know.

507
00:19:58,420 --> 00:19:58,980
Yeah, service mesh.

508
00:19:58,980 --> 00:19:59,380
Yeah, fabric.

509
00:19:59,660 --> 00:20:00,100
Fabric.

510
00:20:00,280 --> 00:20:01,900
I haven't heard fabric in a long time.

511
00:20:01,940 --> 00:20:03,300
Well, I think they're now mesh now.

512
00:20:03,540 --> 00:20:03,940
Oh, they're mesh.

513
00:20:04,040 --> 00:20:04,260
Right?

514
00:20:04,360 --> 00:20:04,680
I don't know.

515
00:20:04,880 --> 00:20:05,240
5G.

516
00:20:05,420 --> 00:20:13,220
I do, having been in this industry longer than I'll admit, it is amazing to me how often

517
00:20:13,220 --> 00:20:18,660
we rename an existing thing and call it something new and then try to pretend that no one's

518
00:20:18,660 --> 00:20:20,000
ever done anything like this ever before.

519
00:20:20,260 --> 00:20:20,360
Yeah, yeah.

520
00:20:20,700 --> 00:20:22,180
And it's like, yeah, but it's just like this other thing.

521
00:20:22,240 --> 00:20:23,320
We just call it this now instead.

522
00:20:23,320 --> 00:20:23,500
Right.

523
00:20:23,960 --> 00:20:28,220
And then so the reason you would go through this suffering in our example, or not suffering,

524
00:20:28,220 --> 00:20:33,900
this additional stuff is, as you were kind of saying, you have this service that tells

525
00:20:33,900 --> 00:20:38,420
you your preferred way to be contacted, and there's more than one piece of software that

526
00:20:38,420 --> 00:20:39,220
wants to use it.

527
00:20:39,340 --> 00:20:39,440
Right.

528
00:20:39,540 --> 00:20:39,680
Right.

529
00:20:39,760 --> 00:20:43,420
And then, I guess, I mean, we won't go down this path too much.

530
00:20:43,520 --> 00:20:48,320
You wouldn't put your entire piece of hotel running software in one piece of software.

531
00:20:48,520 --> 00:20:48,960
I hope not.

532
00:20:49,420 --> 00:20:49,760
I hope not.

533
00:20:49,760 --> 00:20:52,220
So you do need it to be a separate service somewhere.

534
00:20:52,320 --> 00:20:54,720
That's going to be the best way of running it.

535
00:20:55,100 --> 00:20:56,260
So you have that set up.

536
00:20:56,260 --> 00:21:00,880
So, okay, so let's say that you don't want to, I mean, how do you, what would you do

537
00:21:00,880 --> 00:21:04,140
so you don't have to worry about all of this, like, service registry routing stuff?

538
00:21:04,240 --> 00:21:09,480
Like, is that, do I go, like, download the Knative and I build something for that?

539
00:21:09,700 --> 00:21:11,920
Or is that the wrong thing I'm looking at?

540
00:21:12,180 --> 00:21:15,940
Well, so again, this is where we start getting into, do we have good platforms that let us

541
00:21:15,940 --> 00:21:16,380
do this?

542
00:21:16,600 --> 00:21:18,960
You know, this is where we get into some of the service discovery things.

543
00:21:19,060 --> 00:21:20,400
And some of the stuff's built in the spring.

544
00:21:20,500 --> 00:21:24,020
Some of the stuff we can get from providers and get it from PCF, various places.

545
00:21:24,440 --> 00:21:27,420
And, you know, so that's part of it is understanding, like, what are all these pieces?

546
00:21:27,600 --> 00:21:28,300
What goes together?

547
00:21:28,640 --> 00:21:33,120
How do I want to make this as easy to operate and as easy for my app developers?

548
00:21:33,180 --> 00:21:33,600
Yeah, yeah.

549
00:21:33,620 --> 00:21:34,920
And what does that look like for us?

550
00:21:34,960 --> 00:21:35,100
Right.

551
00:21:35,540 --> 00:21:39,920
You know, but I think what, you know, the message that I'm really always trying to get across

552
00:21:39,920 --> 00:21:43,440
to people is we've got all these common concerns and issues that we need to deal with.

553
00:21:43,860 --> 00:21:44,960
And what does that look like?

554
00:21:44,980 --> 00:21:47,200
How do we do that in a way that's as simple as possible?

555
00:21:47,200 --> 00:21:50,420
We don't want to have a million different ways of finding our services.

556
00:21:50,760 --> 00:21:51,120
Right, right.

557
00:21:51,120 --> 00:21:55,020
We don't want to be as consistent as possible, you know, so that we can get people to use

558
00:21:55,020 --> 00:21:55,640
the same thing.

559
00:21:55,700 --> 00:21:56,740
And again, we have confidence in it.

560
00:21:56,780 --> 00:21:57,420
We know it works.

561
00:21:57,460 --> 00:21:58,100
It's reliable.

562
00:21:58,800 --> 00:22:04,320
You know, but the other part of this that I'm always a little cautious on is we're so

563
00:22:04,320 --> 00:22:04,560
quick.

564
00:22:04,600 --> 00:22:07,200
And you brought up this good point that we used to have the monolith and then now we're

565
00:22:07,200 --> 00:22:08,580
moving to these more distributed systems.

566
00:22:09,380 --> 00:22:10,680
And we do that for good reasons.

567
00:22:10,880 --> 00:22:12,220
You know, we can scale it independently.

568
00:22:12,400 --> 00:22:13,360
We can employ them independently.

569
00:22:13,880 --> 00:22:15,740
But we pay some tax to get that.

570
00:22:16,000 --> 00:22:18,820
There's added complexity because, to your point, we have to go find them.

571
00:22:19,040 --> 00:22:19,560
Where are they?

572
00:22:19,660 --> 00:22:23,880
They're going to move because they get destroyed and recreated or we scale up, scale down.

573
00:22:24,100 --> 00:22:26,020
So it's not always going to be in the same place.

574
00:22:26,100 --> 00:22:26,980
Now it's harder to log.

575
00:22:27,040 --> 00:22:29,200
I've got to push that out to a stream and then deal with it later.

576
00:22:30,100 --> 00:22:34,900
If we're not getting the benefits out of that distributed system, we shouldn't be paying

577
00:22:34,900 --> 00:22:37,480
the complexity price to get them.

578
00:22:37,840 --> 00:22:38,020
Right.

579
00:22:38,020 --> 00:22:40,860
And yet a lot of people are just like, nope, I'm going to do everything as microservices

580
00:22:40,860 --> 00:22:45,680
and functions because I read a white paper or I hear that such and such a company is doing

581
00:22:45,680 --> 00:22:47,020
it and ergo I need to do it.

582
00:22:47,100 --> 00:22:48,920
It's like, no, no, they're just tools.

583
00:22:49,440 --> 00:22:50,940
Use the right tools to solve the problems.

584
00:22:50,980 --> 00:22:51,440
Right, right, right.

585
00:22:51,440 --> 00:22:55,160
You know, I mean, I had someone say to me a month or so ago, I'm going to refactor my

586
00:22:55,160 --> 00:22:56,860
entire application as a set of functions.

587
00:22:57,680 --> 00:22:59,080
That's probably not a good idea.

588
00:22:59,580 --> 00:22:59,960
Right, right.

589
00:22:59,980 --> 00:23:03,760
Are there things within your application that might be fantastic as functions?

590
00:23:04,280 --> 00:23:04,600
Absolutely.

591
00:23:05,340 --> 00:23:07,680
Probably not literally your entire application.

592
00:23:08,020 --> 00:23:09,840
You know, that seems fairly unlikely.

593
00:23:10,060 --> 00:23:13,460
There is a small set of apps that that would apply to.

594
00:23:14,200 --> 00:23:15,860
Again, statistically, probably not yours.

595
00:23:16,020 --> 00:23:16,300
Yeah.

596
00:23:16,520 --> 00:23:16,700
Yeah.

597
00:23:16,700 --> 00:23:19,580
So which of these tools is the right one to solve the problem?

598
00:23:19,740 --> 00:23:25,960
So then speaking of tools, to move my thing out of the Columbo-esque way of putting it,

599
00:23:26,360 --> 00:23:28,040
like, so what is Knative?

600
00:23:28,100 --> 00:23:29,680
How would that start to fit into here?

601
00:23:29,940 --> 00:23:32,800
Because that's a serverless building framework thing.

602
00:23:32,800 --> 00:23:39,040
It's like an agnostic FAS layer so that you don't have to worry about, okay, I want to run it

603
00:23:39,040 --> 00:23:42,720
on-prem, I want to run it on my laptop, I want to run it in a public cloud provider and

604
00:23:42,720 --> 00:23:44,100
not be stuck with their abstraction.

605
00:23:44,800 --> 00:23:49,740
So if you're going to use the raw public cloud provider, you have to write it the way they

606
00:23:49,740 --> 00:23:50,100
want it.

607
00:23:50,540 --> 00:23:51,960
You're kind of stuck in their model.

608
00:23:51,960 --> 00:23:54,520
And like Lambda or whatever Microsoft.

609
00:23:54,520 --> 00:23:55,020
And they're great.

610
00:23:55,120 --> 00:23:56,200
I'm not trying to bash on them.

611
00:23:56,440 --> 00:23:57,880
You know, I've done a bit with Lambda.

612
00:23:58,040 --> 00:23:58,640
It's good stuff.

613
00:23:58,800 --> 00:23:59,900
You know, there's cool things there.

614
00:24:00,360 --> 00:24:03,240
And you can tie into a lot of other things very easily because of that.

615
00:24:03,320 --> 00:24:07,100
It's very integrated with other offerings from the public cloud providers.

616
00:24:07,620 --> 00:24:13,580
But either tactically or strategically, we might not want to be so tightly tied to one provider.

617
00:24:13,820 --> 00:24:14,220
Right.

618
00:24:14,300 --> 00:24:18,740
We might want to have the flexibility to say, you know what, we're renegotiating our deal,

619
00:24:18,940 --> 00:24:21,940
so we're going to start moving some of those workloads to another provider.

620
00:24:21,960 --> 00:24:23,900
as leverage in that negotiation.

621
00:24:24,360 --> 00:24:27,780
Or we may decide, hey, they have a better XYZ.

622
00:24:27,880 --> 00:24:29,420
We're going to go use theirs instead of this one.

623
00:24:30,160 --> 00:24:32,440
And so we probably don't really want to be tied in.

624
00:24:32,820 --> 00:24:33,500
Yeah, yeah, yeah.

625
00:24:33,580 --> 00:24:33,980
The reality.

626
00:24:34,200 --> 00:24:38,700
Someone was explaining, like I always get all, I don't know, persnickety about lock-in

627
00:24:38,700 --> 00:24:39,140
or something.

628
00:24:39,220 --> 00:24:39,440
Sure.

629
00:24:39,580 --> 00:24:44,200
Because I always wonder, like, when does that actually, how often does that actually come

630
00:24:44,200 --> 00:24:44,700
into play?

631
00:24:44,800 --> 00:24:48,480
And then usually it seems to mean, I just want to stop paying this vendor.

632
00:24:49,880 --> 00:24:51,500
Which is totally fine.

633
00:24:51,500 --> 00:24:53,140
And that does happen, let's be honest.

634
00:24:53,380 --> 00:24:58,760
Yeah, but someone was going over something interesting on this point, which I'll make an analogy

635
00:24:58,760 --> 00:24:59,060
for.

636
00:24:59,140 --> 00:25:03,320
It's like, well, it's not necessarily, you're locking into yourself, but like you're given

637
00:25:03,320 --> 00:25:08,500
the opportunity when you add a layer of abstraction to customize it how you want to use it, including

638
00:25:08,500 --> 00:25:10,400
limiting the use of stuff you don't want.

639
00:25:10,540 --> 00:25:10,720
Right.

640
00:25:10,880 --> 00:25:15,880
And, you know, I think analogously is the whole, like, Spring framework of like, well,

641
00:25:15,880 --> 00:25:17,720
why do you need this whole other framework, right?

642
00:25:17,760 --> 00:25:21,540
And, you know, on the one hand, historically Spring people could be like, because then you're

643
00:25:21,540 --> 00:25:25,240
not locked into the implementation, which I'm waving my hands here, which is fine.

644
00:25:25,260 --> 00:25:29,500
But I think more of what's interesting about layering that on top of the default Java is

645
00:25:29,500 --> 00:25:31,480
like, I just like it this way better, right?

646
00:25:31,520 --> 00:25:34,380
And I can customize how these things hook together.

647
00:25:34,940 --> 00:25:39,220
So you might similarly build your own sort of like, for your organization, your own sort

648
00:25:39,220 --> 00:25:42,720
of like serverless-y function thing on top of what they have available.

649
00:25:43,340 --> 00:25:43,520
Yeah.

650
00:25:43,640 --> 00:25:47,880
I mean, so to your point, I always remember building apps with like that database layer.

651
00:25:48,060 --> 00:25:51,520
And we always said, well, this way we can change our database later if we want to.

652
00:25:51,520 --> 00:25:51,580
Exactly.

653
00:25:51,860 --> 00:25:52,020
Right.

654
00:25:52,140 --> 00:25:54,720
To which no one has ever actually changed their database, right?

655
00:25:54,840 --> 00:25:56,520
That's like the least likely thing to do.

656
00:25:56,740 --> 00:25:59,920
But there's still good reasons to have that there, though, you know, because to your point,

657
00:25:59,960 --> 00:26:01,900
it gives you a different abstraction to work with.

658
00:26:02,120 --> 00:26:06,100
You're not tied down to some of the things that that particular database might ask you to

659
00:26:06,100 --> 00:26:08,880
do, you know, and it is good to have that layer of indirection.

660
00:26:09,140 --> 00:26:12,280
Now, I've seen that a lot with I'm calling a third-party thing.

661
00:26:12,460 --> 00:26:13,720
You put that layer there.

662
00:26:13,840 --> 00:26:17,260
Sometimes it's to adapt the interface because you don't want to call it their way.

663
00:26:17,320 --> 00:26:18,320
You want to call it your way.

664
00:26:18,420 --> 00:26:19,920
You want to pass a different set of information.

665
00:26:20,620 --> 00:26:22,700
Maybe there's something that gets passed in every time you call it.

666
00:26:22,760 --> 00:26:25,040
You don't want every single consumer to have to know that.

667
00:26:25,140 --> 00:26:26,460
You can sort of add that in.

668
00:26:26,580 --> 00:26:27,020
Yeah, yeah, yeah.

669
00:26:27,040 --> 00:26:29,220
So there's a lot of good reasons to do that kind of work.

670
00:26:29,400 --> 00:26:33,860
And so it's the same kind of thing here where you may not want to be stuck with the abstraction

671
00:26:33,860 --> 00:26:36,380
that a given public cloud provider provides you.

672
00:26:36,580 --> 00:26:36,800
Yeah.

673
00:26:36,920 --> 00:26:37,440
Well, go ahead here.

674
00:26:37,480 --> 00:26:38,080
Use this one.

675
00:26:38,160 --> 00:26:41,660
And then you have the option to move it to wherever it makes sense for you.

676
00:26:41,660 --> 00:26:42,680
So that makes sense.

677
00:26:42,860 --> 00:26:49,540
So then to summarize, basically Knative is a framework for building a serverless layer.

678
00:26:49,820 --> 00:26:49,940
Sure.

679
00:26:50,100 --> 00:26:55,020
And the serverless layer being basically like I have these little functions, these little components.

680
00:26:55,520 --> 00:26:55,660
Yep.

681
00:26:55,780 --> 00:26:57,040
And they do something.

682
00:26:57,380 --> 00:26:59,220
Super mini microservices or something.

683
00:26:59,220 --> 00:27:05,200
Yeah, like whatever granularity you think you should be doing according to your council of elders or whatever.

684
00:27:06,200 --> 00:27:07,380
The enterprise architects.

685
00:27:07,580 --> 00:27:07,940
That's right.

686
00:27:08,820 --> 00:27:14,620
But then you need to basically, I'm hesitating because I'm trying not to use certain words like orchestration and things.

687
00:27:14,680 --> 00:27:19,220
But you need a way of each of these components being able to find each other and work with each other

688
00:27:19,220 --> 00:27:25,200
and basically operate with the same ease that they would if it was all a monolith in-process, in-memory thing.

689
00:27:25,280 --> 00:27:28,060
Or you were using one of the public cloud providers abstractions.

690
00:27:28,060 --> 00:27:28,220
Right.

691
00:27:28,220 --> 00:27:31,380
So that's a lot of what's being then provided with these layers like Knative and RIF.

692
00:27:31,460 --> 00:27:37,520
And then so I assume because it's Knative instead of whatever else native, basically it runs on top of Kubernetes.

693
00:27:37,620 --> 00:27:38,200
Of course it does.

694
00:27:38,260 --> 00:27:38,400
Right.

695
00:27:38,500 --> 00:27:44,460
So it's basically a framework for if you're running on Kubernetes and you want to create a serverless framework.

696
00:27:44,620 --> 00:27:44,820
Right.

697
00:27:45,220 --> 00:27:46,880
Now, so is that if I...

698
00:27:46,880 --> 00:27:48,740
Run your function on top of Kubernetes.

699
00:27:48,740 --> 00:27:55,380
If I'm this theoretic hotel chain, like does that mean I, some development team is going to take Knative

700
00:27:55,380 --> 00:27:58,760
and build a thing on top and build my serverless framework?

701
00:28:00,840 --> 00:28:05,820
So your Kubernetes Knative environment is probably going to be run by your operations people.

702
00:28:06,220 --> 00:28:06,920
Ah, right.

703
00:28:07,260 --> 00:28:09,460
And it's going to be your developers writing the function.

704
00:28:09,960 --> 00:28:15,980
And then however you want to get that into that environment, probably through your CICD pipeline, fingers crossed, I hope,

705
00:28:16,520 --> 00:28:19,680
that actually gets it into that environment that's maintained by your operators.

706
00:28:19,980 --> 00:28:20,280
Right.

707
00:28:20,440 --> 00:28:21,760
So that would be the way I'd look at it.

708
00:28:21,760 --> 00:28:26,380
And so part of the beauty of Knative, RIF, et cetera, is the idea that, okay, you've got Kubernetes.

709
00:28:26,500 --> 00:28:27,860
You've decided that's your baseline.

710
00:28:28,000 --> 00:28:31,620
So if you've got some stuff running in containers on top of Kubernetes that they're orchestrating,

711
00:28:31,840 --> 00:28:36,260
you want to add some functions into the mix, well, now you can run that on that same base platform

712
00:28:36,260 --> 00:28:42,780
and call them and talk to each other and life is good and gives your developers another abstraction.

713
00:28:42,780 --> 00:28:44,880
So I can write that as a function if that makes sense.

714
00:28:44,880 --> 00:28:51,960
I don't have to shove it into a Docker container or whatever you're using for this 15-line thing to look up your preferred contact information.

715
00:28:51,960 --> 00:28:52,160
Right, right, right.

716
00:28:52,580 --> 00:28:58,700
So now I can write that as it should be, just this simple little baby function, and run it and not worry about it.

717
00:28:58,900 --> 00:29:10,180
Now, so is Knative, because I've discovered over the years that many of these wondrous layers of abstraction are actually just a series of APIs and interfaces.

718
00:29:10,440 --> 00:29:10,660
Yeah.

719
00:29:10,800 --> 00:29:13,860
And then eventually, like, there's some code that actually does something.

720
00:29:13,880 --> 00:29:14,080
Right.

721
00:29:14,420 --> 00:29:23,720
And so, like, where does Knative fit on that spectrum of, like, this is just an API versus, like, oh, you actually wanted to do something that's over here in the VIP room.

722
00:29:23,960 --> 00:29:24,080
Yeah.

723
00:29:24,180 --> 00:29:24,860
And so, like...

724
00:29:24,860 --> 00:29:25,860
I like that, the VIP room.

725
00:29:25,960 --> 00:29:27,060
There's bottle service, I guess.

726
00:29:27,060 --> 00:29:37,080
How much, I mean, is Knative, like, something I can just, like, download and install, or is it more of, like, a thing I need to, like, implement or buy from a vendor, or, like, where does it all...

727
00:29:37,080 --> 00:29:38,720
Well, I mean, I think all of the above, right?

728
00:29:38,740 --> 00:29:40,120
I mean, you could do it in multiple ways.

729
00:29:40,600 --> 00:29:49,180
So, I mean, I spun up a GKE cluster for this demo I did this morning, and Knative is installed on top of that, and then RIF is installed on top of that.

730
00:29:49,680 --> 00:29:52,540
You know, and so from my standpoint, I installed that on a Kubernetes cluster.

731
00:29:53,140 --> 00:29:55,720
Certainly you can buy that if you wish.

732
00:29:56,860 --> 00:30:05,520
But basically, if I get Knative, and I have a Kubernetes cluster, I can install that thing that I got on, I don't know what they call it, vanilla Knative?

733
00:30:05,660 --> 00:30:09,580
I can install the Knative, the most recent...

734
00:30:09,580 --> 00:30:09,980
Very new.

735
00:30:10,140 --> 00:30:11,640
The most recent blessed version on top of...

736
00:30:11,640 --> 00:30:12,300
Very new.

737
00:30:12,440 --> 00:30:12,720
Oh, sure, sure.

738
00:30:12,720 --> 00:30:13,460
Let me stress that.

739
00:30:13,580 --> 00:30:14,740
This is Alpha Software.

740
00:30:14,840 --> 00:30:14,900
Yeah, yeah, yeah.

741
00:30:14,900 --> 00:30:17,580
Well, let's not go down to what version it is.

742
00:30:17,700 --> 00:30:19,360
I mean, let's just assume it's...

743
00:30:19,360 --> 00:30:20,320
This is the vision.

744
00:30:20,460 --> 00:30:20,560
Sure.

745
00:30:20,560 --> 00:30:21,320
It's like, I can just...

746
00:30:21,320 --> 00:30:23,500
I download it from, I guess, GitHub, right?

747
00:30:23,960 --> 00:30:25,180
I pull it down from there...

748
00:30:25,180 --> 00:30:25,880
Whole worlds on GitHub.

749
00:30:25,880 --> 00:30:26,540
And I build it.

750
00:30:26,660 --> 00:30:30,560
And then I'm like, all right, Kubernetes install.

751
00:30:30,720 --> 00:30:31,860
So here's your environment.

752
00:30:32,160 --> 00:30:33,400
And then, boom, I'm done.

753
00:30:34,580 --> 00:30:40,940
And I don't mean this in a facetious way, but I have a serverless setup that I could start using.

754
00:30:41,360 --> 00:30:44,080
You have an environment within which you can run your functions.

755
00:30:44,080 --> 00:30:44,300
Right.

756
00:30:44,600 --> 00:30:48,580
And then, so what are the core things?

757
00:30:48,740 --> 00:30:50,080
So now I'm back to the developer.

758
00:30:50,200 --> 00:30:51,360
So what's Knative giving you?

759
00:30:51,440 --> 00:30:51,900
Yeah, yeah, yeah.

760
00:30:51,900 --> 00:30:54,320
Now I'm back to that developer who, like, I have this code.

761
00:30:54,480 --> 00:30:56,300
I've got a Spring Boot application.

762
00:30:56,500 --> 00:30:56,600
Yes.

763
00:30:56,600 --> 00:30:57,240
Now what do I do?

764
00:30:57,260 --> 00:30:59,760
So a huge part of what Knative's trying to give you is, like, that build step.

765
00:30:59,880 --> 00:31:02,160
What does it mean to go from my code to the environment?

766
00:31:02,440 --> 00:31:04,300
And that might be a build pack.

767
00:31:04,400 --> 00:31:05,640
That might be a Docker image.

768
00:31:05,820 --> 00:31:10,840
And, again, we're trying to get abstracted away from that because I don't necessarily want every one of my developers building their own Docker image.

769
00:31:11,320 --> 00:31:14,080
You know, again, we get to that point where may 1,000 Docker images bloom.

770
00:31:14,240 --> 00:31:17,560
Well, that's probably not what I want as if I put on my Enterprise Architect hat.

771
00:31:17,980 --> 00:31:21,200
You know, I may want more consistency, some governance around what we're doing.

772
00:31:21,400 --> 00:31:23,000
Are we all at similar levels?

773
00:31:23,140 --> 00:31:26,620
You know, you don't want 1,000 different ways to run a, you know, a Java function, for instance.

774
00:31:26,620 --> 00:31:26,800
Sure.

775
00:31:27,560 --> 00:31:31,840
So what we're trying to get to is a point where my developer, again, is just focused on writing the code.

776
00:31:31,840 --> 00:31:34,500
How do I go look up your preference?

777
00:31:35,260 --> 00:31:38,760
And then getting that in an image, all that stuff, Knative can help me do that.

778
00:31:38,860 --> 00:31:43,940
So it's got a build step to actually build that, take my code, put it into the environment.

779
00:31:44,560 --> 00:31:48,980
There's the eventing part, which is how it actually talks to the underlying system.

780
00:31:49,180 --> 00:31:51,500
You know, I need to, you know, I'm listening to this bus.

781
00:31:51,580 --> 00:31:52,980
I'm looking for certain things to come in.

782
00:31:53,040 --> 00:31:53,660
I'm on this channel.

783
00:31:53,840 --> 00:31:54,200
Okay, great.

784
00:31:54,260 --> 00:31:56,240
Here's another message, another message.

785
00:31:56,320 --> 00:31:57,160
I go respond to it.

786
00:31:57,460 --> 00:31:59,080
You know, and then how do we scale that up and down?

787
00:31:59,320 --> 00:32:00,800
You know, that's the other part that it gives us.

788
00:32:00,800 --> 00:32:00,980
Right.

789
00:32:01,080 --> 00:32:04,400
And then I would assume, I'm kind of rushing you so we can get lunch before they put it in.

790
00:32:04,400 --> 00:32:04,500
No worries.

791
00:32:04,840 --> 00:32:11,700
But I would assume, so you've got the Knative, so you've got, we've got our DIRT, we've got our data center, we've got our servers.

792
00:32:12,420 --> 00:32:15,600
We're running, let's just, because we work here, let's say some VMware stuff.

793
00:32:15,820 --> 00:32:16,660
Some VMware, absolutely.

794
00:32:16,660 --> 00:32:21,140
That's being used to run your Kubernetes entrance, so you've got PKS going there.

795
00:32:21,560 --> 00:32:25,020
And then you installed your Knative thing.

796
00:32:25,540 --> 00:32:30,280
Now, on top of the Knative thing, you put the, like, Pivotal functional thing.

797
00:32:30,320 --> 00:32:30,500
Yeah.

798
00:32:30,740 --> 00:32:34,040
Which is basically rewritten RIF, if I remember.

799
00:32:34,280 --> 00:32:35,480
Yeah, RIF is the open source.

800
00:32:35,640 --> 00:32:41,160
And then, so what that does is, in Knative, there are probably some constructs as you went over, right?

801
00:32:41,180 --> 00:32:42,740
Here's your registry, here's a venting.

802
00:32:43,240 --> 00:32:46,960
But, like, here is not exactly a Spring Boot handler, right?

803
00:32:47,300 --> 00:32:50,960
And so, what Pivotal, what's the Pivotal service?

804
00:32:51,400 --> 00:32:51,880
PFS.

805
00:32:52,300 --> 00:33:01,500
What PFS does is it basically knows how to talk to Knative and then says, like, all right, Spring Boot people, never mind about Knative, you talk to PFS.

806
00:33:02,020 --> 00:33:06,860
And in the same way that Spring wraps around Java and all sorts of other services, you just talk to the Spring thing.

807
00:33:07,160 --> 00:33:07,280
Yeah.

808
00:33:07,380 --> 00:33:09,960
I mean, you don't have to worry about all this Knative business.

809
00:33:10,040 --> 00:33:14,440
Yeah, I mean, the moral of the story is in all these things, like, how do we get you focused on the stuff that matters to you?

810
00:33:14,580 --> 00:33:14,800
Right.

811
00:33:15,000 --> 00:33:21,120
Yeah, and so that's really what the goal would be there is to, again, let you get back to that model of, I need to write a little bit of code to solve this business problem.

812
00:33:21,120 --> 00:33:26,960
So, then, backing up a little bit, what would it look like if I didn't have a PFS?

813
00:33:27,440 --> 00:33:28,800
Like, does that even work?

814
00:33:28,920 --> 00:33:32,000
Like, would the development team have something to do, or would it just be like, I don't know what's going on?

815
00:33:32,020 --> 00:33:34,960
Well, but then, again, you're much more exposed to those underlying layers.

816
00:33:35,160 --> 00:33:36,160
Like, what would you be using?

817
00:33:36,340 --> 00:33:38,160
Like, would you be calling directly?

818
00:33:38,280 --> 00:33:41,960
So, if you built your container, would there be, like, OS-level stuff that you call out to, or?

819
00:33:42,080 --> 00:33:43,120
You could.

820
00:33:43,520 --> 00:33:43,800
Yeah.

821
00:33:43,800 --> 00:33:44,820
You could be writing.

822
00:33:45,080 --> 00:33:48,300
I mean, again, you would have to then be responsible for how do I interact with Knative?

823
00:33:48,380 --> 00:33:50,120
How do I use the Knative build system?

824
00:33:50,600 --> 00:33:52,460
You know, you're just, you're closer to it.

825
00:33:52,680 --> 00:33:57,780
Because, in theory, I guess, so you're in that, I mean, the secret is there's an operating system inside every container.

826
00:33:58,240 --> 00:33:59,840
So, there's an operating system in the container.

827
00:33:59,840 --> 00:34:00,840
The container boots up.

828
00:34:00,940 --> 00:34:01,600
I forget what it is.

829
00:34:01,720 --> 00:34:03,920
It executes some command that's your magic, right?

830
00:34:04,000 --> 00:34:05,560
It calls main and whatever you have.

831
00:34:06,080 --> 00:34:14,220
And then, you would be responsible for saying, like, all right, I know I'm a Knative thing, which means I've been passed in this configuration of an IP address or a URL to go to.

832
00:34:14,620 --> 00:34:15,880
That is my Knative thing.

833
00:34:15,940 --> 00:34:17,200
I'm going to be like, hey, I'm alive.

834
00:34:17,280 --> 00:34:20,320
And then, the Knative thing is like, you're part of this Knative community.

835
00:34:20,440 --> 00:34:21,360
Here's all your information.

836
00:34:22,060 --> 00:34:25,260
And then, however you wrote that, all it knows how to do is HTTP.

837
00:34:26,060 --> 00:34:28,140
Unless there's some other magic stuff going on, networking.

838
00:34:28,420 --> 00:34:36,740
And so, then, whatever your program is has to know how to call out to that Knative thing, how to interpret whatever payload came back.

839
00:34:37,160 --> 00:34:44,120
And then, you also have to implement, now there's these five other methods that I call on Knative off through a network connection that does stuff.

840
00:34:44,620 --> 00:34:51,680
And then, one of them will be, I say, I need a database, I need a handle to a database or something, hand that back to me.

841
00:34:52,180 --> 00:35:03,360
And so, instead of having to invent that whole mechanism inside your container of how to talk to the Knative world, basically, something like PFS is like, we do all, we have a way of doing that.

842
00:35:03,420 --> 00:35:09,320
And then, we add this thin veneer of PFS that expresses all of that in a Spring Boot friendly way.

843
00:35:09,320 --> 00:35:14,260
Well, and I'd say the other part of this that's so important is we all realize that your application isn't just a set of functions.

844
00:35:14,420 --> 00:35:18,420
Your application isn't just something you shoved in a Docker container.

845
00:35:18,680 --> 00:35:18,940
Right, right, right.

846
00:35:18,940 --> 00:35:19,640
It's all of these things.

847
00:35:19,660 --> 00:35:20,960
It's all the day two stuff, as we would say.

848
00:35:21,020 --> 00:35:21,380
Exactly.

849
00:35:21,540 --> 00:35:23,140
Knowing how to scale up and scale down.

850
00:35:23,160 --> 00:35:23,420
Right.

851
00:35:23,660 --> 00:35:28,120
And realizing that today's problem is best solved in this way.

852
00:35:28,300 --> 00:35:30,220
Tomorrow's problems are best solved using that way.

853
00:35:30,280 --> 00:35:31,620
But we still got to talk to each other.

854
00:35:32,040 --> 00:35:32,160
Yeah.

855
00:35:32,160 --> 00:35:40,180
How do we do that in a way that's consistent across all of that so people aren't learning seven or eight different abstraction layers trying to figure out how do I make this all talk to each other?

856
00:35:40,220 --> 00:35:41,020
How do I make it all work?

857
00:35:41,120 --> 00:35:41,380
Right.

858
00:35:41,540 --> 00:35:46,560
Like, well, let's give you a consistent experience and give you a runtime that can handle all of those things.

859
00:35:46,640 --> 00:35:46,840
Yeah.

860
00:35:46,840 --> 00:35:49,900
As opposed to having to manage three or four or five different runtimes.

861
00:35:50,180 --> 00:35:51,120
And, oh, guess what?

862
00:35:51,140 --> 00:35:58,860
It's just like our instance we talked about at the beginning of it's a ticket from one airline, but it turns out it's actually three separate airlines that can't talk to one another.

863
00:35:58,960 --> 00:35:59,620
Yeah, yeah, yeah, yeah.

864
00:35:59,620 --> 00:36:01,680
You know, I had, and then I'll wrap up here.

865
00:36:01,720 --> 00:36:06,020
I had the weirdest, what do they call it, cross-code share thing recently.

866
00:36:06,100 --> 00:36:06,260
Yeah.

867
00:36:06,540 --> 00:36:09,820
Is I booked on China Eastern.

868
00:36:10,120 --> 00:36:10,360
Okay.

869
00:36:10,420 --> 00:36:12,880
Which was actually Korea Air.

870
00:36:13,020 --> 00:36:13,320
Oh, yeah.

871
00:36:13,320 --> 00:36:16,020
And then I got KLM credit because I used my KLM thing.

872
00:36:16,120 --> 00:36:17,820
But the weirdness was that China.

873
00:36:17,820 --> 00:36:18,080
All Sky Team.

874
00:36:18,520 --> 00:36:19,200
Well, no, no.

875
00:36:19,360 --> 00:36:20,420
Maybe it wasn't China Eastern.

876
00:36:20,520 --> 00:36:21,960
There was one that was not Sky Team.

877
00:36:22,120 --> 00:36:22,360
Okay.

878
00:36:22,540 --> 00:36:28,920
The first, some Chinese airline was not Sky Team, but they code shared to this other one so I could kind of like launder a non-Sky team.

879
00:36:29,180 --> 00:36:29,480
Nice.

880
00:36:29,720 --> 00:36:35,960
Which was like, back to having a programming background, I was like, wow, that's a crazy thing.

881
00:36:36,140 --> 00:36:37,560
I don't know how someone let that in.

882
00:36:37,680 --> 00:36:38,440
Right, right.

883
00:36:38,560 --> 00:36:39,620
Somebody shouldn't have, probably.

884
00:36:40,300 --> 00:36:41,120
Kudos to you.

885
00:36:41,300 --> 00:36:48,480
But, so anyways, we should have a part two, maybe next year as a cliffhanger for this season of Pivotal Conversations.

886
00:36:50,280 --> 00:36:53,340
But, so this is a good explanation of Knative.

887
00:36:53,740 --> 00:36:56,360
Now, I want to pull back to a broad scheme of things.

888
00:36:56,540 --> 00:37:01,820
So, in the serverless world, it started off just like Lambda or Lambda or however I want to mispronounce it.

889
00:37:01,960 --> 00:37:02,640
We've got functions.

890
00:37:02,960 --> 00:37:03,460
Got functions.

891
00:37:03,480 --> 00:37:04,520
We've got functions in the sky.

892
00:37:04,560 --> 00:37:05,480
Functions as a service.

893
00:37:05,980 --> 00:37:13,660
And then, and then somehow, and maybe this is all in my head, I think serverless kind of started to mean like all of how we would do programming in a cloud native world.

894
00:37:13,660 --> 00:37:24,740
But, what you've talked about has basically brought it down to more or less like erratically called short-lived functions that just get called.

895
00:37:24,900 --> 00:37:28,220
Instead of basically like serverless as everything.

896
00:37:28,500 --> 00:37:28,580
Right.

897
00:37:28,740 --> 00:37:28,900
Right.

898
00:37:29,020 --> 00:37:36,560
And so, is that, like, would you say how you have characterized it is the way people think about serverless?

899
00:37:36,700 --> 00:37:40,220
Or do you use the word function a lot because you're like serverless is meaningless.

900
00:37:40,220 --> 00:37:43,040
So, I want to be very clear that I'm talking about functions.

901
00:37:43,240 --> 00:37:45,540
Some people definitely use the terms interchangeably.

902
00:37:45,700 --> 00:37:45,880
Yeah.

903
00:37:46,000 --> 00:37:46,840
For right or wrong.

904
00:37:47,340 --> 00:37:50,440
Some people would say functions are a subset of serverless.

905
00:37:50,800 --> 00:37:51,020
Right.

906
00:37:51,020 --> 00:37:51,360
Which is confusing.

907
00:37:51,360 --> 00:37:51,980
Probably more accurate.

908
00:37:52,360 --> 00:37:53,440
But what does that even mean?

909
00:37:53,800 --> 00:37:58,000
So, you could potentially run other types of workloads in a quote-unquote serverless environment.

910
00:37:58,500 --> 00:37:58,640
Yeah.

911
00:37:58,640 --> 00:38:05,120
I think serverless has almost started to become abused and almost everybody has their own sort of flavor of what it means.

912
00:38:05,360 --> 00:38:08,040
And we've probably used it in too many ways at this point.

913
00:38:08,140 --> 00:38:11,600
And then it's also not, it doesn't purely have to be an event-driven architecture.

914
00:38:11,880 --> 00:38:12,320
Not necessarily.

915
00:38:12,340 --> 00:38:13,760
It doesn't have to only be event-driven.

916
00:38:13,760 --> 00:38:13,900
Correct.

917
00:38:13,900 --> 00:38:18,700
You could have, pardon my old fogey terms, you could have, like, those blocking calls.

918
00:38:19,000 --> 00:38:19,060
Right.

919
00:38:19,180 --> 00:38:21,260
Like, there's no need to, it doesn't have to be asynchronous.

920
00:38:21,260 --> 00:38:22,520
Some things have to be synchronous.

921
00:38:22,840 --> 00:38:23,640
Right, right, right, right.

922
00:38:23,740 --> 00:38:24,240
Right, right.

923
00:38:24,340 --> 00:38:24,520
Okay.

924
00:38:24,660 --> 00:38:32,520
So, maybe that was also the original confusion, at least for me, is like, at some point, I think serverless meant only an event-driven thing, right?

925
00:38:32,520 --> 00:38:37,560
That you would tell something to execute and it might send an event when it's done, so you've got to listen to that event.

926
00:38:37,780 --> 00:38:37,880
Sure.

927
00:38:38,040 --> 00:38:42,300
But nowadays, functional stuff can mean, like, it doesn't have to be, it can be synchronous or asynchronous.

928
00:38:42,560 --> 00:38:44,260
It can be all sorts of stuff, depending on what you need to do.

929
00:38:44,420 --> 00:38:44,560
Right.

930
00:38:44,660 --> 00:38:45,900
I mean, I think it's generally going to be asynchronous.

931
00:38:46,220 --> 00:38:46,860
That's probably the most important thing.

932
00:38:46,860 --> 00:38:47,140
Right, right.

933
00:38:47,200 --> 00:38:48,300
Well, that's a whole other discussion.

934
00:38:48,400 --> 00:38:48,880
It is, isn't it, though?

935
00:38:48,880 --> 00:38:49,680
The kids like that.

936
00:38:49,740 --> 00:38:50,120
That's right.

937
00:38:50,200 --> 00:38:50,680
All right, great.

938
00:38:51,100 --> 00:38:56,380
Well, we're going to go eat some lunch before, because have you noticed that the catering people here, they're just like, boom, they're on time.

939
00:38:56,620 --> 00:38:56,960
They're done.

940
00:38:57,080 --> 00:38:59,480
They pull it out, they said stop lunch at, and they're gone.

941
00:38:59,580 --> 00:38:59,900
Yeah, it's great.

942
00:39:00,000 --> 00:39:02,900
Well, where should people follow you if they want to learn more?

943
00:39:02,960 --> 00:39:06,920
Well, you can follow me on Twitter, N-T-S-C-H-U-T-T-A.

944
00:39:06,980 --> 00:39:07,700
Can I spell my name?

945
00:39:07,760 --> 00:39:08,100
I don't know.

946
00:39:08,240 --> 00:39:10,720
It's been a long, it's been a long month and a half.

947
00:39:11,440 --> 00:39:15,460
It's probably not confusing to long-term, long-time listeners.

948
00:39:16,260 --> 00:39:17,600
I screw up my own name.

949
00:39:17,800 --> 00:39:17,940
Do you?

950
00:39:17,940 --> 00:39:20,740
If you think about how Michael is spelled, it's very weird.

951
00:39:20,920 --> 00:39:22,440
There are, yeah, right.

952
00:39:22,540 --> 00:39:26,140
Like the A and the E and the L and the C-H, basically all except the M-I.

953
00:39:26,700 --> 00:39:28,860
M-I, and then after that, it's like a jumble of letters.

954
00:39:28,960 --> 00:39:30,220
I guess because it's like French, right?

955
00:39:30,320 --> 00:39:31,620
But I know how to spell your last name.

956
00:39:31,720 --> 00:39:32,520
Oh, yeah, well, that's easy.

957
00:39:32,580 --> 00:39:33,360
I got that one nailed.

958
00:39:33,440 --> 00:39:34,720
I've known that for a long time, Coté.

959
00:39:34,900 --> 00:39:40,740
Yeah, I should look up the origin, not the cultural, but the spelling origin of Michael, because it is a strange.

960
00:39:41,700 --> 00:39:43,240
Because there are different ways of doing it.

961
00:39:43,260 --> 00:39:44,140
Yeah, yeah, yeah, yeah.

962
00:39:44,340 --> 00:39:45,560
You can follow me on Twitter.

963
00:39:45,560 --> 00:39:47,800
You can also go to my website to see where I'm going to be at.

964
00:39:48,440 --> 00:39:50,000
There's going to be a lot of events in 2019.

965
00:39:50,200 --> 00:39:50,960
I know that for a fact.

966
00:39:51,540 --> 00:39:54,640
I've already looked at my tab, and starting in, like, I guess it's the middle of February.

967
00:39:54,720 --> 00:39:56,020
I'm off the road for about six weeks.

968
00:39:56,140 --> 00:39:56,520
That's right.

969
00:39:56,560 --> 00:39:57,180
Trying to heal up.

970
00:39:57,900 --> 00:40:00,000
I've got to get a new hip next year.

971
00:40:00,320 --> 00:40:00,740
Oh, good.

972
00:40:00,900 --> 00:40:01,860
I'm going to be bionic.

973
00:40:01,980 --> 00:40:05,220
The next time I see you in person, Coté, I will be bionic.

974
00:40:05,240 --> 00:40:06,800
You'll officially be a hipster program.

975
00:40:06,840 --> 00:40:08,120
I'll be a hipster, yes.

976
00:40:08,540 --> 00:40:10,260
Not a ninja anymore, but I'll be a hipster.

977
00:40:10,340 --> 00:40:10,780
That's right.

978
00:40:11,100 --> 00:40:13,380
Well, as always, this has been Pivotal Conversations.

979
00:40:13,540 --> 00:40:14,120
Thanks for listening.

980
00:40:14,220 --> 00:40:20,240
Now, I think by the time you hear this, we probably will have merged together the Pivotal Insights and Pivotal Conversations podcast.

981
00:40:20,460 --> 00:40:29,420
Now, if you're shocked that you're hearing double the good content, lots of things about how pivotal customers, what they've been up to, and things like that, that's from the old Pivotal Insights.

982
00:40:29,540 --> 00:40:39,600
And then if you're hearing about customers, and you're like, why am I hearing all this nerd stuff, then that's because we've merged the two podcasts together, like a bionic twin matrix.

983
00:40:39,600 --> 00:40:40,320
Sure, like it.

984
00:40:40,320 --> 00:40:40,820
I don't know.

985
00:40:41,480 --> 00:40:44,600
So with that, you know, we'll see you in 2019.

986
00:40:44,860 --> 00:40:45,400
Bye-bye.

987
00:40:45,680 --> 00:40:45,860
Cheers.
