1
00:00:00,000 --> 00:00:04,000
So, here we are, as I was joking earlier, live to tape in Paris.

2
00:00:04,180 --> 00:00:05,420
I don't know what part of Paris we're in.

3
00:00:05,480 --> 00:00:05,840
I don't know.

4
00:00:05,920 --> 00:00:06,600
A fancy part?

5
00:00:06,660 --> 00:00:09,060
You have some sort of undead sculptures guarding your hotel room.

6
00:00:09,060 --> 00:00:09,840
I do, I do.

7
00:00:09,940 --> 00:00:10,880
It keeps the spirits away.

8
00:00:10,960 --> 00:00:12,060
How would you describe those?

9
00:00:13,100 --> 00:00:15,040
You don't want to see them in the middle of the night, I guess.

10
00:00:15,240 --> 00:00:17,440
You know, they would haunt your dreams.

11
00:00:17,540 --> 00:00:17,780
Uh-huh.

12
00:00:17,940 --> 00:00:19,560
You know, maybe they'd be parts of your nightmare.

13
00:00:19,800 --> 00:00:20,200
I'm not sure.

14
00:00:20,320 --> 00:00:21,640
They look like they're unraveling.

15
00:00:21,860 --> 00:00:25,400
Well, one of the things that I realized on whatever date we got here,

16
00:00:26,260 --> 00:00:27,960
the placemat changes out front.

17
00:00:28,600 --> 00:00:29,640
Oh, you mean the mat?

18
00:00:29,640 --> 00:00:31,040
Yes, yes, the mat.

19
00:00:31,480 --> 00:00:32,420
Where the undead eat?

20
00:00:32,500 --> 00:00:33,360
Where the undead eat.

21
00:00:33,480 --> 00:00:36,900
It tells you whether it's raining or not because, like, one mat will say rain

22
00:00:36,900 --> 00:00:37,660
and one mat doesn't.

23
00:00:37,740 --> 00:00:40,480
So, apparently, that's what you use for checking the weather is you just walk out

24
00:00:40,480 --> 00:00:43,600
of your hotel and if it says rain, then you should probably go grab your umbrella.

25
00:00:43,920 --> 00:00:44,240
Right.

26
00:00:44,700 --> 00:00:47,320
It's one of those things where you're shaving off seconds to optimize.

27
00:00:47,420 --> 00:00:47,740
Exactly.

28
00:00:47,740 --> 00:00:49,860
Right before you hit the actual outside.

29
00:00:49,960 --> 00:00:50,120
Right, right.

30
00:00:50,120 --> 00:00:50,840
There's your placemat.

31
00:00:51,100 --> 00:00:53,000
But, see, then, as a software guy, my thought goes to, well,

32
00:00:53,000 --> 00:00:55,820
how do they decide when to put out the rain mat and when not to?

33
00:00:56,000 --> 00:00:57,240
You know, I mean, what's the percentage?

34
00:00:57,580 --> 00:00:59,280
You know, what does the weather guy have to tell them?

35
00:00:59,680 --> 00:00:59,880
Right.

36
00:00:59,900 --> 00:01:00,540
To where they're comfortable.

37
00:01:00,620 --> 00:01:02,280
You have to put out the rain mat versus snow.

38
00:01:02,400 --> 00:01:03,740
They could have an internet of mats.

39
00:01:04,080 --> 00:01:04,300
Maybe.

40
00:01:04,700 --> 00:01:05,700
It's on the internet.

41
00:01:05,940 --> 00:01:07,560
Wouldn't it be nice if they just swap them out?

42
00:01:07,880 --> 00:01:08,140
Yes.

43
00:01:08,140 --> 00:01:10,020
And I don't know how frequently they swap them out either.

44
00:01:10,180 --> 00:01:10,980
Well, you should ask.

45
00:01:11,120 --> 00:01:12,700
I'm sure they'd go to the concierge.

46
00:01:12,700 --> 00:01:16,100
Believe me, we could go dial at zero or whatever and they'd answer all sorts of questions.

47
00:01:16,120 --> 00:01:17,880
I have a lot of questions about your match.

48
00:01:18,200 --> 00:01:20,500
And the undead that guard the hotel entrance.

49
00:01:21,460 --> 00:01:21,820
Exactly.

50
00:01:22,040 --> 00:01:24,780
Did you notice the Apple Store is literally, like, right next to us here?

51
00:01:24,780 --> 00:01:25,080
No.

52
00:01:25,080 --> 00:01:25,900
We're in the same building as the Apple Store.

53
00:01:25,900 --> 00:01:27,280
I'll do some Apple Store tourism.

54
00:01:27,280 --> 00:01:27,880
We'll have to go to the Apple Store.

55
00:01:27,920 --> 00:01:28,220
Yeah.

56
00:01:28,560 --> 00:01:29,720
Well, why don't you introduce yourself?

57
00:01:29,920 --> 00:01:30,600
That'd be a good idea.

58
00:01:30,680 --> 00:01:31,620
Hi, my name is Nate Schuder.

59
00:01:31,820 --> 00:01:37,820
I'm an architect, advocate kind of guy here at Pivotal and do all sorts of random things in the cloud space and architecture space.

60
00:01:38,080 --> 00:01:44,560
So we've been in several sessions, including today, where you talked about, like, 12-factor development.

61
00:01:44,620 --> 00:01:44,780
I did.

62
00:01:44,840 --> 00:01:45,260
And things like that.

63
00:01:45,480 --> 00:01:48,540
And I've listened to your talk a few times and I still have questions.

64
00:01:48,680 --> 00:01:48,960
Good.

65
00:01:49,080 --> 00:01:50,700
Not because of your lack of information.

66
00:01:50,700 --> 00:01:50,980
Hang on.

67
00:01:51,040 --> 00:01:51,180
Wait.

68
00:01:51,280 --> 00:01:51,440
Wait.

69
00:01:51,500 --> 00:01:52,220
Maybe that's not good.

70
00:01:52,460 --> 00:01:53,740
I'm not sure if I was there or not.

71
00:01:53,740 --> 00:02:03,840
But, you know, I think more specifically, like, listening to your talk made me realize, like, I always have a lot of questions about 12-factor stuff.

72
00:02:04,000 --> 00:02:05,800
And so, like, I don't know.

73
00:02:05,880 --> 00:02:07,200
I'll give you my version of the history.

74
00:02:07,620 --> 00:02:12,740
And I need to go look this up because I seem to remember when I was an analyst talking with Heroku at some point.

75
00:02:13,240 --> 00:02:19,920
There's two things I remember people went over with me that sounded like just a bunch of nonsense at first.

76
00:02:19,920 --> 00:02:25,120
One of them is I remember at some point someone was talking about, like, reactive programming or something.

77
00:02:25,360 --> 00:02:25,460
Sure.

78
00:02:25,580 --> 00:02:26,820
And it wasn't reactive.

79
00:02:26,880 --> 00:02:31,660
What was, like, the thing before reactive with event-driven stuff and event sourcing and CQRS?

80
00:02:31,660 --> 00:02:32,380
Something like that.

81
00:02:32,440 --> 00:02:33,380
I don't even remember what it was.

82
00:02:33,420 --> 00:02:38,600
But it just sounded like a whole bunch of, like, that's a solution for a problem that, like, five people have.

83
00:02:38,700 --> 00:02:38,820
Right.

84
00:02:39,140 --> 00:02:43,380
And then the other one, I think at some point someone from Heroku went over 12-factor stuff with me.

85
00:02:43,820 --> 00:02:44,920
And this was a long time ago.

86
00:02:44,920 --> 00:02:49,840
And at the time, it seemed sort of, like, not applicable to anything except Heroku.

87
00:02:50,940 --> 00:02:56,520
And so it's, from that perspective, it's kind of amazing that it's, well, this is sort of the first thing.

88
00:02:56,600 --> 00:03:04,920
It's, like, evolved to be, like, here's a prescription of if you are, I guess, like, doing containerized applications.

89
00:03:05,580 --> 00:03:07,020
Although I don't think it ever says containers.

90
00:03:07,500 --> 00:03:07,620
No.

91
00:03:07,740 --> 00:03:09,280
But, of course, that's what Heroku was.

92
00:03:09,500 --> 00:03:09,640
Sure.

93
00:03:09,760 --> 00:03:11,780
So that's kind of how it came about.

94
00:03:11,920 --> 00:03:12,020
Yeah.

95
00:03:12,120 --> 00:03:19,720
But it's, like, if you're doing things, basically, the way I've sorted it in my mind is, like, these are, like, 12 thing comments we have.

96
00:03:19,840 --> 00:03:23,780
If you're doing, you're deploying your application in immutable containers.

97
00:03:24,740 --> 00:03:27,820
And you basically want to do stateless things.

98
00:03:28,080 --> 00:03:30,760
And you also want to do continuous integration and delivery.

99
00:03:31,080 --> 00:03:36,560
And then there's some, and then there's another cluster of stuff that kind of falls out, which is, I think they say, externalized configuration.

100
00:03:37,120 --> 00:03:44,600
But it's sort of, like, instead of manually configuring these things, what you should do is, like, make it so the configuration is injected to them.

101
00:03:44,600 --> 00:03:44,720
Right.

102
00:03:44,920 --> 00:03:52,360
And, you know, I think conveniently when this came out, this just coincidentally happened to be that you had to write applications for Heroku.

103
00:03:52,480 --> 00:03:52,720
Right.

104
00:03:52,980 --> 00:03:53,140
Right.

105
00:03:53,460 --> 00:03:55,200
But it's evolved far since then.

106
00:03:55,200 --> 00:04:01,240
And so, like, I mean, how do you think about how you kind of chunk out these 12-factor things?

107
00:04:01,580 --> 00:04:06,880
Because I don't feel, I mean, if you go to, like, I'll just keep talking once I ask a question here.

108
00:04:07,180 --> 00:04:13,040
But, like, I feel like if you go to the 12-factor site, you read it, and you're still kind of left wondering, like, but why?

109
00:04:13,360 --> 00:04:13,580
Sure.

110
00:04:13,680 --> 00:04:13,860
Right?

111
00:04:13,860 --> 00:04:17,300
Like, why would I do all of this?

112
00:04:17,300 --> 00:04:23,520
And I think the, I haven't read it in complete in a while, but I think the only thing that they say is, like, well, then it can scale.

113
00:04:24,540 --> 00:04:29,880
Well, so you can make an argument that a lot of the things that are in the 12-factor are just good design principles.

114
00:04:30,180 --> 00:04:30,620
Yeah, yeah.

115
00:04:30,620 --> 00:04:31,560
Like there's loose coupling.

116
00:04:31,740 --> 00:04:32,360
Yes, yeah.

117
00:04:32,460 --> 00:04:36,280
I mean, this has been something that's been kind of, I guess, coming into form in my brain.

118
00:04:36,380 --> 00:04:40,880
But the longer I do this, the more I believe that, you know, I don't quite know the best way to phrase it.

119
00:04:40,880 --> 00:04:46,180
So I'm just going to call it, like, the zeroth law of software engineering, which is, like, high cohesion and low coupling.

120
00:04:46,620 --> 00:04:51,900
You know, so many of the things we're trying to do are just fundamentally, how do we get high cohesion and low coupling?

121
00:04:52,140 --> 00:04:56,900
I mean, I would argue that microservices are just high cohesion and low coupling brought to SOA.

122
00:04:57,260 --> 00:05:00,020
You know, so how do we do SOA in a high cohesion, low coupling kind of way?

123
00:05:00,620 --> 00:05:05,640
You know, so a lot of the stuff in the 12 factors, you could say, is just some fundamentally good design decisions.

124
00:05:05,640 --> 00:05:10,500
You know, yeah, you should have your code in a version control system, probably Git.

125
00:05:11,140 --> 00:05:15,840
And, you know, you shouldn't be copying code from one place to another as a way of sharing it.

126
00:05:15,860 --> 00:05:17,100
You should export it into a library.

127
00:05:17,240 --> 00:05:19,480
I mean, these are just good ideas in general terms.

128
00:05:19,860 --> 00:05:21,160
So you should have modularization.

129
00:05:21,320 --> 00:05:22,140
Imagine that, right?

130
00:05:22,180 --> 00:05:22,560
Yeah, yeah.

131
00:05:22,560 --> 00:05:23,580
Who could have predicted that?

132
00:05:23,800 --> 00:05:29,160
You know, I look at the legacy apps that I've tried to move to the cloud.

133
00:05:29,420 --> 00:05:40,820
And, you know, as we talked about today, I mean, that you're going to violate some of those 12 factors because we built these applications before the cloud existed and before we knew that's how we should design applications.

134
00:05:41,000 --> 00:05:41,460
Right, right.

135
00:05:41,520 --> 00:05:43,160
And so, like, what would be examples of those?

136
00:05:43,360 --> 00:05:54,460
Well, so you take these applications that we wrote five, ten years ago, and one of the violations I see all the time is long startup because we would go out to our database and we would cache a whole bunch of stuff into memory.

137
00:05:54,680 --> 00:06:01,620
You know, we'd go get states and countries and provinces and, you know, business codes and all this other stuff that we knew wasn't really going to change very often.

138
00:06:02,180 --> 00:06:05,340
So we did load all that into memory instead of using a distributed cache.

139
00:06:05,400 --> 00:06:08,980
And that was fine when all we did was reboot our apps, you know, maybe nightly.

140
00:06:09,300 --> 00:06:09,700
Yeah, yeah.

141
00:06:09,740 --> 00:06:10,200
Maybe weekly.

142
00:06:10,280 --> 00:06:10,620
Big deal.

143
00:06:11,440 --> 00:06:23,340
Well, you then go to a cloud environment where these things are going to be cattle and they're going to be disposable and an instance is going to go away and come back because maybe it got sick or maybe I need ten more instances to handle this big rush of traffic I got.

144
00:06:23,760 --> 00:06:27,840
And that three, four, five, ten minute startup time causes me issues.

145
00:06:27,940 --> 00:06:28,980
I can't scale that up.

146
00:06:29,040 --> 00:06:35,740
I can't bring those new instances online because if that health check hasn't completed, the router says, oh, well, you must still be sick.

147
00:06:35,800 --> 00:06:38,040
I'm going to spin up another instance, another instance, another instance.

148
00:06:38,040 --> 00:06:40,100
And we kind of lose that whole value.

149
00:06:40,280 --> 00:06:52,920
I guess maybe that's the – to cut you off to the thing I'm always fishing for with the 12 factors is like it doesn't – it's almost like you have to reverse engineer what the operating model is from it, right?

150
00:06:52,920 --> 00:07:09,560
Whereas, as you were describing, everything you said, at least in my mind, comes from an operating model of I am going to be running containers just willy-nilly, I being a platform or the run – I don't know what else to call it, the run space.

151
00:07:09,560 --> 00:07:10,560
The run time.

152
00:07:10,560 --> 00:07:16,200
And, like, my job as the run time is going to be, like, I might kill it or I might bring it up.

153
00:07:16,380 --> 00:07:19,800
And the way that I scale it, like, I always think it's a trick of scaling.

154
00:07:19,900 --> 00:07:22,620
The way that I scale it is state is someone else's problem.

155
00:07:22,800 --> 00:07:22,900
Sure.

156
00:07:23,040 --> 00:07:28,320
And then I just have these, like, tiny stateless things that I can just in parallel scale up.

157
00:07:28,760 --> 00:07:31,940
And hopefully the state people over there have figured out what to do.

158
00:07:32,620 --> 00:07:32,780
Yeah.

159
00:07:32,980 --> 00:07:42,160
And so, like – but, you know, I feel like over the years – well, not over the years, but the 12-factor stuff never begins with – and necessarily so because it would be really boring.

160
00:07:42,620 --> 00:07:52,400
But just to say, like, here is the run time paradigm that you're operating under because so many of the things in it, as you were kind of going over before I cut you off, sort of makes sense, right?

161
00:07:52,440 --> 00:07:57,800
Like, if I'm going to be bringing containers up and down, I can't have a two-minute startup time.

162
00:07:58,400 --> 00:08:05,160
And so, therefore, because I have this type of run time environment, I need you to do your applications in this way.

163
00:08:05,160 --> 00:08:18,040
And I guess the – it's not like a beef, but the cognitive, like, grading I always have in my head is – I feel like it's easy to think of the 12-factors things as what you say, causative.

164
00:08:18,500 --> 00:08:22,740
Like, if you write your applications in this way, good things will happen.

165
00:08:22,840 --> 00:08:26,300
Whereas, like, you've got to bring the good thing run time environment first.

166
00:08:26,440 --> 00:08:28,820
Well, and reflect on where the 12-factors came from.

167
00:08:28,980 --> 00:08:29,340
Yeah, yeah.

168
00:08:29,380 --> 00:08:32,600
The characteristics that were shared by successful apps that were running on a broker.

169
00:08:32,840 --> 00:08:33,240
Exactly.

170
00:08:33,240 --> 00:08:37,500
You know, so it's a little bit of, I guess, maybe a cart and a horse kind of a problem, right?

171
00:08:37,580 --> 00:08:41,880
You know, so it's like if you're going to design an app for this platform, here are some of the things that you should take –

172
00:08:41,880 --> 00:08:42,440
Right, right, right.

173
00:08:42,440 --> 00:08:45,860
You know, if you're not going to design for that platform, well, then you could ignore some of this.

174
00:08:46,340 --> 00:08:48,480
Again, I would say a lot of it is just good design principles.

175
00:08:48,580 --> 00:08:49,060
Yeah, yeah, yeah.

176
00:08:49,060 --> 00:08:53,840
You know, I mean, maybe you don't have to worry about the long startup time if you're not in one of these kind of cloudy environments.

177
00:08:54,080 --> 00:08:56,460
But I'd be curious to know why you're not.

178
00:08:56,860 --> 00:08:57,240
Yeah, yeah.

179
00:08:57,840 --> 00:08:59,200
Yeah, I was – I mean, you're right.

180
00:08:59,280 --> 00:09:01,320
Like, I was separating them out into, like, three buckets.

181
00:09:01,320 --> 00:09:05,180
But there's an initial bucket of just, like, how you should write good software.

182
00:09:05,300 --> 00:09:05,700
Right, right.

183
00:09:05,740 --> 00:09:11,880
And then it seems like the next bucket is sort of, like, other ways you should write software, right?

184
00:09:11,920 --> 00:09:21,740
Like, like, one of them is, like, you know, you should have one process per – you know, you should focus on a small process instead of, like, one giant multi-process thing.

185
00:09:21,840 --> 00:09:24,340
Or, like, as I think we're supposed to say, the monolith, right?

186
00:09:24,720 --> 00:09:25,380
Or whatever.

187
00:09:25,560 --> 00:09:30,900
And then there's, like, there's, like, the other group that are, like, what would you call it?

188
00:09:30,900 --> 00:09:36,400
Like, deploying, like, you should do continuous integration and, like, you should – you know, things like that.

189
00:09:36,480 --> 00:09:38,620
And then the final cluster is pretty small.

190
00:09:38,740 --> 00:09:41,340
It's basically, like, logs.

191
00:09:41,600 --> 00:09:42,980
It's like, sure, we all agree on logs.

192
00:09:42,980 --> 00:09:43,760
We got to do logging.

193
00:09:43,980 --> 00:09:45,820
And then I guess there's, like –

194
00:09:45,820 --> 00:09:46,720
How we handle that in the cloud.

195
00:09:46,720 --> 00:09:53,440
And then this last one is, like, a – it sort of makes sense, but it's an oddly specific one, which is – what is it?

196
00:09:53,520 --> 00:09:55,280
Like, your admin thing should be a process.

197
00:09:55,620 --> 00:09:55,820
Yeah, yeah.

198
00:09:55,900 --> 00:09:57,120
Like, it's just sort of, like –

199
00:09:57,120 --> 00:09:59,620
That one always kind of struck me as, like, they just – they're, like, we're at 11.

200
00:09:59,700 --> 00:10:00,460
We can't have 11.

201
00:10:00,520 --> 00:10:01,860
We can't have the 11 factors.

202
00:10:01,860 --> 00:10:03,580
So let's throw another one on there just for fun.

203
00:10:03,580 --> 00:10:07,320
Yeah, which, I mean, that's another one where, like, I assume what that means.

204
00:10:07,400 --> 00:10:08,720
I mean, I should have the thing in front of me.

205
00:10:08,720 --> 00:10:20,440
It's, like, it's almost – instead of, like, logging into a box to run shell scripts, you know, not that a box exists, you should – these scripts should be their own containers,

206
00:10:20,780 --> 00:10:28,580
these jobs that execute to go query the system and look at things, which, again, is, like, sounds cool, but that's pretty specific.

207
00:10:29,020 --> 00:10:29,220
Right.

208
00:10:29,300 --> 00:10:30,240
Yeah, I agree with you.

209
00:10:30,300 --> 00:10:31,800
That one is oddly specific.

210
00:10:32,100 --> 00:10:34,680
You know, I don't know the history on why that one popped up.

211
00:10:34,680 --> 00:10:35,240
Yeah, yeah, yeah.

212
00:10:35,240 --> 00:10:37,680
You know, so it is a little bit of a head-scratcher.

213
00:10:38,520 --> 00:10:44,460
You know, but, again, I mean, I think where we run into some interesting challenges is if I've got this legacy application,

214
00:10:44,720 --> 00:10:50,200
which will violate some number of these factors, you know, how many do we need to fix to move into the cloud?

215
00:10:50,340 --> 00:10:52,900
And, you know, I've had some interesting debates with folks over that.

216
00:10:53,100 --> 00:10:53,280
Right.

217
00:10:53,280 --> 00:10:59,580
I had one architect tell me that, well, you know, if an application doesn't need all 12 factors, we shouldn't even bother trying to put it in the cloud.

218
00:10:59,580 --> 00:11:08,760
And, like, well, that's pretty extreme, you know, because the odds of us taking a legacy application and essentially rewriting it to be 12 factors compliant.

219
00:11:08,920 --> 00:11:12,120
I mean, that really isn't a good business return on something like that.

220
00:11:12,220 --> 00:11:16,120
And so it becomes more that pragmatic, well, how far on that continuum do we need to get?

221
00:11:16,560 --> 00:11:17,160
Yeah, yeah, yeah.

222
00:11:17,160 --> 00:11:22,860
And what gives us the right mix of business value to effort to say that that's the logical ending point?

223
00:11:23,120 --> 00:11:23,560
Yeah, yeah.

224
00:11:23,680 --> 00:11:26,200
I mean, tell me if you found this to be the case.

225
00:11:26,260 --> 00:11:30,720
But it seems like you could equally kind of cluster them out about, like, these are the most important ones.

226
00:11:30,720 --> 00:11:31,140
Oh, absolutely.

227
00:11:31,560 --> 00:11:32,480
So do these three.

228
00:11:32,740 --> 00:11:32,900
Yeah.

229
00:11:33,020 --> 00:11:34,920
And then it's also important to do these other ones.

230
00:11:35,120 --> 00:11:41,760
And then a further division is, like, when I look at them, it seems like there's sort of, like, process-oriented ones.

231
00:11:41,920 --> 00:11:43,780
And then there's, like, very technical things, right?

232
00:11:43,840 --> 00:11:49,220
Like, your loose coupling is very, well, technical-oriented, right?

233
00:11:49,520 --> 00:11:52,860
Versus, like, what's one of the process-oriented ones?

234
00:11:52,860 --> 00:11:58,040
Like, I mean, even the idea of, like, having trunk as where you check something in.

235
00:11:58,340 --> 00:12:00,960
Like, it's a tool thing, but it's also a very process-oriented stuff.

236
00:12:01,120 --> 00:12:07,520
And so I would imagine when you're thinking about legacy stuff, to some extent, the technical things are more important.

237
00:12:07,860 --> 00:12:08,000
Right.

238
00:12:08,000 --> 00:12:13,880
Because, like, if you don't get your legacy chunk set up technically correct, it, like, just won't run.

239
00:12:14,580 --> 00:12:15,200
Yeah, you're absolutely right.

240
00:12:15,300 --> 00:12:17,360
I mean, well, like, the long startup time is a perfect example.

241
00:12:17,400 --> 00:12:17,900
Yeah, yeah, yeah.

242
00:12:17,900 --> 00:12:26,580
If you've got a five-minute startup time and we can't get that down to a few seconds, 10 seconds, 15 seconds, whatever is reasonable within, you know, how it's configured.

243
00:12:26,980 --> 00:12:27,160
Yeah.

244
00:12:27,780 --> 00:12:36,160
You really lose that ability to self-heal and auto-scale, and that kind of diminishes a huge advantage of the cloud, at least from my point of view.

245
00:12:36,400 --> 00:12:36,560
Yeah.

246
00:12:36,620 --> 00:12:37,980
You know, so better get that one right.

247
00:12:38,240 --> 00:12:47,240
You better switch the logging over or else you're not going to have any logs because that instance you're writing out to that file system, it might get blown away later today.

248
00:12:47,620 --> 00:12:47,800
Yeah.

249
00:12:47,800 --> 00:12:50,680
So you're not going to be able to go look at your logs because they're gone.

250
00:12:51,380 --> 00:13:00,600
Now, the interesting thing to me is a lot of these things actually end up being better for us as developers because, like, I get this big stream of logs and I get way more powerful tools to actually go interact with them.

251
00:13:00,700 --> 00:13:09,160
And it's like, hey, this is a lot better than me trying to use a text editor and do a little, you know, command F to go try to find some random string and 10,000 lines of log output.

252
00:13:09,500 --> 00:13:09,700
Yeah, yeah.

253
00:13:10,220 --> 00:13:15,900
How much time have you spent diagnosing stuff with logs just, you know, in your illustrious career?

254
00:13:16,680 --> 00:13:22,560
You know, it's probably more than a year, I would think, honestly, of my whole life.

255
00:13:22,560 --> 00:13:24,080
Yeah, just total clock time.

256
00:13:24,080 --> 00:13:29,660
I'm sure because it just – you spend so much time staring at logs trying to figure out what happened and what went wrong.

257
00:13:29,860 --> 00:13:33,920
And the funny thing to me about logging is it's that hard thing to find the Goldilocks point.

258
00:13:34,540 --> 00:13:43,460
You know, you either underlog and there's not enough data or you typically overlog and there's just so much noise you can't find the signal and you can't find the thing that's really meaningful.

259
00:13:44,080 --> 00:13:53,240
And then you start doing really crazy things in your logs to try to make stuff stand out and then you get these weird anti-patterns where there's, well, if you put five asterisks in them, you know, or whatever, and people start looking for weird patterns.

260
00:13:53,500 --> 00:13:56,840
And, yeah, it makes me shudder a little bit.

261
00:13:56,840 --> 00:14:03,800
I have never thought about, like, the cumulative effort I've spent on logging, but it would not surprise me if it's more than a person.

262
00:14:03,940 --> 00:14:09,440
Yeah, well, I mean, I used to work on systems management software and then when I was an analyst, cover it.

263
00:14:09,440 --> 00:14:22,580
And it can be a really annoying field if you, like, study it for more than 10 years because the same sort of things – it's not that the same exact things repeat each other.

264
00:14:22,740 --> 00:14:30,100
It's that the tools you have, they're almost, like, in a line and then one tool gets really good and you kind of forget about it.

265
00:14:30,140 --> 00:14:33,160
And then you move on to doing the next tool and then eventually you forget about it.

266
00:14:33,300 --> 00:14:48,220
And each successive way – like, it's – I think basically what the ordering of the tools is always, like, like you were saying, you know, like, you go on to the – you get to the machine and you, like, pick up the metaphoric objects you're looking at and you look at them.

267
00:14:48,400 --> 00:14:48,520
Right.

268
00:14:48,520 --> 00:14:54,440
And you poke and prod them and, like, you know, you go look at this configuration file and go see what the process looks like and this stuff.

269
00:14:54,760 --> 00:14:57,380
And then you can kind of automate that where you're collecting it.

270
00:14:57,520 --> 00:14:57,680
Yep.

271
00:14:57,840 --> 00:15:01,960
And then at some point after that is, like, you got to have logs.

272
00:15:02,220 --> 00:15:02,540
Right.

273
00:15:02,620 --> 00:15:07,880
And you get – and then, of course, this part of logs is, like, now that I have all these logs, I need to make sense of them.

274
00:15:08,040 --> 00:15:08,260
Right.

275
00:15:08,280 --> 00:15:12,900
Not only logs from one unit of suffering, but, like, you know, I've got a cluster.

276
00:15:13,060 --> 00:15:14,780
I've got to collate them together.

277
00:15:15,120 --> 00:15:20,720
And then, like, the most advanced form of that is, like, and then I need to trace one single process through the logs.

278
00:15:21,000 --> 00:15:22,300
And so you go through that cycle.

279
00:15:22,300 --> 00:15:31,620
And then another characteristic of the systems management cycle is, like, so then the log people say that the pick-it-up-and-diagnostic people are complete idiots.

280
00:15:31,880 --> 00:15:31,980
Yeah.

281
00:15:32,120 --> 00:15:32,300
Right.

282
00:15:32,340 --> 00:15:36,700
You always are blaming the people before you, like, some sort of terrible revolutionary –

283
00:15:36,700 --> 00:15:37,900
We're good at finger-pointing, aren't we?

284
00:15:37,900 --> 00:15:38,340
Yeah, yeah.

285
00:15:38,600 --> 00:15:49,900
And then, of course, after that, you have the – I don't know what to call it, but you always arrive at this point where you're, like, we're going to use complex analytics and just, like, consume all this stuff.

286
00:15:50,180 --> 00:15:50,520
Yeah, yeah.

287
00:15:50,580 --> 00:15:52,580
And it'll just tell you what's going on.

288
00:15:52,600 --> 00:15:52,720
Right.

289
00:15:52,980 --> 00:15:56,500
And then, of course, those log people and those monitoring people are idiots.

290
00:15:56,780 --> 00:15:57,400
Yeah, yeah.

291
00:15:57,960 --> 00:16:00,580
And then, of course, no one ever solves the complex analytics thing.

292
00:16:00,580 --> 00:16:10,000
But anyways, I go over that whole little mini rant there to, like, looking at the 12-factor stuff, the idea of, like, having logs, right?

293
00:16:10,040 --> 00:16:13,240
There's an interesting, like – it's not that it's a tell.

294
00:16:13,380 --> 00:16:14,540
I sound like I'm being all cynical.

295
00:16:14,540 --> 00:16:19,000
But it's sort of, like, it's, like, the thing that's available, right?

296
00:16:19,100 --> 00:16:19,360
Like –

297
00:16:19,360 --> 00:16:20,100
It's the tool we've had.

298
00:16:20,100 --> 00:16:20,580
Yeah, yeah.

299
00:16:20,640 --> 00:16:29,040
Like, if you have immutable containers or however they call it, right, these little containers that are coming and going, you'll, like, never get a chance to log into them.

300
00:16:29,140 --> 00:16:29,240
No.

301
00:16:29,300 --> 00:16:30,040
And check them out.

302
00:16:30,500 --> 00:16:31,860
And then, like, you could –

303
00:16:31,860 --> 00:16:33,040
Or the one you needed is gone.

304
00:16:33,160 --> 00:16:33,540
Yeah, you could –

305
00:16:33,540 --> 00:16:34,960
The one that had the problem, well, we blew it away.

306
00:16:34,960 --> 00:16:35,320
Exactly.

307
00:16:35,420 --> 00:16:38,980
You could sort of monitor them, like, query them to know what their state is.

308
00:16:39,440 --> 00:16:42,280
But really, all you're ever going to have is the logs, like, afterwards.

309
00:16:42,400 --> 00:16:44,000
So, like, that's what you have to deal with.

310
00:16:44,060 --> 00:16:45,280
So, therefore, logs are important.

311
00:16:45,280 --> 00:16:57,980
And I guess the point, since it's 12-factor development or apps and not 12-factor sys-admitting, right, like, is that, hey, developers, you should be logging.

312
00:16:58,400 --> 00:16:59,100
Right, right.

313
00:16:59,200 --> 00:17:02,100
You should log a lot of what you're doing.

314
00:17:02,860 --> 00:17:03,220
I don't know.

315
00:17:03,460 --> 00:17:09,100
But all of these factors, like, I spend a lot – I spend too much time over the years trying to figure out, like, why that factor?

316
00:17:09,400 --> 00:17:09,520
Sure.

317
00:17:09,520 --> 00:17:11,140
And how does that map into the platform you have?

318
00:17:11,140 --> 00:17:14,720
Which then I'll come up with a question here instead of me just talking.

319
00:17:14,900 --> 00:17:23,660
But, like, how pervasive do you think the use of 12-factor stuff is in the types of runtime environments people use nowadays?

320
00:17:24,240 --> 00:17:24,960
It's a good question.

321
00:17:25,560 --> 00:17:33,200
I mean, I think anybody who is moving an app to the cloud has certainly done that evaluation on the app to see where it fits.

322
00:17:34,100 --> 00:17:39,460
I think the number of truly 12-factor app-compliant apps is pretty small.

323
00:17:39,460 --> 00:17:44,520
And, like, when you say the cloud there, like, what does that mean in that context?

324
00:17:44,820 --> 00:17:50,380
Well, whether that's on-premises, whether that's public cloud, you know, whether that's in a Docker container.

325
00:17:50,540 --> 00:17:51,300
I mean, I don't think it's –

326
00:17:51,300 --> 00:17:52,560
But just a containerized application.

327
00:17:52,560 --> 00:17:52,780
Right.

328
00:17:52,900 --> 00:17:55,220
Some kind of environment where you say, here's my code.

329
00:17:55,280 --> 00:17:56,040
Please run it for me.

330
00:17:56,180 --> 00:17:56,960
You know, do your thing.

331
00:17:57,560 --> 00:17:59,920
You know, I mean, I did this at my last job.

332
00:18:00,120 --> 00:18:05,920
We evaluated our 400-plus legacy applications to figure out whether they're good or not good candidates for the cloud.

333
00:18:06,100 --> 00:18:09,620
And so part of the metric we ran them through was 12-factor compliance.

334
00:18:10,180 --> 00:18:11,880
You know, they weren't the only things we looked for.

335
00:18:11,980 --> 00:18:15,940
There were a handful of other questions that we were asking, but that was the core of it.

336
00:18:16,320 --> 00:18:21,220
And then we used that to basically – we had kind of a scoring algorithm that came out of that.

337
00:18:21,300 --> 00:18:27,160
And then we essentially bucketed the application into this is a good candidate, this is a candidate, and this is a bad candidate.

338
00:18:27,340 --> 00:18:32,600
And then there was a sliver that fell off because they had some constraint that meant you can't go to the cloud.

339
00:18:32,760 --> 00:18:37,160
And was it just like a spreadsheet with 12 rows and then columns of –

340
00:18:37,160 --> 00:18:37,640
More or less.

341
00:18:37,660 --> 00:18:39,020
Or whichever way you oriented it.

342
00:18:39,020 --> 00:18:39,840
Let me put it this way.

343
00:18:39,900 --> 00:18:44,920
The big lesson I learned on that is if you're going to do data collection, you should just build an app to do the data collection.

344
00:18:45,160 --> 00:18:48,500
You should have an administrative process in its own process.

345
00:18:48,580 --> 00:18:48,940
Absolutely.

346
00:18:48,940 --> 00:18:51,120
You should build a little 12-factor app.

347
00:18:51,800 --> 00:18:57,680
Because what I discovered very quickly is like it was – the spreadsheet wasn't a bad way to get the data from people.

348
00:18:58,400 --> 00:19:06,980
The thing that made it challenging was when you had 400 or 500 or 600, however many we got back, you then have to make sense of it.

349
00:19:08,100 --> 00:19:17,440
And what I discovered very quickly is like senior director type people just assume they can ask random queries and then you can somehow just pull that out of the spreadsheet.

350
00:19:17,760 --> 00:19:21,620
And so I would literally get these questions like, can you tell me how many apps violate this factor?

351
00:19:22,520 --> 00:19:26,660
And if it was in a database, well, sure, select star from where – it's like that would be easy.

352
00:19:27,280 --> 00:19:28,780
But it's in an Excel spreadsheet.

353
00:19:29,480 --> 00:19:29,800
Yeah, yeah.

354
00:19:29,800 --> 00:19:37,260
Now, luckily for me, I had a friend, a guy who sat right next to me who heard me talking about this one day and he's like, well, I know how to manipulate Excel spreadsheets.

355
00:19:37,360 --> 00:19:37,640
Sure.

356
00:19:37,820 --> 00:19:40,320
And so he did a whole bunch of macro-y stuff for me.

357
00:19:40,320 --> 00:19:41,300
You just need a pivot table.

358
00:19:41,400 --> 00:19:44,180
He saved me years, frankly.

359
00:19:44,180 --> 00:19:48,020
I mean, the stuff he did for me was fantastic and it helped me kind of sort through these things.

360
00:19:48,580 --> 00:19:56,220
But the lesson I took out of that is you really want to get that into a database so that you can actually do some searching on it and do more interesting things with it.

361
00:19:56,420 --> 00:20:06,600
But the part that I found really fascinating out of that is we had done enough pilots that we kind of had a sense for how long it took to fix any of those 12 factors that you violated.

362
00:20:06,600 --> 00:20:09,660
And there was a collection that was pretty common, you know.

363
00:20:09,700 --> 00:20:13,800
I mean, we ran into the long startup time, of course, and the hard-coded configuration and stuff like that.

364
00:20:14,300 --> 00:20:20,980
And so we knew after doing four or five of these that that was probably about three days or that was probably a week.

365
00:20:21,080 --> 00:20:23,020
And so we could actually add that in.

366
00:20:23,040 --> 00:20:28,040
And I had that as part of the formula that spit out the other end and said, okay, well, based on the factors that you violate,

367
00:20:28,440 --> 00:20:33,960
it should take you about four weeks to lift and load into, you know, for us, it was PCF.

368
00:20:35,320 --> 00:20:36,820
You know, I mean, it was a rough swag.

369
00:20:36,920 --> 00:20:39,760
I mean, I was never going to say 100%, yeah, you're going to hit that number.

370
00:20:39,780 --> 00:20:41,320
But we at least had an order of magnitude.

371
00:20:42,180 --> 00:20:48,780
And so we could use that then to feed into the prioritization part of this to say, well, these apps are actually fairly easy to load.

372
00:20:49,000 --> 00:20:51,720
And then you kind of map that to the business value.

373
00:20:51,880 --> 00:20:56,780
You get out of the app and, you know, is it going to be with us for the next five years or is this going to be retired in six months?

374
00:20:57,040 --> 00:20:57,360
Yeah, yeah.

375
00:20:57,380 --> 00:21:00,720
So you could start to make some decisions about how do we prioritize all these apps.

376
00:21:00,720 --> 00:21:01,180
Where to expend your effort.

377
00:21:01,480 --> 00:21:01,800
Exactly.

378
00:21:02,180 --> 00:21:05,500
And that's where a lot of organizations are at.

379
00:21:05,600 --> 00:21:10,540
You know, you've got this huge legacy set of apps that are delivering business value for you.

380
00:21:10,640 --> 00:21:13,780
You want to try to modernize them, but not all apps are equal.

381
00:21:14,200 --> 00:21:14,480
Right, right.

382
00:21:14,480 --> 00:21:15,520
Some apps are more equal than others.

383
00:21:15,520 --> 00:21:21,020
So let's figure out what those are and then get that into a nice prioritized list and go forth and prosper.

384
00:21:21,220 --> 00:21:23,780
So how do you evaluate each of the factors?

385
00:21:24,720 --> 00:21:30,880
Well, so again, some of it was pretty easy because like logging, we knew they were all going to violate logging.

386
00:21:31,260 --> 00:21:32,600
They were all writing to a log file.

387
00:21:32,840 --> 00:21:33,560
So that was an easy one.

388
00:21:33,560 --> 00:21:35,860
Yeah, instead of standard out or whatever.

389
00:21:36,080 --> 00:21:41,460
The biggest challenge was realizing that like as an architect, I couldn't evaluate your application.

390
00:21:41,460 --> 00:21:44,000
I didn't have the subject matter expertise to do it.

391
00:21:44,720 --> 00:21:51,540
And so we had to identify for each of these 400 projects who was the subject matter expert.

392
00:21:52,140 --> 00:21:54,480
And that person then had to do the evaluation.

393
00:21:55,180 --> 00:22:01,000
Where it became challenging is some people were very diligent and they did very good work.

394
00:22:01,140 --> 00:22:03,020
And the data we got back was very good.

395
00:22:03,560 --> 00:22:11,760
We had other people who copied and pasted and really weren't paying attention and in a handful of instances left a whole bunch of stuff blank.

396
00:22:11,880 --> 00:22:15,060
And it's like, well, no, we really need you to go in.

397
00:22:15,400 --> 00:22:15,520
Yeah.

398
00:22:15,520 --> 00:22:17,800
We really need you to say, do you do this or not?

399
00:22:17,880 --> 00:22:22,540
And part of what we had actually done was break the 12 factors out to be a little more verbose.

400
00:22:22,740 --> 00:22:26,340
You know, so there were sort of individual bullet points within each factor in some cases.

401
00:22:26,520 --> 00:22:29,960
And so that kind of made it a little more nuanced, you know, in terms of how that was done.

402
00:22:29,960 --> 00:22:30,020
Yeah, yeah.

403
00:22:30,160 --> 00:22:31,020
Well, that sounds useful.

404
00:22:31,180 --> 00:22:32,900
It was kind of interesting to see how that was done.

405
00:22:32,940 --> 00:22:37,180
Now, we quibbled maybe a little bit about because that was our enterprise architect team had actually built that out.

406
00:22:37,700 --> 00:22:45,060
You know, so I don't necessarily know how they came to some of those conclusions about this is these five bullet points somehow are part of this one factor.

407
00:22:45,500 --> 00:22:52,060
But that gave us a little more nuance in terms of, all right, well, do you really violate that or not?

408
00:22:52,080 --> 00:22:54,420
And how much of that factor do you really violate?

409
00:22:54,640 --> 00:22:57,720
You know, which is why I don't think we had any apps that violated all 12.

410
00:22:57,720 --> 00:23:03,840
I mean, I can't honestly think of too many apps that would because you'd have to basically not be using version control,

411
00:23:04,020 --> 00:23:07,220
which I really want to believe is no longer controversial.

412
00:23:07,700 --> 00:23:13,980
Yeah, and back to what we were saying, there are several of those criteria that are less about the app and more about the process they're using around it.

413
00:23:14,180 --> 00:23:15,260
Sure. You know, or even just good design.

414
00:23:15,380 --> 00:23:21,060
I mean, some of it's like you're probably doing this almost by accident if you have some design chops, right?

415
00:23:21,080 --> 00:23:22,120
Yeah, yeah.

416
00:23:22,280 --> 00:23:23,880
So then what does that end up looking like?

417
00:23:23,880 --> 00:23:30,580
I mean, since you did so many of them, like, what's the feel you get for applications in aggregate?

418
00:23:30,980 --> 00:23:37,920
Like, are there usually, is it like only three of these factors are going to be followed mostly on average?

419
00:23:38,100 --> 00:23:41,700
Or like, is it kind of like, for the most part, everything's fine?

420
00:23:41,740 --> 00:23:43,860
Or like, where do the problems come up that you have to work on?

421
00:23:43,860 --> 00:23:48,060
Well, so you start to discover that there are certain factors that are violated almost universally.

422
00:23:48,400 --> 00:23:50,880
And there's other factors that are followed almost universally.

423
00:23:50,900 --> 00:23:51,620
Right, right, exactly.

424
00:23:51,740 --> 00:23:53,120
Yeah, which is really fascinating, you know.

425
00:23:53,220 --> 00:24:01,060
And it's not 100%, obviously, but, you know, we kind of knew there were going to be a few, like the logging and the long startup, you know, that most of our apps are going to violate it.

426
00:24:01,740 --> 00:24:05,900
Dependency management was another one that was very frequently seen because, you know, we didn't have to worry about it.

427
00:24:05,920 --> 00:24:06,880
You're just like, well, it works.

428
00:24:07,160 --> 00:24:07,520
Don't worry.

429
00:24:07,600 --> 00:24:08,580
It's probably on the class path.

430
00:24:08,620 --> 00:24:09,060
It's fine.

431
00:24:09,200 --> 00:24:09,640
Right, right.

432
00:24:10,040 --> 00:24:10,360
Nope.

433
00:24:10,460 --> 00:24:14,080
Now you need to tell me if you need that jar, that DLL, whatever it happens to be.

434
00:24:14,180 --> 00:24:16,260
We have to explicitly define that as part of our app.

435
00:24:16,260 --> 00:24:17,380
You need to manifest for it.

436
00:24:17,480 --> 00:24:17,800
Exactly.

437
00:24:17,960 --> 00:24:19,460
You've got to be a lot more precise.

438
00:24:20,420 --> 00:24:22,660
You know, so you start to see some of those patterns.

439
00:24:23,000 --> 00:24:28,420
And then, again, you can start to develop those rule of thumbs that say, well, it takes us about a week to fix that problem.

440
00:24:28,560 --> 00:24:30,480
It takes us about two weeks to fix that problem.

441
00:24:30,960 --> 00:24:33,600
And so now you can start to actually get some rough estimates.

442
00:24:33,600 --> 00:24:40,360
And that turned out to be really useful, you know, because you had some people who were like, oh, God, you know, it'll take forever to move this app to the cloud.

443
00:24:40,840 --> 00:24:43,800
And then you look at it, you're like, it's probably six weeks.

444
00:24:44,640 --> 00:24:45,840
You know, I think we can probably do it.

445
00:24:46,000 --> 00:24:46,300
Right, right.

446
00:24:46,300 --> 00:24:54,860
And so it really helped people kind of conceptualize that this wasn't a multi-year process, you know, that this was something that could be done reasonably quickly.

447
00:24:55,520 --> 00:24:57,340
And then now, okay, well, let's just prioritize it.

448
00:24:57,340 --> 00:25:01,840
And does that make sense within the overall life cycle of this application and where the business is going with that?

449
00:25:01,840 --> 00:25:03,880
And are we willing to make that investment or not?

450
00:25:04,160 --> 00:25:04,440
Yeah, yeah.

451
00:25:04,440 --> 00:25:05,060
If we're not, that's fine.

452
00:25:05,200 --> 00:25:12,140
But at least we're making it from at least somewhat of an educated place as opposed to just throwing darts at the wall and hoping it works out.

453
00:25:12,140 --> 00:25:12,560
Right, right.

454
00:25:12,660 --> 00:25:14,620
Or picking cool sounding projects.

455
00:25:14,700 --> 00:25:14,920
Sure.

456
00:25:14,980 --> 00:25:19,540
Or just putting a whole bunch of names in a bucket and pull it out and say, you know, may your odds forever be in your favor.

457
00:25:19,680 --> 00:25:22,580
So what was the original motivation to do all of that?

458
00:25:23,360 --> 00:25:29,880
Well, so a lot of it was just trying to figure out, like, as we're going to modernize this portfolio, what does that look like?

459
00:25:30,280 --> 00:25:36,340
And knowing that we had such a big portfolio, we needed to do this in a more methodical way.

460
00:25:36,700 --> 00:25:36,860
Yeah.

461
00:25:36,920 --> 00:25:40,500
You know, it couldn't just be let people randomly do whatever they wanted.

462
00:25:41,000 --> 00:25:49,360
We certainly, as a business driver, as a monetary driver, we're trying to get as many workloads there as possible because it was far cheaper environment for us to run in.

463
00:25:49,900 --> 00:25:55,260
You know, we had a situation where being able to shut down regions was going to save us significant money.

464
00:25:55,460 --> 00:25:57,620
And so that becomes a pretty powerful driver.

465
00:25:58,440 --> 00:26:04,840
So for us, it was really just trying to get our heads around, well, how much of our portfolio is it even reasonable to put in the cloud?

466
00:26:05,180 --> 00:26:07,980
You know, so that we could then have those conversations with our senior leadership.

467
00:26:08,640 --> 00:26:14,200
You know, so if they were getting this pressure to move all the apps, it's like, well, 10% can't be moved.

468
00:26:14,360 --> 00:26:16,580
Okay, so just understand that these guys have a dependency.

469
00:26:17,240 --> 00:26:23,180
Maybe they talk to the mainframe in some way we can't abstract away or they've got a third-party vendor thing that doesn't have a cloud option.

470
00:26:24,240 --> 00:26:25,380
You just, you can't move this.

471
00:26:25,440 --> 00:26:28,200
So it's sort of like an infrastructure optimization motivation.

472
00:26:28,540 --> 00:26:29,000
Yeah, absolutely.

473
00:26:29,920 --> 00:26:32,880
We're using lots of air quotes here, but we want to move to the cloud.

474
00:26:33,020 --> 00:26:33,320
Yes.

475
00:26:33,320 --> 00:26:41,700
Because it's going to allow us to spend less on infrastructure and hopefully also work at least as well, if not better.

476
00:26:42,400 --> 00:26:47,700
And so then you go through that exercise of like, well, what are the things we can migrate and things we can't migrate?

477
00:26:47,820 --> 00:26:48,860
Now, that makes a lot of sense.

478
00:26:49,180 --> 00:26:55,480
Well, and then again, it was feeding that prioritization, you know, because it's like to understand, you know, there's this kind of Goldilocks, right?

479
00:26:55,480 --> 00:27:01,060
Where it's like, if this application is easy to move and we get a lot of business value for moving it, put that at the head of the list.

480
00:27:01,500 --> 00:27:01,880
Yeah, yeah.

481
00:27:01,880 --> 00:27:08,640
If this application is really hard to move and we get very little business value out of it, put it at the bottom of the list.

482
00:27:08,900 --> 00:27:08,940
Yeah.

483
00:27:09,060 --> 00:27:12,940
You know, there's just no way you can move 400 apps in a month, in a year.

484
00:27:13,180 --> 00:27:16,020
So you have to have some sense of what that looks like.

485
00:27:16,060 --> 00:27:19,840
And that fundamentally fed into a roadmap, you know?

486
00:27:19,920 --> 00:27:20,120
Yeah.

487
00:27:20,200 --> 00:27:27,040
So over the course of the next, I think we did it over like three years, when do we want to slot these applications in and what's reasonable?

488
00:27:27,360 --> 00:27:27,760
Yeah, yeah.

489
00:27:27,760 --> 00:27:36,320
So you work with the architects, you work with the business partners to make sure that they're all on board with, okay, we're targeting your app on the cloud for this quarter of this year.

490
00:27:37,320 --> 00:27:38,620
Is everybody okay with that?

491
00:27:38,940 --> 00:27:39,180
Yeah.

492
00:27:39,180 --> 00:27:42,440
And then you kind of feed that back into the loop to say, all right, this is what we're thinking.

493
00:27:42,580 --> 00:27:46,640
And, you know, then the senior leadership can say, well, we want to accelerate that.

494
00:27:47,220 --> 00:27:48,560
What's it going to take to do that?

495
00:27:48,680 --> 00:27:50,240
Or, no, that seems about right.

496
00:27:50,260 --> 00:27:51,900
Or how come these apps are way out here?

497
00:27:52,300 --> 00:27:56,700
And then they could have some conversations with those teams to say, why can't you move up sooner?

498
00:27:56,700 --> 00:27:58,960
Or we think we'd get more value by moving you up sooner.

499
00:27:59,100 --> 00:28:03,100
And it's like, okay, well, you guys go have that conversation because that's what they told me.

500
00:28:03,440 --> 00:28:03,660
Yeah.

501
00:28:03,940 --> 00:28:12,180
So what do you call that stuff that's preventing the applications from being modernized, right?

502
00:28:12,180 --> 00:28:18,100
And I ask because it would be easy to call it, like, tech debt or something, like technical debt.

503
00:28:18,320 --> 00:28:22,060
But it's not really that because, like, it wasn't debt.

504
00:28:22,200 --> 00:28:24,260
It was just, like, that's how the applications were written.

505
00:28:24,560 --> 00:28:26,680
You couldn't have written an app 10 years ago.

506
00:28:26,700 --> 00:28:27,320
Yeah.

507
00:28:27,320 --> 00:28:29,920
With the cloud in mind because it wasn't an option.

508
00:28:30,180 --> 00:28:30,440
Yeah.

509
00:28:30,700 --> 00:28:33,580
I mean, I guess it's just, like, legacy characteristics or something.

510
00:28:33,580 --> 00:28:33,740
Sure.

511
00:28:33,780 --> 00:28:35,640
Or, like, how would you describe those?

512
00:28:36,180 --> 00:28:36,420
Yeah.

513
00:28:36,780 --> 00:28:37,880
I like that phrasing.

514
00:28:37,880 --> 00:28:45,660
Because, I mean, to your point, an application that you wrote 10, 15 years ago, by definition, you couldn't have written it with the 12 factors in mind.

515
00:28:45,980 --> 00:28:46,160
Yeah.

516
00:28:46,220 --> 00:28:47,080
You know, it's just not possible.

517
00:28:47,260 --> 00:28:53,520
So you can't beat yourself up over the fact that an application violates some of these things because they weren't constraints for us before.

518
00:28:53,800 --> 00:28:54,400
And they are now.

519
00:28:55,220 --> 00:28:57,820
So part of what I saw there was fear.

520
00:28:58,320 --> 00:29:01,040
It was people like, ooh, this is new and scary.

521
00:29:01,640 --> 00:29:04,340
I don't want to be the first person to try that.

522
00:29:04,660 --> 00:29:07,280
I want someone else to be the first person to try it.

523
00:29:07,740 --> 00:29:08,960
And some of that's reasonable.

524
00:29:09,360 --> 00:29:12,680
You know, it's – I think about this a lot, ironically enough, with food.

525
00:29:12,780 --> 00:29:16,460
You know, there's certain food items that you look at and we eat them and we enjoy them.

526
00:29:16,460 --> 00:29:19,600
And you think, boy, the first person who ate this had to be really hungry.

527
00:29:19,980 --> 00:29:20,420
Right, right, right.

528
00:29:20,420 --> 00:29:25,300
You know, or there's – what is it, like a walnut or something where it's, like, if you don't treat it properly, it'll kill you.

529
00:29:25,340 --> 00:29:26,540
But if you treat it properly, it doesn't.

530
00:29:26,600 --> 00:29:27,800
I mean, there's some nut like that.

531
00:29:28,020 --> 00:29:28,160
I don't know.

532
00:29:28,360 --> 00:29:30,020
You have to know how to, like, cook it or something.

533
00:29:30,020 --> 00:29:30,660
That might be children.

534
00:29:31,000 --> 00:29:31,620
Could be children.

535
00:29:31,720 --> 00:29:32,420
Yeah, who knows.

536
00:29:32,680 --> 00:29:44,020
But you think about, like, all the trial and error that went into figuring out how to properly cook that thing or how to properly prepare that thing so it didn't kill you or make you sick.

537
00:29:44,660 --> 00:29:46,260
And it's kind of remarkable, right?

538
00:29:46,300 --> 00:29:47,280
You didn't want to be the first one.

539
00:29:47,320 --> 00:29:47,900
Here, try this.

540
00:29:47,940 --> 00:29:48,660
I think it'll be fine.

541
00:29:48,740 --> 00:29:51,960
You know, there's that poisonous fish that you can get if you're really crazy.

542
00:29:51,960 --> 00:29:52,260
Yeah, yeah, yeah.

543
00:29:52,260 --> 00:29:53,520
The chef has to know how to do it.

544
00:29:53,900 --> 00:30:00,880
Again, the first person who tried that – or if you're learning that skill, right, you're learning how to make the fish that way, do you really want to be part of the test group?

545
00:30:01,300 --> 00:30:01,720
Right, right.

546
00:30:01,720 --> 00:30:11,980
It's like, sure, you can go to, you know, the place where they train you how to cut hair and you can get a really cheap haircut because the person who's cutting your hair has never cut hair before and get what you pay for, you know what I mean?

547
00:30:12,040 --> 00:30:14,320
But if you're willing to make that tradeoff, fine, right?

548
00:30:14,820 --> 00:30:17,760
But I think about that a lot even with some of the things we try to do in software.

549
00:30:18,580 --> 00:30:24,580
You know, we don't – we haven't reached that maturity level yet where we have all these building blocks that we understand how to use.

550
00:30:25,140 --> 00:30:27,820
You know, you think about, like, the architect who designed this building we're in today.

551
00:30:28,300 --> 00:30:32,240
You know, they're more or less kind of picking up Lego blocks and snapping them together.

552
00:30:32,400 --> 00:30:35,600
They know that this beam can support this much weight in this configuration.

553
00:30:35,880 --> 00:30:37,220
If you do it like this, it can do that.

554
00:30:37,260 --> 00:30:39,740
And they know all the things about load-bearing walls and all that kind of stuff.

555
00:30:39,920 --> 00:30:43,040
So they have these really big abstractions that they can work with.

556
00:30:43,620 --> 00:30:44,940
And we historically haven't.

557
00:30:45,580 --> 00:30:51,500
You know, I mean, it wasn't that long ago that if you and I wanted to write a program, it's like, okay, well, the first thing we need to do is write an operating system.

558
00:30:52,200 --> 00:30:53,520
And then we need to write a compiler.

559
00:30:54,000 --> 00:30:55,300
And then we need to write a text editor.

560
00:30:55,880 --> 00:30:57,260
And then we can start writing some programs.

561
00:30:57,600 --> 00:30:57,940
Right, right.

562
00:30:58,040 --> 00:31:00,200
You know, and we don't have to do that anymore, right?

563
00:31:00,200 --> 00:31:01,320
We get our own operating system.

564
00:31:01,380 --> 00:31:01,920
We don't have to deal with that.

565
00:31:01,980 --> 00:31:03,660
We don't have to worry about compilers as much, you know.

566
00:31:03,740 --> 00:31:05,940
And so we've moved up the abstraction tree.

567
00:31:06,300 --> 00:31:07,800
But we're still at this phase.

568
00:31:07,860 --> 00:31:10,040
And the analogy I like to use actually comes from Calvin and Hobbes.

569
00:31:10,140 --> 00:31:11,040
I love Calvin and Hobbes.

570
00:31:11,640 --> 00:31:16,880
And there's this great comic where they're driving over a bridge and there's this weight limit sign.

571
00:31:17,000 --> 00:31:20,820
And Calvin says, hey, dad, how do they know what the weight limit is on the bridge?

572
00:31:21,100 --> 00:31:26,240
And he says, well, Calvin, they drive heavier and heavier trucks over the bridge until the bridge falls down.

573
00:31:26,240 --> 00:31:29,400
And they rebuild the bridge and they weigh the last truck and then they put the sign on.

574
00:31:29,560 --> 00:31:30,920
And he says, oh, okay, that makes sense.

575
00:31:31,880 --> 00:31:33,700
That's kind of what we do in software.

576
00:31:34,360 --> 00:31:34,500
Yeah.

577
00:31:34,640 --> 00:31:37,100
It's like, is this a good use of this technology?

578
00:31:37,680 --> 00:31:38,380
I don't know.

579
00:31:38,460 --> 00:31:39,980
Let's try it and find out.

580
00:31:40,220 --> 00:31:42,760
Yeah, and then hopefully you build a bridge the exact same way the second time.

581
00:31:42,760 --> 00:31:43,520
Hopefully, right.

582
00:31:43,720 --> 00:31:48,940
And, you know, I mean, there is that analogy, which is, well, if you want to know how long it'll take to build something, you know, build one and throw it away and now you know.

583
00:31:49,300 --> 00:31:49,520
Yeah.

584
00:31:49,620 --> 00:31:51,080
And that's still kind of what we're doing.

585
00:31:51,160 --> 00:31:52,520
There's a lot of trial and error here.

586
00:31:52,940 --> 00:31:54,740
You know, so you try something out.

587
00:31:54,740 --> 00:32:00,600
And one of the things that I've seen repeatedly in our industry is somebody will create something new and interesting and cool.

588
00:32:01,140 --> 00:32:03,360
And it'll solve a problem that they have.

589
00:32:03,560 --> 00:32:06,120
And they'll talk about it, blog about it, whatever about it.

590
00:32:06,260 --> 00:32:08,020
And a whole bunch of other people get really excited.

591
00:32:08,120 --> 00:32:09,480
They're like, well, I need to do that thing too.

592
00:32:10,280 --> 00:32:12,980
And then they start applying it in places it makes no sense.

593
00:32:13,500 --> 00:32:13,640
Yeah.

594
00:32:13,820 --> 00:32:14,840
And then it falls over.

595
00:32:15,420 --> 00:32:18,540
And then you get the inevitable backlash of that technology is terrible.

596
00:32:18,640 --> 00:32:19,080
No one should do it.

597
00:32:19,080 --> 00:32:23,600
I mean, you had a tweet about that very recently that I've actually stolen and I use in some of my talks, you know,

598
00:32:23,600 --> 00:32:27,580
which is exactly the hype cycle that, you know, and then go back to step one, you know, hey, look at this.

599
00:32:27,620 --> 00:32:28,160
Isn't this cool?

600
00:32:28,540 --> 00:32:32,940
You know, no one should ever use this, especially if you're trying to, you know, put up a blog or something, you know.

601
00:32:32,980 --> 00:32:39,560
And that's part of what we're dealing with is that in many cases, the only way we know if it doesn't work is by trying it and discovering it doesn't work.

602
00:32:39,560 --> 00:32:39,880
Yeah, yeah.

603
00:32:39,880 --> 00:32:44,840
And learning, hopefully, from that, you know, and then rinse, repeat until we figure this stuff out.

604
00:32:45,060 --> 00:32:45,580
Yeah, yeah.

605
00:32:45,820 --> 00:32:55,460
No, and I guess, I mean, that is something that's interesting about 12-factor stuff is it seems to have become, as you say, if you want to put something in the cloud, you should follow these rules.

606
00:32:55,520 --> 00:33:00,220
Right, which is sort of remarkable given that it was like just, you know, a marketing web page.

607
00:33:01,320 --> 00:33:08,840
So, you know, most marketing, no matter who writes it, is never really that useful over the long term.

608
00:33:09,020 --> 00:33:16,480
So, like, you know, to the point of, like, how you write things well and how you're crafting those.

609
00:33:16,520 --> 00:33:21,140
And also, like, it's a good way of reflecting on, I think, migrating applications to it, right?

610
00:33:21,220 --> 00:33:29,180
So, like, another, like, the way that 12-factor stuff thinks about an application, right?

611
00:33:29,200 --> 00:33:37,320
It seems to be that, like, basically, and it sort of, it says, it uses different words, but it's like, first of all, your application is going to be, like, transient.

612
00:33:37,700 --> 00:33:40,660
Like, it's going to come and go, so you can't depend on anything being there.

613
00:33:40,720 --> 00:33:44,140
So, it has to be stateless or disposable, as I think they would say.

614
00:33:44,240 --> 00:33:45,200
Treat it like a cow.

615
00:33:45,660 --> 00:33:46,560
Yeah, yeah, right.

616
00:33:46,560 --> 00:33:54,760
And then there's a whole lot of interesting stuff scurrying around with the idea of externalizing your configuration, which is interesting.

617
00:33:55,260 --> 00:33:58,860
And then, finally, there's, like, what would you call it?

618
00:33:58,880 --> 00:34:06,760
I mean, I'm always too sarcastic about it, but there's sort of, like, the big asterisk of backing service, right?

619
00:34:06,840 --> 00:34:08,420
Like, to handle all this stuff for you.

620
00:34:08,440 --> 00:34:13,820
But going back to that, like, how would you compare, like, I haven't actually written software in a long time.

621
00:34:13,820 --> 00:34:19,340
But, I mean, tell me if this has changed any over the past 10 or so years.

622
00:34:19,440 --> 00:34:21,440
Like, it seems like you would write a Java application.

623
00:34:22,340 --> 00:34:35,760
And, like, you can kind of see how it's almost the opposite of a 12-factor application where the goal of a Java application is there's, of course, no .exe in Java because it's Java and not Microsoft.

624
00:34:35,760 --> 00:34:45,480
But, basically, you're creating, like, a giant .exe file that embeds all the middleware that you need and, like, all of the various layers that you need.

625
00:34:45,660 --> 00:34:49,420
And, like, you know, you just start it up in your app server and it has everything.

626
00:34:49,680 --> 00:34:56,940
And, at worst, you'll have, I guess, they had ear files, which are just a way of bundling together a bunch of these other files.

627
00:34:57,300 --> 00:34:59,860
Let me channel Josh and say, you know, make JAR not work.

628
00:34:59,880 --> 00:35:00,560
That's right.

629
00:35:00,780 --> 00:35:07,680
And then, but there was something that, like, I mean, and it's used today in Java applications to be 12-factor compliant.

630
00:35:07,680 --> 00:35:17,800
And it's, like, they were always encouraging you to pull your configuration out and put it in, like, property files and then, I guess, XML files and then environment variables and things like that.

631
00:35:17,860 --> 00:35:20,600
But there seems to be, like, I don't know.

632
00:35:20,620 --> 00:35:25,360
That model seems to, I guess that's not the right way to do a cloud application.

633
00:35:26,040 --> 00:35:32,500
Like, so how do you, how would you, if you built a war and an ear and all that stuff, like, how do you pull it apart?

634
00:35:32,760 --> 00:35:34,660
We would keep it as a JAR.

635
00:35:34,840 --> 00:35:37,680
Again, I do like Josh's quote, you know, make JAR not war.

636
00:35:38,140 --> 00:35:40,820
I mean, either way, nowadays, you can execute all of them just the same.

637
00:35:41,060 --> 00:35:44,760
It doesn't really matter what the three-letter extension after your zip file is.

638
00:35:45,000 --> 00:35:45,000
Right.

639
00:35:45,000 --> 00:35:49,040
It's all, yeah, it's just yet another way of encapsulating your code, I guess.

640
00:35:49,040 --> 00:35:51,000
But, you know, that's a good question.

641
00:35:51,120 --> 00:35:56,500
I mean, again, I would argue that a lot of these things, it's just the design we've been trying to do for a while.

642
00:35:56,640 --> 00:35:59,160
I mean, external configuration, that's always been a good idea.

643
00:35:59,840 --> 00:36:03,480
You know, hard-coded configuration has never been a wonderful thing for us.

644
00:36:03,520 --> 00:36:13,260
I mean, I still distinctly remember early, early on working on apps where, you know, we had some of the, like, passwords were in clear text.

645
00:36:13,260 --> 00:36:18,600
If you knew how to log on to the right server, you could see the non-expiring username and password.

646
00:36:19,440 --> 00:36:22,700
You know, and it's like, well, I mean, we didn't have a better option at the time.

647
00:36:22,860 --> 00:36:24,620
You know, that was the best we could do.

648
00:36:24,740 --> 00:36:30,280
And you just kind of had a little bit of that obscurity kind of concept of security, which, you know, worked out okay.

649
00:36:30,500 --> 00:36:31,880
Now, we wouldn't want to do that today.

650
00:36:32,320 --> 00:36:36,500
You know, but that's, again, to me, that's just part of, like, how do we design good software?

651
00:36:36,780 --> 00:36:41,620
You know, not so much whether that's going to run in the cloud or whether that's going to run somewhere else and what that looks like.

652
00:36:41,620 --> 00:36:56,360
But what I find exciting about this is just that shift from I take my, you know, if we're talking about Java in particular, I take my Java code from one instance of an app server to another instance of an app server that I call test.

653
00:36:56,520 --> 00:36:58,900
And it's on another physical piece of hardware somewhere else.

654
00:36:59,420 --> 00:37:01,160
And, you know, I inevitably run into these issues.

655
00:37:01,320 --> 00:37:03,480
Well, it worked on my dev server.

656
00:37:03,880 --> 00:37:04,240
Sure.

657
00:37:04,400 --> 00:37:05,900
And it doesn't work on my test server.

658
00:37:06,020 --> 00:37:06,680
Why the heck not?

659
00:37:06,940 --> 00:37:08,740
You know, what's different between these two servers?

660
00:37:08,800 --> 00:37:09,960
They're supposed to be identical.

661
00:37:10,620 --> 00:37:15,600
You know, and then you spend days, hours, weeks trying to figure out what's different.

662
00:37:15,660 --> 00:37:18,080
And that is a really unfun problem to solve.

663
00:37:18,360 --> 00:37:18,720
Sure.

664
00:37:18,860 --> 00:37:27,000
You know, and so, you know, and I think that's so frustrating is, like, all the time we're spending chasing down those rat holes is time we're not solving business problems.

665
00:37:27,020 --> 00:37:27,220
Yeah.

666
00:37:27,300 --> 00:37:28,900
You know, our customers don't care about those things.

667
00:37:28,940 --> 00:37:34,760
They just want us to get the next card done, get the next story done with whatever they happen to be using for requirements these days.

668
00:37:35,360 --> 00:37:39,520
And so being able to kind of lift that abstraction up to, well, no, no, this is a unit.

669
00:37:40,020 --> 00:37:44,320
You know, you're essentially saying your app server and everything it needs is all one block.

670
00:37:44,540 --> 00:37:48,680
And that's the thing that we're, quote, unquote, moving from one instance to another.

671
00:37:49,220 --> 00:37:53,940
You know, and, of course, let's be honest, until we get to prod, it's generally not actually physically changing anything.

672
00:37:54,100 --> 00:37:55,640
We're just pointing at a new thing.

673
00:37:55,760 --> 00:37:58,040
You know, this URL goes here now instead of here.

674
00:37:58,340 --> 00:37:59,380
And, you know, who cares?

675
00:37:59,600 --> 00:38:03,860
It might even be on the exact same, you know, rack that it was on before, but so what?

676
00:38:04,240 --> 00:38:04,400
Yeah.

677
00:38:04,580 --> 00:38:10,820
So to me, I think that's really useful to get out of this mindset of I'm going to log on to server 123XYZ.

678
00:38:11,320 --> 00:38:12,100
Who cares?

679
00:38:12,420 --> 00:38:15,840
You know, that should be somebody else's responsibility, you know, not me.

680
00:38:15,900 --> 00:38:17,760
I don't want to worry about that level of abstraction.

681
00:38:17,920 --> 00:38:23,060
I want to just focus on, hey, I have a business problem I need to solve, and this happens to be the right language to solve it in.

682
00:38:23,140 --> 00:38:28,000
Now, here, take this thing and please execute it for me so my business person can get their value out of it.

683
00:38:28,420 --> 00:38:28,860
Right, right.

684
00:38:29,420 --> 00:38:29,980
Yeah, yeah.

685
00:38:30,100 --> 00:38:38,680
So, I mean, I guess that is the, it's a continuous story of we've been trying to do things in this good way, but we didn't do it very well last time.

686
00:38:39,580 --> 00:38:47,480
Right, and then, you know, if where we are right now is in, right, like, when we get to in plus one, we'll have the same opinion.

687
00:38:47,480 --> 00:38:47,800
Yes.

688
00:38:47,920 --> 00:38:50,720
That, like, the way we used to do things was that we didn't do it very well.

689
00:38:50,720 --> 00:38:51,440
You're absolutely right.

690
00:38:51,960 --> 00:38:53,680
And that's an important thing to remember.

691
00:38:54,080 --> 00:38:58,300
One of the things that frustrates me about this industry is we do a really bad job of learning from the past.

692
00:38:58,960 --> 00:39:03,100
You know, I have this theory that for most developers, time begins with the first language they learned.

693
00:39:03,520 --> 00:39:04,060
Yeah, yeah, yeah.

694
00:39:04,060 --> 00:39:07,000
That anything that happened before that is ancient history, nobody knows anything about it.

695
00:39:07,040 --> 00:39:15,960
This is where all the ideas started from and came from, and they don't, we typically don't reflect upon the fact that, well, no, that idea came from 35, 40 years ago.

696
00:39:16,300 --> 00:39:16,780
That's right.

697
00:39:16,780 --> 00:39:19,120
And it was a really good idea then, and it's still a good idea now.

698
00:39:19,240 --> 00:39:19,600
Yeah, yeah, yeah.

699
00:39:19,600 --> 00:39:27,760
I mean, you look at Fred Brooks, I mean, this guy was making statements about our industry 30 years ago that are true today, and they're going to be true in 30 years, and they're going to be true in 100 years.

700
00:39:28,300 --> 00:39:30,020
You know, that, to me, is an important thing.

701
00:39:30,080 --> 00:39:31,760
We need to reflect upon that stuff.

702
00:39:32,580 --> 00:39:37,180
And that's a good point, because go forward five years, we're going to be doing something different.

703
00:39:37,660 --> 00:39:38,500
I don't know what it is.

704
00:39:38,520 --> 00:39:39,520
I can't predict the future.

705
00:39:39,980 --> 00:39:40,220
Yeah.

706
00:39:40,300 --> 00:39:41,820
But it'll be different, and you're absolutely right.

707
00:39:41,820 --> 00:39:49,500
We'll reflect back on this, and we'll be talking about our legacy cloud portfolio, you know, and we're going to be arguing about, yeah, we're really stupid.

708
00:39:49,600 --> 00:39:50,460
Back then, weren't we?

709
00:39:50,580 --> 00:39:51,620
You know, and it's like, no, we weren't.

710
00:39:51,720 --> 00:39:54,080
We did the best we could with the tools we had in front of us.

711
00:39:54,440 --> 00:39:55,840
Five years from now, we're going to know more.

712
00:39:55,940 --> 00:39:57,320
Ten years from now, we're going to know more.

713
00:39:57,700 --> 00:39:57,840
Yeah.

714
00:39:57,860 --> 00:40:06,620
And so it'll just keep evolving, and we need to appreciate that, you know, and we need to reflect upon, too, that a lot of what we do today is just a renamed variant of something we did before.

715
00:40:07,060 --> 00:40:07,300
Yeah.

716
00:40:07,300 --> 00:40:11,020
You know, I understand the hype around microservices, and I get that.

717
00:40:11,600 --> 00:40:24,020
So microservices are, you could make an argument, it's just SOA done right, you know, and we can argue that SOA is not a heck of a lot different from what we were doing at EJB, which wasn't a heck of a lot different from CORBA, and I'm sure there was something that came before that.

718
00:40:24,280 --> 00:40:24,500
Right.

719
00:40:24,500 --> 00:40:26,700
And they all have very similar characteristics.

720
00:40:27,500 --> 00:40:47,400
Yeah, and I guess the thing you're noodling on there is, I mean, it's helping me realize one of the, you know, one of the confusions I have about 12-factor stuff, right, is it's a mixture of, and it's very coy in how it does it, but it's a mixture of technology prescriptions and general principles.

721
00:40:47,700 --> 00:40:47,860
Right.

722
00:40:47,860 --> 00:40:56,720
Right, and the issue is always, well, the core issue with it is the technology prescriptions don't really ever tell you what the technology is.

723
00:40:56,940 --> 00:40:57,280
Right.

724
00:40:57,280 --> 00:41:02,620
They just tell you what the desired effect or constraint of using the technology is, right?

725
00:41:02,620 --> 00:41:08,780
So, like, I forget it, but, like, if it was written nowadays, it would probably be, like, package your software in containers.

726
00:41:09,000 --> 00:41:09,220
Sure.

727
00:41:09,340 --> 00:41:10,660
Right, and, like, done.

728
00:41:11,100 --> 00:41:19,560
Like, use a container to package it and use a YAML file to store the configuration and then use this kind of, like, environment variable.

729
00:41:19,560 --> 00:41:22,820
I don't know this stuff, really, but use this kind of environment variable passing in.

730
00:41:22,820 --> 00:41:23,420
And then use Kubernetes.

731
00:41:23,420 --> 00:41:31,780
Yeah, and then when the container gets packaged, open up the YAML file and jam these things into the environment variable so that when it boots up, you've got your configuration injected.

732
00:41:31,960 --> 00:41:32,020
Right.

733
00:41:32,020 --> 00:41:34,120
Where it is, like, it's a little more poetic.

734
00:41:34,540 --> 00:41:34,660
Yeah.

735
00:41:34,700 --> 00:41:37,100
12-factor stuff, it's more poetic in its approach, right?

736
00:41:37,560 --> 00:41:40,800
Whereas it has principles in there that are, like, you should have loose coupling.

737
00:41:41,100 --> 00:41:41,320
Right.

738
00:41:41,480 --> 00:41:41,760
Right?

739
00:41:41,860 --> 00:41:43,900
Like, however it is you want to achieve that.

740
00:41:44,060 --> 00:41:52,460
And I think, I forget the timeline, but, I mean, I think microservices as a concept started crystallizing after 12-factor stuff, right?

741
00:41:52,460 --> 00:41:58,520
So, it would be easy to kind of say that, like, oh, when they say loose coupling, they mean do microservices.

742
00:41:59,020 --> 00:42:03,380
Which is probably, to retcon it, is probably true.

743
00:42:03,520 --> 00:42:05,500
Like, what we're saying is to do microservices.

744
00:42:05,840 --> 00:42:12,420
But it is, like, it's hard to sort out those things that are principles that you should be following versus, like, technology things.

745
00:42:12,480 --> 00:42:15,180
And then you're reminding me of one that I always forget.

746
00:42:15,180 --> 00:42:18,900
And I only remembered it when I actually looked at the list later today.

747
00:42:19,000 --> 00:42:21,320
I don't even remember you talking about it, but you must have.

748
00:42:21,500 --> 00:42:25,640
But you alluded to it, which is, like, you should have dev prod parity.

749
00:42:26,260 --> 00:42:34,600
Which is sort of, like, that's an easy one to just sort of, like, I don't know if this is a proper use of it, but just sort of, like, whistle past as you walk past it.

750
00:42:34,600 --> 00:42:36,640
Which is, because you were just describing, right?

751
00:42:36,660 --> 00:42:44,800
The problem that you have all of the time, if you don't catch it, is it worked in, you know, you got that little girl with the firehouse.

752
00:42:45,120 --> 00:42:48,120
Like, you got, it worked over here, and now it doesn't work over there.

753
00:42:48,660 --> 00:42:56,020
And this is another one of those things to go on, another long monologue here that I feel like was a, what would you call it?

754
00:42:56,420 --> 00:43:05,500
A unintended finding of it being Heroku, which was, like, there is no difference between Heroku dev and Heroku prod.

755
00:43:05,620 --> 00:43:08,540
As far as a consumer, it's, like, there's only the Heroku.

756
00:43:08,880 --> 00:43:08,980
Right.

757
00:43:09,120 --> 00:43:14,520
Like, you can't, so, I mean, there's a difference in configuration, but it's the same exact, like, setup.

758
00:43:14,640 --> 00:43:16,160
You might consider something dev.

759
00:43:16,180 --> 00:43:24,820
Yeah, yeah, and you might be routing it differently and things like that, but it's the same exact, I mean, unless they're doing something bonkers, it's the same exact thing that you're running.

760
00:43:24,820 --> 00:43:26,720
And I think, it's going to end up on a rack somewhere.

761
00:43:27,080 --> 00:43:27,440
Exactly.

762
00:43:27,760 --> 00:43:34,420
Like, the Dynamo you're using over here is not an instance, but it was just a different, it's just a different instance of the Dynamo here.

763
00:43:34,440 --> 00:43:36,400
And you see that in Pivotal Cloud Foundry and other stuff.

764
00:43:36,520 --> 00:43:41,500
And I think, like, that's something I never see, I very rarely see people talk about.

765
00:43:42,040 --> 00:43:46,180
And even with Pivotal Cloud Foundry, they'll talk about having multiple foundations and things like that.

766
00:43:46,220 --> 00:43:50,320
And it seems like the goal is to have the one cloud, right?

767
00:43:50,320 --> 00:43:54,980
And then that will both force and eliminate a lot of issues.

768
00:43:55,480 --> 00:43:56,980
It's taking variables out of play.

769
00:43:57,140 --> 00:43:57,660
Yeah, yeah, exactly.

770
00:43:57,900 --> 00:44:06,060
And what's fascinating to me is I spent a lot of my career developing Java on a Windows desktop that was then deployed to some Linux variant.

771
00:44:06,340 --> 00:44:06,760
Exactly.

772
00:44:07,120 --> 00:44:07,260
Right.

773
00:44:07,260 --> 00:44:15,460
It's like, wow, who would have thunk it that this app server running on Windows isn't identical to that app server running on Linux machines.

774
00:44:15,540 --> 00:44:20,500
Yeah, let alone configuring the database and the networking and, like, all the stuff.

775
00:44:20,700 --> 00:44:20,880
Yeah.

776
00:44:21,060 --> 00:44:24,800
And so anytime we add variables, we're just making our job harder.

777
00:44:25,140 --> 00:44:25,400
Yeah.

778
00:44:25,480 --> 00:44:33,520
And then so that's, I mean, the way that you're detailing it is, like, that's an instance where you could externalize the configuration all you wanted.

779
00:44:33,820 --> 00:44:34,180
Right.

780
00:44:34,480 --> 00:44:41,760
But if you have, if you're Windows in development and Linux in production, like, who cares?

781
00:44:41,960 --> 00:44:46,200
I mean, obviously it's going to be better, but you're still going to find problems.

782
00:44:46,220 --> 00:44:46,500
Exactly.

783
00:44:46,600 --> 00:45:00,240
And so, yeah, I mean, I don't know, I'm finding that people don't talk about that parity very much, but that seems like, that seems like one of those things that you sort of, like, you should probably do that first because it's going to get you a huge amount of gain.

784
00:45:00,460 --> 00:45:13,820
Kind of back to your spreadsheet example, like, whether we modernize these applications or not, if there was extreme parity between the development environment and the production environment, or it was the same environment, things would probably run better.

785
00:45:13,960 --> 00:45:14,160
Right.

786
00:45:14,160 --> 00:45:15,460
But anyhow.

787
00:45:15,580 --> 00:45:18,380
Oh, I mean, you asked me, like, how much of my time I've spent staring at log files.

788
00:45:19,040 --> 00:45:25,360
It's probably equally as much of how much of my time I've spent dealing with issues where this environment was slightly different.

789
00:45:25,460 --> 00:45:26,120
Yeah, yeah, yeah.

790
00:45:26,320 --> 00:45:26,500
Yeah.

791
00:45:26,700 --> 00:45:30,940
And some of those differences are so minor, it takes you days to track it down.

792
00:45:30,940 --> 00:45:31,140
Yeah.

793
00:45:31,220 --> 00:45:32,780
And it doesn't even seem like it should matter.

794
00:45:32,880 --> 00:45:33,740
I've done plenty of that.

795
00:45:33,940 --> 00:45:34,340
Oh, yeah.

796
00:45:34,460 --> 00:45:35,740
Every software developer has.

797
00:45:36,180 --> 00:45:36,320
Yeah.

798
00:45:36,320 --> 00:45:42,780
You know, the worst example I personally ran across is we had two servers that were at the same patch level, but the patches had been applied in different orders.

799
00:45:43,560 --> 00:45:44,560
Yeah, yeah, yeah.

800
00:45:44,560 --> 00:45:49,460
We had exposed some strange, you know, nuance of behavior that drove us nuts for days.

801
00:45:49,900 --> 00:45:50,080
Yeah.

802
00:45:50,080 --> 00:45:54,660
And that's really when you just kind of pound your head against the table and you're like, why do I do this?

803
00:45:54,840 --> 00:45:55,020
Yeah.

804
00:45:55,020 --> 00:45:56,120
There has to be a better way.

805
00:45:56,240 --> 00:45:58,260
And in fairness, today there is.

806
00:45:58,760 --> 00:46:01,580
You know, I mean, let's be honest, 15 years ago, this was a harder problem to solve.

807
00:46:01,920 --> 00:46:09,440
And, you know, you couldn't have identical environments because we had to buy these custom, you know, servers that were really expensive with these custom operating systems.

808
00:46:09,960 --> 00:46:13,400
And so, you know, we threw the app server on there as a way of maximizing return on that investment.

809
00:46:13,580 --> 00:46:17,840
And so, you fast forward to today and it's like, well, now spinning up a new instance is trivial.

810
00:46:18,300 --> 00:46:18,480
Yeah.

811
00:46:18,480 --> 00:46:20,780
And it takes seconds and it's free.

812
00:46:20,860 --> 00:46:32,580
And then in theory, there's also like enough isolation between your different spaces or whatever you want to call it that you could actually be running development and production in the same cluster.

813
00:46:32,960 --> 00:46:33,120
Sure good.

814
00:46:33,360 --> 00:46:36,800
Or you could actually, that's not, that's too fine-toothed way of putting it.

815
00:46:36,840 --> 00:46:43,380
But like, I always think like, you know, if you deploy to like Google or Amazon or Azure, like it's, there's, there's parity.

816
00:46:43,560 --> 00:46:49,780
I mean, I'm going back to the same thing of like, it's, it doesn't, it, that, that, that, that, that box that says, this is going to problem now.

817
00:46:49,840 --> 00:46:50,400
Right, right, right.

818
00:46:50,480 --> 00:46:51,640
The cloud doesn't care.

819
00:46:51,740 --> 00:46:53,140
No, it's like, hey, I'm going to run your workload.

820
00:46:53,280 --> 00:46:53,460
Yeah.

821
00:46:53,460 --> 00:46:53,920
Here you go.

822
00:46:53,920 --> 00:46:58,880
And so you, you sort of, again, you instantly get that parity without having to try too hard.

823
00:46:59,020 --> 00:47:03,980
I mean, I guess, I guess then what you have to do is to not mess up that default state that you get.

824
00:47:04,180 --> 00:47:08,480
And, and say like, I want this type of server in, in development.

825
00:47:08,480 --> 00:47:14,200
And then I want you to switch it over to this other type of server in, in production, which, or whatever they call it nowadays, profile.

826
00:47:14,200 --> 00:47:17,320
And again, I mean, that's why that higher level of distraction is a win for us.

827
00:47:17,320 --> 00:47:27,260
Because if we're not down to that level in the weeds where we're checking boxes on, you know, what specifically we want, give me this many cores and this much memory or whatever, we have fewer opportunities to screw that kind of stuff up.

828
00:47:27,480 --> 00:47:32,960
And if we don't care, then we shouldn't, I would argue in most situations, like here, here's my workload, run it for me.

829
00:47:33,360 --> 00:47:37,100
You know, the cloud, again, doesn't care whether that's a prod workload or a test workload or a dev workload.

830
00:47:37,500 --> 00:47:51,080
And so that again, to me is fundamentally a win because then when I point my prod load balancer at it, same thing I tested in dev and the same thing my customers signed off on and the same thing my QA guys went through.

831
00:47:51,640 --> 00:47:54,200
That eliminates a whole class of problems.

832
00:47:54,200 --> 00:48:00,540
And I can make an argument that's one of the biggest advantages we get in the cloud right there is the fact that we get that, that parity.

833
00:48:01,060 --> 00:48:04,700
And then, and then like all these 12 factor things that sort of feed into each other.

834
00:48:04,760 --> 00:48:13,300
It's, it's at that point that like externalized configuration becomes really handy because, because in, in, in reasonable theory, so to speak.

835
00:48:13,300 --> 00:48:13,520
Like, right.

836
00:48:13,580 --> 00:48:15,840
Well, my test database better be different than my prod database.

837
00:48:15,840 --> 00:48:16,680
Yeah, yeah, yeah.

838
00:48:16,780 --> 00:48:17,000
Yeah.

839
00:48:17,100 --> 00:48:19,980
I mean, so that, that's the last thing we'll get to is like data.

840
00:48:20,100 --> 00:48:23,980
It's sort of like, oh, if I could have been stateless this whole time, nothing would have been broken.

841
00:48:24,200 --> 00:48:27,160
You know, our lives would be so much easier if we didn't have to deal with data.

842
00:48:27,280 --> 00:48:27,760
Yeah, yeah.

843
00:48:27,820 --> 00:48:29,500
But, but, but I mean, even before that, right.

844
00:48:29,560 --> 00:48:37,900
So if you have some deployment problems, if your configuration is externalized, again, not that it solves a problem, but it's a lot easier to like run the diff on it.

845
00:48:38,040 --> 00:48:38,200
Right.

846
00:48:38,280 --> 00:48:43,120
And, and then, and then if your configuration comes up as exactly the same, then I guess you're back to being screwed.

847
00:48:43,380 --> 00:48:54,000
But at least there's that chance to have like caught like, oh, we had this gigantic configuration file that is just a plain text kind of file that we can actually look at.

848
00:48:54,000 --> 00:48:54,240
Yep.

849
00:48:54,380 --> 00:49:01,100
Versus like you were saying, we manually installed these patches in this or in this order or not in this order.

850
00:49:01,280 --> 00:49:02,640
And then we had to update this thing.

851
00:49:02,740 --> 00:49:08,860
And like, so we don't have a way of actually verifying what we did other than our hopeful memories of it.

852
00:49:09,040 --> 00:49:09,160
Right.

853
00:49:09,220 --> 00:49:16,900
So anyway, so then the last part, so you got these backing services and like, like both, both in the work that you've done, right.

854
00:49:16,900 --> 00:49:22,440
Like, and then also just thinking about them, like, like what is a backing service?

855
00:49:22,620 --> 00:49:22,860
Sure.

856
00:49:22,860 --> 00:49:23,540
What's the deal with that?

857
00:49:23,820 --> 00:49:26,620
Well, so, so I look at that, you know, especially as we talk about state.

858
00:49:26,760 --> 00:49:30,720
So we say these apps are stateless, but we don't really have stateless apps.

859
00:49:30,920 --> 00:49:35,160
You know, there's going to be something written out, but we need to have a durable place to put that, you know?

860
00:49:35,160 --> 00:49:38,680
So there has to be something that we're not just throwing away and recreating randomly.

861
00:49:39,040 --> 00:49:39,220
Yeah.

862
00:49:39,300 --> 00:49:47,020
You know, and all of the environments will give you some way of either having a file system you can write to or something that looks like a file system or, you know, database, things like that.

863
00:49:47,160 --> 00:49:52,940
And so it's being able to kind of compose that in as, hey, I need ability to write out the disk.

864
00:49:53,020 --> 00:49:54,920
I need the ability to save this into a database.

865
00:49:55,160 --> 00:49:55,840
Give me that.

866
00:49:56,180 --> 00:50:00,360
Well, here, here's a service you can plug into for my SQL instance or something.

867
00:50:00,360 --> 00:50:08,120
And I don't have to worry about how that instance gets spun up, you know, in a perfect way I just say, give me a large one or give me a small one.

868
00:50:08,280 --> 00:50:12,560
And it springs into existence and here's how I connect to it and now my app can talk to it.

869
00:50:12,880 --> 00:50:17,940
And that is also managed by my platform so I don't have to deal with all the rigmarole.

870
00:50:18,720 --> 00:50:28,200
So it's, I guess the way I look at it is we want the app to be stateless in the sense that I'm not putting anything in memory, you know, that I'm going to rely on coming back.

871
00:50:28,260 --> 00:50:35,220
But if I do need something to be there the next time this request comes in, I'm putting that somewhere durable so that when I come back, I can now talk to that.

872
00:50:35,280 --> 00:50:38,700
The new instance that gets created when this one gets sick or when we're scaling out.

873
00:50:38,700 --> 00:50:39,060
Yeah, yeah, yeah.

874
00:50:39,100 --> 00:50:42,060
Just gets pointed to that service that knows how to do it.

875
00:50:42,060 --> 00:50:52,000
Yeah, and then another way I interpret that is like, I don't know what people call it nowadays, but like don't embed middleware and frameworks.

876
00:50:52,300 --> 00:50:52,500
Sure.

877
00:50:52,500 --> 00:50:59,800
Maybe if the distinction is like a framework is just like a better string manipulator than whatever, that's fine.

878
00:50:59,980 --> 00:51:05,520
But like don't be responsible for running your own queue system or database.

879
00:51:05,740 --> 00:51:08,700
And, you know, don't be responsible for your own batch job management system.

880
00:51:08,900 --> 00:51:11,960
Like there's all these, I guess people call them services now.

881
00:51:12,000 --> 00:51:17,140
There's all these services that like you should not be embedding in your application.

882
00:51:17,140 --> 00:51:27,280
Like, you know, going back to the thing I used to know, right, like if you're building a big Java application, even if it's in a jar file, you could like zip in a database, right?

883
00:51:27,340 --> 00:51:30,860
Like you could embed whatever you wanted in there and rely on it.

884
00:51:31,060 --> 00:51:35,980
And then you could even like if you had your own database in there, you could sort of like say, now I need storage.

885
00:51:35,980 --> 00:51:37,840
And then all of a sudden you're managing all that stuff.

886
00:51:37,840 --> 00:51:42,520
And so that seems to be another side effect of that is like you shouldn't embed stuff.

887
00:51:43,340 --> 00:51:48,520
Like you should have them running independently as a service, as their own thing.

888
00:51:48,880 --> 00:51:50,160
What do you want to have to manage?

889
00:51:50,820 --> 00:52:01,400
You know, and so by having that abstraction, then again, when a new instance springs up to either replace a sick one or to scale us out because we've got a big spike in demand,

890
00:52:02,200 --> 00:52:04,020
well, the database is a separate entity.

891
00:52:04,360 --> 00:52:09,560
It's over here and you just talk to it through this mechanism and it will store for you and it will retrieve you and whatever.

892
00:52:09,700 --> 00:52:09,860
Right.

893
00:52:09,860 --> 00:52:10,600
You don't have to worry about it.

894
00:52:11,100 --> 00:52:21,000
You know, if we try to get the job of tying those things back together, well, that kind of harms what we're trying to do here with being able to scale things up, scale things down, fix things, health heal, all that kind of fun stuff.

895
00:52:21,260 --> 00:52:25,960
You know, so it's just that abstraction becomes required if we're really going to get these other benefits.

896
00:52:26,620 --> 00:52:30,860
You know, if you're going to hard code that in, well, now that doesn't work out so great for us.

897
00:52:31,180 --> 00:52:36,040
So then when you were, you've evaluated things in the past, I mean, like, what, what do you do with the database?

898
00:52:36,220 --> 00:52:39,060
Because like, I don't think a database is a 12 factor.

899
00:52:40,020 --> 00:52:41,100
No, it's, it's not.

900
00:52:41,200 --> 00:52:47,420
And, you know, I mean, I admit that one of the hardest things we face, especially if we start talking about microservices is what we do with the data.

901
00:52:48,560 --> 00:52:54,300
Especially, you know, our traditional application was designed with the one data store and it had everything.

902
00:52:54,300 --> 00:52:57,820
And the monolith right wrote all over it and read all over it.

903
00:52:57,940 --> 00:53:04,520
And as you start pulling things apart in a perfect world, they all have their own database so that we don't step on each other.

904
00:53:04,580 --> 00:53:07,860
When I need to make schema changes, I can make schema changes and I don't got to worry about anybody else.

905
00:53:08,240 --> 00:53:10,720
And then you start running into all sorts of other interesting issues.

906
00:53:10,720 --> 00:53:14,280
Like, well, wait, this microservice actually kind of needs something out of there.

907
00:53:14,340 --> 00:53:17,120
So how do we, you know, how do I make that communication channel happen?

908
00:53:17,200 --> 00:53:19,640
And, well, wait, maybe that isn't the best way to pull these things apart.

909
00:53:20,400 --> 00:53:25,820
So data, I still think, is one of those areas we haven't maybe focused enough effort and attention into.

910
00:53:25,960 --> 00:53:26,500
Yeah, yeah.

911
00:53:26,520 --> 00:53:28,500
It's weird that it doesn't get talked about more.

912
00:53:28,620 --> 00:53:28,860
Right.

913
00:53:28,900 --> 00:53:33,380
Especially because, again, we have always had it and we will always have it.

914
00:53:33,380 --> 00:53:37,220
I mean, that's kind of a requirement here in making our systems is, well, where's the database?

915
00:53:37,480 --> 00:53:43,840
I mean, I almost feel like at this point and maybe several points in the future, the answer is just sort of like, I don't know,

916
00:53:43,880 --> 00:53:46,880
it's that mysterious cylinder over there that runs, right?

917
00:53:46,980 --> 00:53:54,680
And, like, the best that we're going to do with our data is, like, there's still these priests and monks that run it.

918
00:53:54,740 --> 00:53:54,960
Right.

919
00:53:55,080 --> 00:54:01,020
And, like, we're going to get them to give us, like, a more friendly interface.

920
00:54:01,200 --> 00:54:01,400
Right.

921
00:54:01,400 --> 00:54:01,660
Right?

922
00:54:01,820 --> 00:54:07,360
Like, we're going to be able to send stuff in JSON and they can send stuff in JSON back to us.

923
00:54:07,460 --> 00:54:10,580
And, like, that's all the effort I want to spend on that cylinder.

924
00:54:10,960 --> 00:54:18,240
Like, there's not – I never – I very rarely come across, like – I mean, there's, like, all the children of no SQL stuff out there, right?

925
00:54:18,580 --> 00:54:19,680
Like, I was noticing –

926
00:54:19,680 --> 00:54:20,440
I think Mongo's web scale.

927
00:54:20,640 --> 00:54:20,820
Yeah.

928
00:54:20,900 --> 00:54:23,900
In our Paris office here, there's a data stacks office, right?

929
00:54:23,900 --> 00:54:23,920
Yeah.

930
00:54:23,920 --> 00:54:31,400
So, there's the Cassandra people and you got the Kafka people and – but – and I know very little about this, so I'll babble on and embarrass myself.

931
00:54:31,500 --> 00:54:40,780
But it seems like those – the problems with getting those things up and running are just traditional problems of, like, this is a big complicated data service.

932
00:54:40,980 --> 00:54:44,060
And so, you need to have good infrastructure and good system administration.

933
00:54:44,540 --> 00:54:49,260
And, like, at the end of the day, it's complicated, right?

934
00:54:49,320 --> 00:54:49,640
Yeah.

935
00:54:49,640 --> 00:54:55,500
Like, it's not this, like, simpler way of doing application development that comes and goes and – and I don't know.

936
00:54:55,560 --> 00:55:01,340
It's almost like the weird secret of cloud-native development is, like, yeah, you're still going to need those annoying DBAs.

937
00:55:01,740 --> 00:55:05,240
Or maybe cluster DBAs or whatever.

938
00:55:05,580 --> 00:55:13,540
Your data handling is always going to be – it's either going to be expensive and painful because it's just, like, some database, right?

939
00:55:14,020 --> 00:55:15,960
Or it's going to be weird and exotic.

940
00:55:16,200 --> 00:55:16,380
Yeah.

941
00:55:17,040 --> 00:55:22,200
Well, part of the challenge I think we face in that database space is we have so much more choice today.

942
00:55:22,700 --> 00:55:27,640
You know, for a good chunk of our development experience, it's like, well, it's going to be a relational database.

943
00:55:27,940 --> 00:55:28,480
Yeah, yeah, yeah.

944
00:55:28,480 --> 00:55:31,740
Now, we have different flavors, but it was going to be a relational database.

945
00:55:32,380 --> 00:55:36,100
And then now we've kind of got this model where, well, it could be a relational database.

946
00:55:36,220 --> 00:55:38,540
That still might be the right choice in a lot of cases, by the way.

947
00:55:39,280 --> 00:55:46,000
But I've got this whole fleet of other choices that all are under this umbrella, NoSQL or whatever we want to call it.

948
00:55:46,100 --> 00:55:47,340
Yeah, I don't think anyone says that anymore.

949
00:55:47,340 --> 00:55:47,800
Probably not.

950
00:55:47,920 --> 00:55:48,600
It's probably too old.

951
00:55:48,840 --> 00:55:51,160
I mean, I'm just an old architect guy, so what do I know?

952
00:55:51,340 --> 00:55:53,340
But they all have different characteristics.

953
00:55:53,960 --> 00:55:54,120
Yeah, exactly.

954
00:55:54,120 --> 00:55:57,560
And what's fascinating is you see people will just glom onto one and they're like, oh, I love this one.

955
00:55:57,560 --> 00:55:58,200
Well, why?

956
00:55:59,180 --> 00:56:00,480
Well, because.

957
00:56:01,180 --> 00:56:03,960
And it's like, well, is that the right way to solve this problem?

958
00:56:04,460 --> 00:56:04,640
Yeah.

959
00:56:04,720 --> 00:56:07,280
You know, I mean, like you look at like Neo4j, you know, graphing database.

960
00:56:07,760 --> 00:56:10,900
There are certain problem domains that that is the perfect solution for.

961
00:56:11,540 --> 00:56:13,500
There are others where it's not the right solution.

962
00:56:14,160 --> 00:56:17,560
You know, I still think like we have a responsibility to know like when do I pick up which tool?

963
00:56:17,800 --> 00:56:24,400
You know, instead of just getting locked in on, well, I like this one because I like the name or I use it on a project and it seemed like it was fine.

964
00:56:24,700 --> 00:56:29,720
But does that, does that really give you the characteristics you need for this problem that you're trying to solve?

965
00:56:29,840 --> 00:56:30,200
Yeah, yeah.

966
00:56:30,480 --> 00:56:32,260
So that's, that's still to me the big mix.

967
00:56:32,360 --> 00:56:39,960
And again, the fact we have so many more choices than we did before makes it in some ways more difficult because you're like, like, can't just reach for one from column A.

968
00:56:40,180 --> 00:56:43,720
I have to figure out which one solves this particular problem.

969
00:56:43,720 --> 00:56:54,260
Yeah, I mean, it seems like a really weird space because like, or at least to me, because it doesn't seem like, like, let's call it data management.

970
00:56:54,500 --> 00:56:55,340
Is it data or data?

971
00:56:55,700 --> 00:56:56,940
I watch too much Star Trek.

972
00:56:57,020 --> 00:56:58,300
It depends on where you come from, I think.

973
00:56:58,400 --> 00:56:58,940
Yeah, there you go.

974
00:56:59,160 --> 00:57:00,560
It's like route versus route.

975
00:57:00,600 --> 00:57:02,420
You're state management, right?

976
00:57:02,420 --> 00:57:02,800
There you go.

977
00:57:03,200 --> 00:57:09,300
Like state management is this problem we've constantly been trying to solve and reinvent and we never really do.

978
00:57:09,840 --> 00:57:15,320
And in contrast, like when it comes to software development, like that's always going through wacky changes, right?

979
00:57:15,320 --> 00:57:18,120
Like, like we used to have whatever it is C was.

980
00:57:18,140 --> 00:57:21,760
And then, and then we had this crazy thing of Java, like what that is.

981
00:57:21,760 --> 00:57:24,460
And then like all the Ruby people were like static typing.

982
00:57:24,520 --> 00:57:24,980
Oh my.

983
00:57:25,480 --> 00:57:27,980
And, and like, you know, all, and then, and then so quaint.

984
00:57:27,980 --> 00:57:36,080
And then the kind of like idea of, of like, whatever weird magic spring does with injection and introspection, all that kind of came along.

985
00:57:36,160 --> 00:57:42,940
Like nowadays, nowadays, for some reason, like all these like more statically type stateful things are like concurrency is a big deal.

986
00:57:43,040 --> 00:57:47,200
So like, there's always a lot of going back and forth and what's important in programming languages.

987
00:57:47,680 --> 00:57:48,280
Rediscovering something.

988
00:57:48,280 --> 00:57:48,720
Yeah, yeah.

989
00:57:48,780 --> 00:57:54,880
But, but in the state world, like every now and then there's these little brush ups of no SQL stuff that come up.

990
00:57:55,000 --> 00:57:58,860
But then eventually it goes back to what we're talking about is like, oh man, this is a really hard problem.

991
00:57:58,860 --> 00:58:06,240
Like, it doesn't seem like people have ever cracked the difficulty of running that long term, right?

992
00:58:06,440 --> 00:58:08,420
Operating it seems like the very difficult thing.

993
00:58:08,480 --> 00:58:10,800
And I think that's why we haven't seen that kind of churn there.

994
00:58:10,820 --> 00:58:14,220
Because let's be honest, like you lose the data, we got a problem.

995
00:58:14,500 --> 00:58:15,020
Yeah, yeah, yeah.

996
00:58:15,020 --> 00:58:21,440
You know, I mean, if you had a database where, you know, like one out of 10 writes didn't work, that'd be an issue.

997
00:58:21,740 --> 00:58:26,960
You know, I mean, if you, because I mean, so many of our companies now, they are just billions and billions of lines and databases.

998
00:58:27,640 --> 00:58:29,340
And if those go away, it's like, what do we have?

999
00:58:29,400 --> 00:58:29,860
I don't know.

1000
00:58:29,940 --> 00:58:30,840
I mean, that's what it is.

1001
00:58:30,880 --> 00:58:31,860
That's our customer data.

1002
00:58:32,080 --> 00:58:32,340
That's right.

1003
00:58:32,480 --> 00:58:33,660
You just have a stateless app.

1004
00:58:33,860 --> 00:58:35,600
You know what?

1005
00:58:35,700 --> 00:58:38,200
It scales really well and it's super fast.

1006
00:58:38,420 --> 00:58:38,680
That's right.

1007
00:58:38,940 --> 00:58:40,720
We just pipe it to dev and all.

1008
00:58:40,840 --> 00:58:41,180
It's fine.

1009
00:58:41,660 --> 00:58:47,240
And so I think that's part of it is there, you know, I mean, I'm not trying to diminish what we do as app developers by any stretch.

1010
00:58:47,360 --> 00:58:49,460
But there's a responsibility there.

1011
00:58:49,560 --> 00:58:51,220
Like, no, we can't lose data.

1012
00:58:51,600 --> 00:58:53,020
You know, this has to be backed up.

1013
00:58:53,060 --> 00:58:53,540
Yeah, yeah.

1014
00:58:53,540 --> 00:58:54,720
This is an asset.

1015
00:58:55,000 --> 00:58:58,500
You know, we can put a monetary value on this and we need to protect that.

1016
00:58:58,500 --> 00:59:08,860
And so we can't be as cavalier maybe with that as we can be in maybe our process or in some of the other things that we do where we can just try these experiments and see what happens.

1017
00:59:09,220 --> 00:59:09,380
Yeah.

1018
00:59:09,600 --> 00:59:09,780
Yeah.

1019
00:59:09,840 --> 00:59:13,860
And I mean, no CIO wants to say, yes, please experiment with my data.

1020
00:59:13,940 --> 00:59:14,620
That would be wonderful.

1021
00:59:14,720 --> 00:59:14,920
Yeah, yeah, yeah.

1022
00:59:15,040 --> 00:59:16,200
That will get me a promotion.

1023
00:59:16,500 --> 00:59:16,660
Yeah.

1024
00:59:16,800 --> 00:59:20,440
No, like I was joking, CIOs don't want a stateless business.

1025
00:59:20,560 --> 00:59:20,780
No.

1026
00:59:20,940 --> 00:59:22,560
Like, that's not what they're interested in.

1027
00:59:22,580 --> 00:59:24,540
That doesn't work well in the P&L sheet, does it?

1028
00:59:24,540 --> 00:59:24,980
No, no.

1029
00:59:24,980 --> 00:59:36,620
And so, I mean, I know I'm repeating this that I don't know this domain, but it does seem like that would be one of the more attractive, or I should say the next attractive thing for, like, cloud services, right?

1030
00:59:36,720 --> 00:59:44,340
And it's hard to, I guess at a certain scale for private cloud, it would make sense because you could centralize the data management and things like that.

1031
00:59:44,340 --> 00:59:58,800
But definitely in a public cloud instance, and this is not so much true, but it does seem like potentially an evolution of easing the operations of a database in the sense of, like, as a developer, I don't have to operate the database.

1032
00:59:59,060 --> 01:00:09,040
Like, I have to work within the constraints it gives me, but I don't actually have to, like, keep it up and running and make sure that the, I don't even know what people use, Fiber Channel, whatever.

1033
01:00:09,180 --> 01:00:13,020
I don't have to know what the storage array is doing and, like, and what the interconnects are.

1034
01:00:13,120 --> 01:00:15,000
Like, someone else handles all of that for me.

1035
01:00:15,200 --> 01:00:17,060
Could be schools putting stuff in a tree, whatever.

1036
01:00:17,220 --> 01:00:17,640
Right, right.

1037
01:00:17,700 --> 01:00:18,280
As long as it works.

1038
01:00:18,280 --> 01:00:34,740
And so there is, like, it does seem like if you make it easier, kind of ironically, to manage and bring databases up and down and all of that, then maybe there is some hope in making data or state, I should keep saying, easier.

1039
01:00:35,340 --> 01:00:35,780
But I don't know.

1040
01:00:35,820 --> 01:00:38,860
It's just such a weird, it's an annoying problem.

1041
01:00:40,940 --> 01:00:48,580
And there doesn't, again, I don't know of, like, many people who, like, are fixing that problem other than sort of window dressing.

1042
01:00:48,800 --> 01:00:48,960
Sure.

1043
01:00:49,000 --> 01:00:55,980
Of, like, let's genericize a big honking database somewhere and then you can just kind of generically stuff stuff in there.

1044
01:00:56,400 --> 01:01:09,020
And, I mean, the only thing that comes to mind is, I don't know, like, Google infrastructure very well, but I think they have, like, you know, two or three systems that, like, is, like, this is the database and you have to use this and we will run it for you.

1045
01:01:09,020 --> 01:01:12,020
And, like, if you don't like the way it operates, too bad.

1046
01:01:12,140 --> 01:01:13,120
That's terrible for you.

1047
01:01:13,160 --> 01:01:18,060
Which is tragic because that's why we didn't like databases in the first place.

1048
01:01:18,060 --> 01:01:18,200
Sure.

1049
01:01:18,700 --> 01:01:18,880
Sure.

1050
01:01:19,140 --> 01:01:26,040
That's why no one really likes DBAs because that's their attitude is, like, your query is nice, but you cannot execute it.

1051
01:01:26,540 --> 01:01:28,920
DBAs also have a thing against, like, vowels, right?

1052
01:01:29,000 --> 01:01:32,320
I mean, you ever see, like, you hand them, like, your data model and they, like, strip everything out.

1053
01:01:32,420 --> 01:01:33,700
Yeah, but they only have 32 characters.

1054
01:01:33,700 --> 01:01:34,080
That's right.

1055
01:01:34,160 --> 01:01:36,260
There's all these limits of things that they have to deal with.

1056
01:01:36,260 --> 01:01:37,960
So, yeah, I mean, it's a hard problem.

1057
01:01:38,120 --> 01:01:38,900
There's no getting around it.

1058
01:01:39,020 --> 01:01:43,560
You know, and, I mean, for better or worse, I've largely stayed away from the data side of the house.

1059
01:01:43,640 --> 01:01:44,840
I mean, I've been more of a front-end guy.

1060
01:01:45,260 --> 01:01:49,360
You know, kind of like once the data gets to the server, it's like, well, somebody else's problem now, you know.

1061
01:01:49,560 --> 01:01:52,680
And so I haven't had that kind of exposure there, you know.

1062
01:01:52,700 --> 01:01:58,040
But it's an interesting part of this and it's something that I think we ignore to a certain extent in our own peril.

1063
01:01:58,040 --> 01:02:05,240
You know, it is important that we think about how do we store this and where do we store it and what is the right choice for this particular problem.

1064
01:02:05,240 --> 01:02:07,700
Well, we'll have to get our buddy Josh Long to do a new demo.

1065
01:02:07,840 --> 01:02:08,260
There you go.

1066
01:02:08,440 --> 01:02:09,060
That involves state.

1067
01:02:09,300 --> 01:02:10,460
Yes, yes, we will.

1068
01:02:10,540 --> 01:02:11,980
We'll see if we can make him do that.

1069
01:02:12,180 --> 01:02:15,240
Well, when he's doing it, does he still do the reservation demo?

1070
01:02:15,860 --> 01:02:16,160
Yes.

1071
01:02:16,520 --> 01:02:20,560
Whenever he's doing that, I'll have to go up midway and pull the plug on his computer and be like, now what?

1072
01:02:20,560 --> 01:02:20,960
Does it still work?

1073
01:02:21,760 --> 01:02:25,000
Is that stored in a durable data location of some sort or another?

1074
01:02:25,120 --> 01:02:25,960
Yeah, yeah, yeah.

1075
01:02:26,180 --> 01:02:28,040
I mean, obviously, that's not the point of that demo.

1076
01:02:28,420 --> 01:02:28,800
But, yeah.

1077
01:02:29,280 --> 01:02:40,380
No, and in the defensive stuff we were talking about, I mean, I think that the evolution of how much easier and reliably it is to write applications, even though they're stateless.

1078
01:02:40,380 --> 01:02:48,300
Like, that is, in my little career, it is remarkable that it's just, it doesn't take as long just to, like, write a reservation system.

1079
01:02:48,480 --> 01:02:48,580
Agreed.

1080
01:02:48,740 --> 01:02:55,660
Like, it's, and even more importantly, I think the thing that gets missed out a lot is it's one thing to be easier to write, which it certainly is.

1081
01:02:56,060 --> 01:02:59,320
And nowadays, it's also easier to, like, run successfully.

1082
01:02:59,600 --> 01:02:59,740
Yeah.

1083
01:02:59,960 --> 01:03:03,660
To, like, not screw up when you actually want to run it.

1084
01:03:03,800 --> 01:03:07,700
Like, it's easier to write it in a way that's, I don't know, DevOps friendly or whatever.

1085
01:03:07,700 --> 01:03:10,600
Well, and to your point, this stuff is getting easier, and I think that's a good thing.

1086
01:03:10,820 --> 01:03:16,720
And it's allowing us to solve problems faster and be more responsive and be better partners to the business side of the house.

1087
01:03:17,360 --> 01:03:18,540
You know, and it is interesting.

1088
01:03:18,660 --> 01:03:32,200
I was playing around with some boot stuff over the last summer, and I was, to me, being a longtime Java guy, I did feel like it was cheating because I had this little simple app I put together, and I had more lines of JavaScript for my front end than I had Java for my back end.

1089
01:03:32,340 --> 01:03:32,800
Yeah, yeah.

1090
01:03:33,220 --> 01:03:41,600
And remember, when this was so much harder, you know, I mean, I'm old enough that, you know, Java in a nutshell book actually was thin, you know, it wasn't like this 900-page home.

1091
01:03:41,940 --> 01:03:51,200
And, you know, but in the grand scheme of things, that's a huge win because I'm not dealing with some of that low-level stuff that I had to do 20 years ago.

1092
01:03:51,420 --> 01:03:51,620
Yeah.

1093
01:03:51,780 --> 01:03:56,560
And that's better for all of us, you know, because I don't want to deal with that low-level stuff.

1094
01:03:56,660 --> 01:04:03,980
Now, what's fascinating to me is from the first time, we basically showed a business person, like, you could do that?

1095
01:04:04,040 --> 01:04:05,440
And we're like, yeah, sure, we can do that with a computer.

1096
01:04:05,880 --> 01:04:10,200
Like, the demand for what they want from us just keeps outstripping our ability to supply it.

1097
01:04:10,260 --> 01:04:15,500
And we keep coming up with these better and faster ways of doing things, and the business just keeps asking for more.

1098
01:04:15,560 --> 01:04:15,960
Yeah, yeah.

1099
01:04:16,020 --> 01:04:18,000
You know, okay, can you turn that to 11 now?

1100
01:04:18,140 --> 01:04:20,020
And we just keep reacting to that.

1101
01:04:20,260 --> 01:04:20,880
You know, I don't know.

1102
01:04:20,940 --> 01:04:23,520
I don't think we're ever going to find that place where we're, like, kind of sitting back.

1103
01:04:23,520 --> 01:04:41,780
Yeah, no, that's a good, like, vaguely related last topic before we wrap up is, like, I'm sure you've experienced this, but it's always notable, I think, is the uncharged word you would use, that when you come over to Europe, and here we are in Paris, which I believe is located in France.

1104
01:04:41,900 --> 01:04:42,520
I think so, yes.

1105
01:04:42,520 --> 01:04:43,160
That's my understanding.

1106
01:04:43,160 --> 01:04:48,620
One of the things people tell you is basically, like, well, we can't actually get rid of anyone who works for us.

1107
01:04:49,180 --> 01:04:53,020
So anytime you're pitching lower headcount, that's not going to be effective, right?

1108
01:04:53,080 --> 01:05:04,080
And it's almost like a challenge they throw out of just, like, you know, the punchline to lots of your business value jokes always ends up fire people, right, in order to achieve value.

1109
01:05:04,300 --> 01:05:10,760
But, you know, I mean, this is, like, it always depends on your audience and how nice you want to be.

1110
01:05:10,760 --> 01:05:20,260
But, like, just as you were illustrating, right, like, the goal is not so much to get rid of people, it's to, like, get each individual to do more work in the same amount of time.

1111
01:05:20,480 --> 01:05:21,260
Or higher value.

1112
01:05:21,360 --> 01:05:22,140
Yeah, yeah, no, exactly.

1113
01:05:22,200 --> 01:05:22,680
That's what I mean.

1114
01:05:22,740 --> 01:05:28,300
It's like, well, I mean, if you can speed them up and they, I mean, I guess I'm overthinking it.

1115
01:05:28,360 --> 01:05:35,980
Like, if you can do five operations in an hour, then that's expensive versus if you could do 5,000 of those operations in an hour.

1116
01:05:36,080 --> 01:05:38,480
So speeding up things can bring down the value.

1117
01:05:38,720 --> 01:05:42,500
But to your point, they can do more important things.

1118
01:05:42,620 --> 01:05:42,740
Right.

1119
01:05:42,840 --> 01:05:45,940
And I never like that phrasing because it sounds like, well, when does that ever happen?

1120
01:05:46,040 --> 01:05:48,220
But it's more that you can do more things.

1121
01:05:48,460 --> 01:05:48,540
Right.

1122
01:05:48,620 --> 01:05:50,280
The business can expect more from you.

1123
01:05:50,460 --> 01:05:52,420
And so, you know, you don't have to fire these people.

1124
01:05:52,420 --> 01:06:03,140
Well, I mean, to your point, I remember building an app, God, 20 years ago now where, I mean, we were basically building the webpages with a bunch of print lines.

1125
01:06:03,300 --> 01:06:04,420
I mean, that's really what it boiled down to.

1126
01:06:04,440 --> 01:06:04,840
Yeah, yeah, yeah.

1127
01:06:04,840 --> 01:06:06,060
Because that's what we had to do.

1128
01:06:06,220 --> 01:06:06,860
I mean, that's…

1129
01:06:06,860 --> 01:06:09,020
Well, that's sort of what it boils down to at the core, right?

1130
01:06:09,120 --> 01:06:09,700
Well, that's true.

1131
01:06:09,740 --> 01:06:12,560
Well, I mean, if we're really getting specific, it's a bunch of zeros and ones.

1132
01:06:12,780 --> 01:06:17,580
The web server has this stream and then it just, it gives it to something.

1133
01:06:17,800 --> 01:06:17,900
Right.

1134
01:06:17,900 --> 01:06:20,840
And then you've got to write your junk into it and then it streams it back.

1135
01:06:21,260 --> 01:06:29,620
You know, and so when I consider the amount of effort it took to put a web front end onto a relational database.

1136
01:06:30,060 --> 01:06:30,460
Yeah, yeah.

1137
01:06:30,460 --> 01:06:33,360
Take some data from someone and put it over here for storage.

1138
01:06:33,940 --> 01:06:35,160
It was immense.

1139
01:06:35,340 --> 01:06:40,040
I mean, it took weeks to do things that right now you and I could spin it up in five minutes.

1140
01:06:40,940 --> 01:06:47,820
To me, that's a huge win because I'm not dealing with all these low-level, painful things that I had to do.

1141
01:06:48,180 --> 01:06:48,740
Yeah, yeah.

1142
01:06:49,120 --> 01:06:59,500
You know, I mean, I remember at one point early on in my career, I wrote a bunch of really weird JavaScript-y stuff to allow you to, like, edit stuff directly on the page and add rows on the page.

1143
01:06:59,640 --> 01:07:01,180
And, I mean, it was an immense amount of JavaScript.

1144
01:07:01,180 --> 01:07:03,540
You had the old XML HTTP request.

1145
01:07:03,640 --> 01:07:03,960
Oh, yeah.

1146
01:07:04,200 --> 01:07:05,560
This was before XHR.

1147
01:07:05,560 --> 01:07:06,880
This is how old I am, right?

1148
01:07:07,280 --> 01:07:12,060
And so the amount of JavaScript it took to do that was crazy.

1149
01:07:12,280 --> 01:07:14,980
And it was because I wasn't very good at JavaScript at the time.

1150
01:07:15,220 --> 01:07:15,660
Yeah, yeah, yeah.

1151
01:07:15,660 --> 01:07:17,760
It was not the best code ever.

1152
01:07:17,760 --> 01:07:19,680
Yeah, Netscape had something for that a long time ago, right?

1153
01:07:19,680 --> 01:07:25,800
And, you know, I got lots of NANDs and all sorts of other crazy stuff as I slapped this thing together with bubblegum and bailing twine.

1154
01:07:26,680 --> 01:07:29,780
Well, now you fast-forwarded it today, and I don't have to worry about that.

1155
01:07:30,200 --> 01:07:31,200
I can just use React.

1156
01:07:31,400 --> 01:07:31,820
Yeah, yeah.

1157
01:07:31,820 --> 01:07:33,300
Or I can use Angular, you know.

1158
01:07:33,420 --> 01:07:36,680
And a whole class of problems are solved for me.

1159
01:07:37,260 --> 01:07:39,940
I just grab this thing, and I'm working with a higher level of abstraction.

1160
01:07:40,240 --> 01:07:44,220
Yeah, and you don't need a Netscape server to run JavaScript on the server side.

1161
01:07:44,360 --> 01:07:46,340
You can run it on the server side willy-nilly.

1162
01:07:46,340 --> 01:07:50,220
I don't have to worry about issues where it worked in Netscape, and it didn't work in IDE.

1163
01:07:50,580 --> 01:07:54,300
Yeah, you remember when that came out, like Netscape was running JavaScript on the server side?

1164
01:07:54,360 --> 01:07:59,600
I remember, that must have been in the late 90s, and I remember I spent a couple days reading whatever giant document they had.

1165
01:08:00,220 --> 01:08:02,520
And one, I was very young, so it was very confusing.

1166
01:08:03,060 --> 01:08:05,580
But two, I remember thinking, like, why would you ever want to do this?

1167
01:08:06,160 --> 01:08:09,100
And then fast-forward today, and what's one of our most popular development of ours?

1168
01:08:09,100 --> 01:08:09,460
Exactly.

1169
01:08:09,580 --> 01:08:11,200
It's JavaScript on the server.

1170
01:08:11,380 --> 01:08:11,900
Yeah, yeah.

1171
01:08:11,900 --> 01:08:16,860
And there's a whole generation of us with graying beards that are like, why would you ever want to do this?

1172
01:08:17,920 --> 01:08:18,540
That's right.

1173
01:08:18,940 --> 01:08:25,720
All right, well, in a very non-creepy way, if people wanted to follow you around on the Internet, where would they go to?

1174
01:08:25,740 --> 01:08:29,340
You can find me on Twitter at ntshutta, N-T-S-C-H-U-T-T-A.

1175
01:08:29,500 --> 01:08:31,200
You can also find my website.

1176
01:08:31,500 --> 01:08:32,700
Yeah, and you have...

1177
01:08:32,700 --> 01:08:36,580
What are, like, your top two, three presentations that are recorded out there?

1178
01:08:36,580 --> 01:08:37,300
Oh, geez, that's interesting.

1179
01:08:37,500 --> 01:08:40,720
I think there's a copy of Sifting Technologies out there somewhere.

1180
01:08:40,900 --> 01:08:41,860
Sifting Technologies.

1181
01:08:41,980 --> 01:08:42,200
Yep.

1182
01:08:42,300 --> 01:08:42,560
Okay.

1183
01:08:42,560 --> 01:08:45,340
So, I've spent a lot of my career evaluating different things.

1184
01:08:45,500 --> 01:08:45,820
Sifting.

1185
01:08:46,040 --> 01:08:46,600
Yep, exactly.

1186
01:08:46,760 --> 01:08:48,500
Sifting, which one of these, you know.

1187
01:08:49,240 --> 01:08:52,840
It actually grew out of a talk I did a couple years ago comparing Angular to React.

1188
01:08:53,500 --> 01:09:04,360
And after, like, the third or fourth time I did the talk, I realized that the more interesting part of this was not the specific comparison between Angular and React, but more the how do you compare...

1189
01:09:04,360 --> 01:09:04,840
Angular and React and everything.

1190
01:09:04,960 --> 01:09:05,800
Angular and React.

1191
01:09:05,880 --> 01:09:06,060
Yeah.

1192
01:09:06,360 --> 01:09:13,180
You know, because it was very reminiscent of work I've done, you know, throughout my career to compare X and Y or X, Y, and Z.

1193
01:09:13,420 --> 01:09:15,960
And so, that's what kind of morphed into that.

1194
01:09:16,300 --> 01:09:19,440
I've been doing this Cloud Native 101 a bunch, you know, which I think is kind of interesting.

1195
01:09:19,760 --> 01:09:23,040
You know, and that just kind of gets into all the nuance of that, the 12 factors and all that fun stuff.

1196
01:09:23,040 --> 01:09:23,620
Yeah, there's a good...

1197
01:09:23,620 --> 01:09:24,380
You've seen a couple versions of that.

1198
01:09:24,380 --> 01:09:30,040
There's a good, what would you say, depending on how you give it, like, a three to five minute discussion of each factor.

1199
01:09:30,300 --> 01:09:30,920
Yeah, yeah.

1200
01:09:30,920 --> 01:09:34,240
And the motivations and the consequences and sort of what they mean.

1201
01:09:34,340 --> 01:09:34,500
Yeah.

1202
01:09:34,560 --> 01:09:36,940
And we talk about microservices and we talk about serverless.

1203
01:09:37,020 --> 01:09:37,700
Oh, yeah, yeah, yeah.

1204
01:09:37,700 --> 01:09:38,520
That's in there, too.

1205
01:09:38,640 --> 01:09:40,300
You got to have some buzzwords in there, right?

1206
01:09:40,300 --> 01:09:40,540
Yeah.

1207
01:09:40,600 --> 01:09:42,040
That's nature of the beast, so...

1208
01:09:42,040 --> 01:09:51,020
Yeah, someone sent me an email that they wanted me to come give a talk on, like, trends, which is always a fraught topic.

1209
01:09:52,160 --> 01:09:54,360
It's hard to do that in a useful way, but...

1210
01:09:54,360 --> 01:10:00,960
Yeah, I think, I mean, and that comes to mind because I think those three things, or there's four things you talk about in that talk, which is, like, cloud.

1211
01:10:01,240 --> 01:10:02,080
Yeah, what is it?

1212
01:10:02,100 --> 01:10:09,660
There's a trend, and then there's 12-factor apps, which is a trend, and then you have microservices, and then you got, like, are we allowed to say serverless?

1213
01:10:09,760 --> 01:10:10,280
I think so.

1214
01:10:10,400 --> 01:10:12,000
We can call it FAZ, if that makes you feel better.

1215
01:10:12,000 --> 01:10:12,900
FAZ, okay, okay.

1216
01:10:13,980 --> 01:10:15,300
Is that what that guy was saying today?

1217
01:10:15,340 --> 01:10:17,360
I thought he was saying YAS, but maybe it was FAZ.

1218
01:10:17,380 --> 01:10:17,760
Maybe, I don't know.

1219
01:10:17,760 --> 01:10:21,680
See, I like architect as a service, except I don't like how the acronym is pronounced.

1220
01:10:21,960 --> 01:10:23,100
That's the unfortunate part there.

1221
01:10:23,420 --> 01:10:25,300
Yeah, that's a good joke.

1222
01:10:25,380 --> 01:10:28,980
I used to ask, I used to joke about the three cloud asses, right?

1223
01:10:29,080 --> 01:10:31,540
Like, it's that unfortunate thing that you have there.

1224
01:10:31,660 --> 01:10:34,520
I think anything now can end in as a service.

1225
01:10:34,660 --> 01:10:35,060
That's right.

1226
01:10:35,240 --> 01:10:36,760
You know, we can probably get pizza as a service.

1227
01:10:36,920 --> 01:10:39,980
So, do you have a third presentation you'd recommend?

1228
01:10:39,980 --> 01:10:41,140
Oh, I've got a bunch of different ones.

1229
01:10:41,900 --> 01:10:42,540
Let's see, what's another?

1230
01:10:43,020 --> 01:10:44,700
Production Hardened Services is another one.

1231
01:10:44,740 --> 01:10:45,480
Production Hardened.

1232
01:10:45,580 --> 01:10:45,800
Yeah.

1233
01:10:45,960 --> 01:10:52,120
So, that's one of the things we don't always pay attention to, and we have this crazy cloud environment with lots of microservices.

1234
01:10:52,340 --> 01:10:57,900
You know, we've got all these spinning plates, and we confer an awful lot of trust on that service when we deploy it.

1235
01:10:58,040 --> 01:11:01,680
Because it's going to interact with a whole bunch of other services, and potentially in non-deterministic ways.

1236
01:11:02,180 --> 01:11:05,860
How do we make sure that we didn't just put something in our environment that's going to bring the whole thing down?

1237
01:11:06,460 --> 01:11:13,780
You know, so it's what kind of stuff do we need to be thinking about as we enter this era of not one app that we can step through in a debugger,

1238
01:11:13,880 --> 01:11:21,400
but five, ten, fifteen, a hundred services that are all interacting in unique, interesting ways that we may or may not understand.

1239
01:11:21,900 --> 01:11:22,080
Yeah.

1240
01:11:22,080 --> 01:11:25,900
So, it gets into a lot of the things that we need to try to do this in a way that will maintain sanity.

1241
01:11:25,900 --> 01:11:30,720
I mean, clearly, unlike those monitoring and log dummies, you're going to need some advanced analytics.

1242
01:11:31,080 --> 01:11:36,220
You're going to need some monitoring and some logging and some alerting and a whole bunch of other stuff.

1243
01:11:36,320 --> 01:11:40,560
But it really tries to drive into how do we have this healthy microservices biome.

1244
01:11:40,700 --> 01:11:44,540
You need some adaptive baselining and application tracing.

1245
01:11:44,920 --> 01:11:45,020
Word.

1246
01:11:45,160 --> 01:11:46,460
That's what's going to save us.

1247
01:11:46,580 --> 01:11:49,800
Well, as always, this has been Pivotal Conversations.

1248
01:11:49,800 --> 01:11:56,200
If you want to get the most recent episodes or peruse our back catalog, because you have a few things better to do,

1249
01:11:56,660 --> 01:11:59,860
you go to SoundCloud.com slash Pivotal Conversations.

1250
01:12:00,120 --> 01:12:05,340
And increasingly, not on Thursday, but it's traditionally on Thursday.

1251
01:12:05,340 --> 01:12:07,380
We post the full show notes for this.

1252
01:12:07,460 --> 01:12:10,760
I'll see if I can round up some of the talks that Nate mentioned here.

1253
01:12:11,420 --> 01:12:12,640
And I don't know.

1254
01:12:12,800 --> 01:12:16,120
Maybe I'll find some old 2002 literature on how, oh, I know.

1255
01:12:16,860 --> 01:12:23,060
IBM's autonomic computing was like the height of the advanced analytics.

1256
01:12:23,580 --> 01:12:28,020
It's a really good paper, if you don't remember that, from either 99 or 2000.

1257
01:12:28,440 --> 01:12:32,460
And you could just kind of like shift it into the way we talk about things now.

1258
01:12:32,580 --> 01:12:33,760
And it's a little delightful.

1259
01:12:33,820 --> 01:12:35,960
It's kind of like the flying car of cloud.

1260
01:12:36,140 --> 01:12:36,340
Sure.

1261
01:12:37,380 --> 01:12:38,660
I don't know if that's a good analogy.

1262
01:12:39,200 --> 01:12:41,820
Anyways, yeah, show notes.

1263
01:12:43,260 --> 01:12:44,540
You can find those there.

1264
01:12:45,120 --> 01:12:46,980
And with that, we'll see everyone next time.

1265
01:12:47,160 --> 01:12:47,520
Bye-bye.
