WEBVTT

1
00:00:06.120 --> 00:00:09.080
<v Speaker 1>Hey everybody, and welcome to another episode of the Ruby

2
00:00:09.160 --> 00:00:12.359
<v Speaker 1>Rogues podcast. This week, on our panel we have Dave Kamia.

3
00:00:12.599 --> 00:00:16.120
<v Speaker 1>Hey everyone, I'm Charles max Food from duv chat dot tv. Dave,

4
00:00:16.160 --> 00:00:17.920
<v Speaker 1>It's nice to do a podcast with you again.

5
00:00:18.440 --> 00:00:19.719
<v Speaker 2>It's been a while, hasn't it.

6
00:00:20.320 --> 00:00:22.960
<v Speaker 1>I know, I keep winding up showing up when you

7
00:00:23.000 --> 00:00:24.640
<v Speaker 1>can't make it, and then you show up when I

8
00:00:24.679 --> 00:00:28.000
<v Speaker 1>can't make it. Yeah, of course now we both show

9
00:00:28.079 --> 00:00:31.559
<v Speaker 1>up and Luke and John can't make it. So one

10
00:00:31.600 --> 00:00:33.719
<v Speaker 1>of these days we also have a special guest, and

11
00:00:33.759 --> 00:00:35.119
<v Speaker 1>that's Darren Bromer.

12
00:00:35.240 --> 00:00:36.359
<v Speaker 3>Did I say that right, Darren?

13
00:00:36.640 --> 00:00:40.200
<v Speaker 4>Yeah, Darren Bramer, Yeah, Bramer. Ah, I had a oe,

14
00:00:40.520 --> 00:00:42.719
<v Speaker 4>said German. German a sound.

15
00:00:43.119 --> 00:00:44.560
<v Speaker 3>Ah nice, sou.

16
00:00:44.719 --> 00:00:46.560
<v Speaker 1>Do you want to introduce yourself, let people know who

17
00:00:46.640 --> 00:00:48.560
<v Speaker 1>you are while you're important and famous and all that

18
00:00:48.600 --> 00:00:49.200
<v Speaker 1>cool stuff.

19
00:00:50.200 --> 00:00:52.159
<v Speaker 4>Absolutely? Yeah. Well, first of all, thanks a lot for

20
00:00:52.200 --> 00:00:53.920
<v Speaker 4>having me on here. It's great to talk with you guys.

21
00:00:54.479 --> 00:00:57.640
<v Speaker 4>So I've been engineer engineering my whole life. I will

22
00:00:57.679 --> 00:01:00.479
<v Speaker 4>admit that I discovered Ruby a little bit later in

23
00:01:00.520 --> 00:01:02.960
<v Speaker 4>my career. I was the Java guy for quite a

24
00:01:03.039 --> 00:01:06.280
<v Speaker 4>while and going all the way back to two thousand

25
00:01:06.319 --> 00:01:08.239
<v Speaker 4>and two, I'm going to date myself here. I wrote

26
00:01:08.239 --> 00:01:12.560
<v Speaker 4>a book on Java J twoee. Actually, so there you go.

27
00:01:12.920 --> 00:01:16.239
<v Speaker 4>There's a data bit of technology a little bit, and

28
00:01:16.280 --> 00:01:19.799
<v Speaker 4>so I've done all types of engineering managed teams. I

29
00:01:19.840 --> 00:01:22.840
<v Speaker 4>decided I wanted to go back get hands on keyboard.

30
00:01:22.879 --> 00:01:26.280
<v Speaker 4>After doing that, went to Amazon Web Services, had a

31
00:01:26.319 --> 00:01:30.159
<v Speaker 4>great time working there, learned a whole lot, had a

32
00:01:30.200 --> 00:01:32.239
<v Speaker 4>lot of fun, met a lot of great people, and

33
00:01:32.280 --> 00:01:34.640
<v Speaker 4>then wanted to get more into kind of combined the

34
00:01:34.640 --> 00:01:37.719
<v Speaker 4>two things I really really enjoy, so the technology obviously,

35
00:01:37.760 --> 00:01:41.519
<v Speaker 4>but also communications. And so now I kind of kind

36
00:01:41.560 --> 00:01:44.519
<v Speaker 4>of went and switched gears of now the developer evangelist

37
00:01:44.599 --> 00:01:48.000
<v Speaker 4>for engine Yard, and we have platforms of service tools.

38
00:01:48.040 --> 00:01:49.879
<v Speaker 4>But I get to do my two favorite things, which

39
00:01:49.879 --> 00:01:53.680
<v Speaker 4>are play with technology and share that with people, write

40
00:01:53.680 --> 00:01:54.920
<v Speaker 4>about it and talk about it.

41
00:01:55.079 --> 00:01:55.519
<v Speaker 3>Awesome.

42
00:01:55.560 --> 00:01:58.159
<v Speaker 1>And yeah, we ran across this article from you talking

43
00:01:58.200 --> 00:02:03.400
<v Speaker 1>about architecture and micro services and stuff, which is funny

44
00:02:03.439 --> 00:02:05.840
<v Speaker 1>because I think on JavaScript jabber. We did an episode

45
00:02:05.840 --> 00:02:09.759
<v Speaker 1>on micro front ends about three weeks ago. We recorded it. Anyway,

46
00:02:10.199 --> 00:02:12.360
<v Speaker 1>we're a little more ahead on that, so it's probably

47
00:02:12.360 --> 00:02:14.680
<v Speaker 1>going to come out in a few weeks. But it's

48
00:02:14.759 --> 00:02:17.080
<v Speaker 1>just interesting because people are talking about this and how

49
00:02:17.120 --> 00:02:21.280
<v Speaker 1>to break up application logic and stuff like that, and

50
00:02:21.960 --> 00:02:24.240
<v Speaker 1>of course in RAILS we all talked about the beautiful

51
00:02:24.280 --> 00:02:27.319
<v Speaker 1>monolith and you know how that all kind of comes

52
00:02:27.319 --> 00:02:30.400
<v Speaker 1>together to put it all in one app. And so, yeah,

53
00:02:30.560 --> 00:02:32.639
<v Speaker 1>I'm kind of interested because I don't know that I

54
00:02:32.719 --> 00:02:36.680
<v Speaker 1>necessarily got the breakdown on where you come down on this.

55
00:02:36.800 --> 00:02:40.000
<v Speaker 1>And I remember early in my career, like soa service

56
00:02:40.039 --> 00:02:42.639
<v Speaker 1>oriented architecture was a big thing, and I think I

57
00:02:42.680 --> 00:02:44.120
<v Speaker 1>gave a whole bunch of talks and gave a whole

58
00:02:44.120 --> 00:02:46.800
<v Speaker 1>bunch of bad advice because it was the cool thing

59
00:02:46.800 --> 00:02:48.680
<v Speaker 1>to do, and I was really in love with the idea.

60
00:02:49.240 --> 00:02:51.879
<v Speaker 1>But you know, been built a few apps and took

61
00:02:51.879 --> 00:02:54.120
<v Speaker 1>it way too far and it was like, you know

62
00:02:55.120 --> 00:02:57.080
<v Speaker 1>a lot of this stuff really does belong in its

63
00:02:57.080 --> 00:03:00.000
<v Speaker 1>own app, and then some of this stuff it started okay,

64
00:03:00.080 --> 00:03:02.199
<v Speaker 1>some of this stuff belongs in workers and some of

65
00:03:02.199 --> 00:03:04.879
<v Speaker 1>this stuff actually, you know, may belong in its own service,

66
00:03:05.039 --> 00:03:07.280
<v Speaker 1>you know, micro service. And so you know, I kind

67
00:03:07.319 --> 00:03:09.439
<v Speaker 1>of have gone back and forth as to how much

68
00:03:09.560 --> 00:03:13.080
<v Speaker 1>you want to peel off into different parts, and so

69
00:03:13.120 --> 00:03:14.800
<v Speaker 1>I'm kind of curious where you come down as far

70
00:03:14.840 --> 00:03:19.240
<v Speaker 1>as Okay, what do I break off into micro services?

71
00:03:19.319 --> 00:03:22.159
<v Speaker 1>What part do I keep in the monolith? What part

72
00:03:22.240 --> 00:03:25.759
<v Speaker 1>do I you know, and how do I break that up?

73
00:03:25.800 --> 00:03:28.159
<v Speaker 1>And then I also saw some stuff about containerization, so

74
00:03:28.639 --> 00:03:31.439
<v Speaker 1>we can I guess dive into that next. But yeah,

75
00:03:31.479 --> 00:03:33.840
<v Speaker 1>how do how do microft services kind of fit into

76
00:03:33.919 --> 00:03:34.840
<v Speaker 1>Ruby these days?

77
00:03:35.159 --> 00:03:38.319
<v Speaker 4>Yeah? So I think when you're looking at decomposing your

78
00:03:38.319 --> 00:03:41.639
<v Speaker 4>application and doing design, you know, and and and really

79
00:03:42.240 --> 00:03:45.199
<v Speaker 4>there's only one reason that we really do software design, right.

80
00:03:45.719 --> 00:03:47.960
<v Speaker 4>We do it because we're probably going to need to

81
00:03:48.039 --> 00:03:50.479
<v Speaker 4>change our application tomorrow, whether that be to fix some

82
00:03:50.560 --> 00:03:53.319
<v Speaker 4>bugs or to add some new features that people want.

83
00:03:53.879 --> 00:03:57.599
<v Speaker 4>We can't we can't, you know, add patterns and layers

84
00:03:57.639 --> 00:04:01.680
<v Speaker 4>of indirection everywhere. So we need to make choices. I

85
00:04:01.719 --> 00:04:04.599
<v Speaker 4>say that because every time you add a layer of indirection,

86
00:04:05.439 --> 00:04:08.439
<v Speaker 4>there's it's not free. There there's a there's a cost

87
00:04:08.479 --> 00:04:10.479
<v Speaker 4>to it. Right. We can't optimize to be able to

88
00:04:10.599 --> 00:04:15.199
<v Speaker 4>change every aspect of the application. You know. For example,

89
00:04:15.240 --> 00:04:17.279
<v Speaker 4>I've been on a number of projects over my career.

90
00:04:17.879 --> 00:04:19.839
<v Speaker 4>You know, the team would be, well, we need to

91
00:04:19.879 --> 00:04:21.920
<v Speaker 4>abstract this and that so that if we want to

92
00:04:21.959 --> 00:04:25.399
<v Speaker 4>swap out the database later on, we can This is

93
00:04:25.399 --> 00:04:27.680
<v Speaker 4>maybe a little less relevant now, but I think the

94
00:04:27.759 --> 00:04:30.519
<v Speaker 4>example still holds, and so there was effort spin into that. Now,

95
00:04:30.519 --> 00:04:33.680
<v Speaker 4>how many of those projects ever actually swapped out databases?

96
00:04:34.199 --> 00:04:36.680
<v Speaker 4>You know, I can think of maybe one that went

97
00:04:36.720 --> 00:04:39.360
<v Speaker 4>from a relational database to a no sequel, and they

98
00:04:39.399 --> 00:04:42.759
<v Speaker 4>would if they had to make broader changes anyway, So

99
00:04:42.959 --> 00:04:44.839
<v Speaker 4>you need to you need to think about where can

100
00:04:44.879 --> 00:04:49.839
<v Speaker 4>I decompose my logic into reusable bits. And when you

101
00:04:49.879 --> 00:04:55.480
<v Speaker 4>think about the basic rails architecture model view controller, generally speaking,

102
00:04:55.519 --> 00:04:58.800
<v Speaker 4>you try to push that logic down in that if

103
00:04:58.839 --> 00:05:01.040
<v Speaker 4>you think about it as a layer down as far

104
00:05:01.120 --> 00:05:05.000
<v Speaker 4>as you can. You know, validations you'll always need to

105
00:05:05.079 --> 00:05:08.079
<v Speaker 4>do before you persist to the database. Yeah, put it

106
00:05:08.120 --> 00:05:11.959
<v Speaker 4>in the in the model class. But it becomes very

107
00:05:12.040 --> 00:05:14.360
<v Speaker 4>tough when you think about this. You know, there's lots

108
00:05:14.360 --> 00:05:17.519
<v Speaker 4>of best practice and things about where to put quote

109
00:05:17.600 --> 00:05:22.519
<v Speaker 4>unquote business logic, and in my experience that often ends

110
00:05:22.639 --> 00:05:27.480
<v Speaker 4>up coming back to the service level or in rails,

111
00:05:27.519 --> 00:05:31.040
<v Speaker 4>you know the equivalent of a rail's action a controller method.

112
00:05:31.759 --> 00:05:34.920
<v Speaker 4>So if I'm a you want your code to mirror

113
00:05:35.079 --> 00:05:38.240
<v Speaker 4>the real world as closely as possible, and I was

114
00:05:38.439 --> 00:05:42.199
<v Speaker 4>you know, you mentioned earlier. I've probably given bad advice

115
00:05:42.240 --> 00:05:44.160
<v Speaker 4>in my career in the past too. I used to

116
00:05:44.199 --> 00:05:48.800
<v Speaker 4>be huge enthusiast of object oriented and while I think

117
00:05:48.800 --> 00:05:50.800
<v Speaker 4>it's still valuable and has its place, I think in

118
00:05:50.920 --> 00:05:54.319
<v Speaker 4>terms of decomposition, if you want to mirror the real world.

119
00:05:54.399 --> 00:05:59.360
<v Speaker 4>If I'm a customer, I don't think of objects and entities.

120
00:05:59.399 --> 00:06:02.480
<v Speaker 4>So let's say I'm going to go online to pay

121
00:06:02.560 --> 00:06:05.519
<v Speaker 4>my credit card bill. I don't think about that in

122
00:06:05.600 --> 00:06:08.439
<v Speaker 4>terms of, well, there's an account object and a vendor

123
00:06:08.920 --> 00:06:12.120
<v Speaker 4>and a payment behavior. I think about that of I'm

124
00:06:12.120 --> 00:06:14.680
<v Speaker 4>going to go pay my bill. You know, it's it's

125
00:06:14.800 --> 00:06:17.920
<v Speaker 4>an action I take, something I do. And so you

126
00:06:17.920 --> 00:06:20.399
<v Speaker 4>can try to push logic further down this stack, but

127
00:06:20.600 --> 00:06:22.959
<v Speaker 4>usually it ends up kind of bubbling back up to

128
00:06:24.079 --> 00:06:28.639
<v Speaker 4>this service layer because those are encapsulated units of work.

129
00:06:28.959 --> 00:06:33.319
<v Speaker 4>Now paying your paying your bill that now I personally

130
00:06:33.319 --> 00:06:35.360
<v Speaker 4>wouldn't do this, But let's say let's say I was

131
00:06:35.439 --> 00:06:38.759
<v Speaker 4>late on paying my bill, so I'm going to incur

132
00:06:38.839 --> 00:06:43.279
<v Speaker 4>a fee. So that's probably another service to calculate what

133
00:06:43.319 --> 00:06:45.319
<v Speaker 4>the late fee is based on when I submit it.

134
00:06:45.360 --> 00:06:48.439
<v Speaker 4>All of that so you can see you can see

135
00:06:48.439 --> 00:06:52.839
<v Speaker 4>that kind of breakdown, and so reusing those services. And actually,

136
00:06:52.839 --> 00:06:55.399
<v Speaker 4>you know, this almost gets back to like functional programming.

137
00:06:55.439 --> 00:06:57.839
<v Speaker 4>It's funny how things kind of come full circle every

138
00:06:58.480 --> 00:07:01.720
<v Speaker 4>every so often. But to me, the service level is

139
00:07:01.759 --> 00:07:04.480
<v Speaker 4>the easiest way to decompose and be close to how

140
00:07:04.839 --> 00:07:07.120
<v Speaker 4>you mirror the real world. And if you can do that,

141
00:07:07.240 --> 00:07:09.800
<v Speaker 4>if you can model it closer, you're going to be

142
00:07:10.160 --> 00:07:11.560
<v Speaker 4>you're going to be better off in the long run

143
00:07:11.600 --> 00:07:14.959
<v Speaker 4>when you need to make make changes. So now segue

144
00:07:15.000 --> 00:07:19.600
<v Speaker 4>that into micro service because microservice often has the connotation

145
00:07:19.800 --> 00:07:25.199
<v Speaker 4>of being a separate physical deployment. So there's different steps

146
00:07:25.199 --> 00:07:27.680
<v Speaker 4>you can take to migrate this. Right, So you mentioned

147
00:07:27.680 --> 00:07:30.639
<v Speaker 4>the beautiful monolith. I might have tons of code all

148
00:07:30.680 --> 00:07:34.639
<v Speaker 4>sitting there. It's in one deployable one deployable unit. You know,

149
00:07:34.759 --> 00:07:36.920
<v Speaker 4>Rome's not built in a day. I can't do all

150
00:07:36.959 --> 00:07:39.600
<v Speaker 4>of this at once. So you know, one of the

151
00:07:39.720 --> 00:07:42.879
<v Speaker 4>articles I wrote that you reference was really just well,

152
00:07:42.920 --> 00:07:45.600
<v Speaker 4>how do I take that first step? How do I

153
00:07:45.680 --> 00:07:49.639
<v Speaker 4>go from the beautiful modelith to whatever my target architecture is,

154
00:07:49.680 --> 00:07:54.839
<v Speaker 4>whatever your favored decomposition model is. So the beautiful thing.

155
00:07:55.000 --> 00:07:57.000
<v Speaker 4>One really nice thing about rails is I think it

156
00:07:57.040 --> 00:07:59.519
<v Speaker 4>helps you out here. So even in my existing code

157
00:07:59.519 --> 00:08:03.519
<v Speaker 4>base a controller action. Let's say you're using rack as

158
00:08:03.560 --> 00:08:07.800
<v Speaker 4>you're middleware. That controller action is actually a wreck its

159
00:08:07.839 --> 00:08:11.160
<v Speaker 4>own RACK application. So in the rack up file, rather

160
00:08:11.199 --> 00:08:14.600
<v Speaker 4>than just doing rails application new, you can actually just

161
00:08:14.639 --> 00:08:18.959
<v Speaker 4>point it directly to that controller action. So now you

162
00:08:18.959 --> 00:08:21.759
<v Speaker 4>can deploy that as a deployable unit. It's going to

163
00:08:21.800 --> 00:08:24.879
<v Speaker 4>use the same code base, but from a logical standpoint,

164
00:08:24.920 --> 00:08:26.759
<v Speaker 4>I've separated that out from the rest of the system.

165
00:08:26.839 --> 00:08:29.360
<v Speaker 4>I can begin to reason about it more, think about

166
00:08:30.079 --> 00:08:33.440
<v Speaker 4>what changes when, how do I reuse things? And then

167
00:08:33.559 --> 00:08:36.039
<v Speaker 4>just to tease the topic a little bit, just to

168
00:08:36.080 --> 00:08:39.000
<v Speaker 4>throw the container bit out there so it's an easier

169
00:08:39.000 --> 00:08:42.480
<v Speaker 4>migration then to make it a separate deployable unit because

170
00:08:42.480 --> 00:08:45.759
<v Speaker 4>that same image, that same codebase, I'm just going to

171
00:08:45.799 --> 00:08:48.679
<v Speaker 4>have a different rackup file that I use for each

172
00:08:48.679 --> 00:08:51.759
<v Speaker 4>of those. I can deploy those separately, I can scale

173
00:08:51.799 --> 00:08:55.600
<v Speaker 4>them independently, I can observe them. See you know how

174
00:08:55.639 --> 00:08:58.240
<v Speaker 4>they behave If one if the CPU goes off, the

175
00:08:58.320 --> 00:08:59.840
<v Speaker 4>rails on one of them is going to be easier

176
00:08:59.840 --> 00:09:04.360
<v Speaker 4>to identify where the problem was. So you don't get

177
00:09:04.360 --> 00:09:07.799
<v Speaker 4>those kind of advantages until you actually make them true

178
00:09:07.799 --> 00:09:11.159
<v Speaker 4>micro services and you get that observability, but there's a

179
00:09:11.159 --> 00:09:13.360
<v Speaker 4>lot of benefits when you start to go down that road,

180
00:09:13.440 --> 00:09:16.120
<v Speaker 4>and rails I think helps. Rails gives you tools to

181
00:09:16.159 --> 00:09:19.679
<v Speaker 4>help do that incrementally. So that's kind of an overview

182
00:09:19.679 --> 00:09:21.879
<v Speaker 4>of where I'm at. I don't I don't think there's one.

183
00:09:22.399 --> 00:09:25.919
<v Speaker 4>There's certainly not a one size fits all, but to

184
00:09:25.960 --> 00:09:30.159
<v Speaker 4>the extent that you can go with micro services to

185
00:09:30.279 --> 00:09:33.600
<v Speaker 4>break that out from a logical design perspective, and then

186
00:09:33.639 --> 00:09:38.919
<v Speaker 4>the actual deployment get the observability, scalability independence. I think

187
00:09:38.919 --> 00:09:40.480
<v Speaker 4>there's a lot of benefit there.

188
00:09:40.879 --> 00:09:44.639
<v Speaker 2>And so just because I can, I want to push

189
00:09:44.720 --> 00:09:48.519
<v Speaker 2>back just a little bit and just to get some

190
00:09:48.519 --> 00:09:54.919
<v Speaker 2>more clarifications. So when we deploy a now isolated bit

191
00:09:54.960 --> 00:10:00.399
<v Speaker 2>of code as a microservice infrastructure speaking, what is going

192
00:10:00.440 --> 00:10:04.799
<v Speaker 2>to look like as far as the database level is concerned.

193
00:10:05.360 --> 00:10:09.279
<v Speaker 2>Are we going to spin up an additional database so

194
00:10:09.440 --> 00:10:13.000
<v Speaker 2>now we have a whole new database server with a

195
00:10:13.039 --> 00:10:16.120
<v Speaker 2>new database on there, or would we just create a

196
00:10:16.200 --> 00:10:21.519
<v Speaker 2>new database within a server. So if we're running postgrads,

197
00:10:21.559 --> 00:10:24.600
<v Speaker 2>we have one instance of postgrads or a cluster, and

198
00:10:24.639 --> 00:10:27.759
<v Speaker 2>then we have a new database for this micro service

199
00:10:28.200 --> 00:10:31.240
<v Speaker 2>and that microservice only communicates to the one database or

200
00:10:31.279 --> 00:10:35.240
<v Speaker 2>do they all share the same global database.

201
00:10:35.720 --> 00:10:39.000
<v Speaker 4>Yeah, that's a great question, and you're poking at you

202
00:10:39.039 --> 00:10:42.279
<v Speaker 4>know why. You want to obviously think through these things carefully,

203
00:10:42.759 --> 00:10:45.559
<v Speaker 4>but yeah, no, it's a great question. So your your data,

204
00:10:45.600 --> 00:10:48.039
<v Speaker 4>what does your data architecture look like? If you're starting

205
00:10:48.039 --> 00:10:50.919
<v Speaker 4>out with the beautiful monolith, you do likely have that

206
00:10:51.000 --> 00:10:54.919
<v Speaker 4>single transactional database. So to the extent that you can

207
00:10:55.120 --> 00:10:59.279
<v Speaker 4>segregate out by you know which objects, which models or

208
00:10:59.360 --> 00:11:02.960
<v Speaker 4>tables are used by sets of services, You're better off

209
00:11:03.000 --> 00:11:07.080
<v Speaker 4>segregating those and making those their own deployable units. You know,

210
00:11:07.120 --> 00:11:10.399
<v Speaker 4>you're still going to have some potential level of contention

211
00:11:10.519 --> 00:11:13.120
<v Speaker 4>because you've got different apps talking to the same database,

212
00:11:13.799 --> 00:11:16.399
<v Speaker 4>and so you know one could have one could certainly

213
00:11:16.399 --> 00:11:18.559
<v Speaker 4>impact the other. You can still have a noisy neighbor

214
00:11:18.639 --> 00:11:22.799
<v Speaker 4>situation there. But as you migrate over time, if you

215
00:11:22.840 --> 00:11:28.120
<v Speaker 4>can decompose your larger architecture into those discrete topic areas

216
00:11:28.600 --> 00:11:31.679
<v Speaker 4>where you can have different databases, then you get a

217
00:11:31.720 --> 00:11:35.759
<v Speaker 4>cleaner isolation, and that typically takes folks a lot longer

218
00:11:36.039 --> 00:11:38.440
<v Speaker 4>to do. And you can also end up in the

219
00:11:38.480 --> 00:11:41.279
<v Speaker 4>spot well where I need I need data from from

220
00:11:41.320 --> 00:11:44.480
<v Speaker 4>both places, and you can end up getting into performance

221
00:11:44.519 --> 00:11:48.159
<v Speaker 4>issues because you get you know, pretty chatty between these services.

222
00:11:48.240 --> 00:11:50.879
<v Speaker 4>So so it's not it's not with it's not a

223
00:11:50.919 --> 00:11:54.600
<v Speaker 4>panacea for sure, but I think to the extent that

224
00:11:54.679 --> 00:11:58.720
<v Speaker 4>teams can start thinking in that direction and trying to

225
00:11:58.759 --> 00:12:01.320
<v Speaker 4>find those what are the what are the good isolation

226
00:12:01.440 --> 00:12:05.200
<v Speaker 4>boundaries to use? And again there is it's not a

227
00:12:05.240 --> 00:12:08.679
<v Speaker 4>black and white topic, but there's no crystal clear answer,

228
00:12:09.480 --> 00:12:12.120
<v Speaker 4>but I think there's over overall if you look at

229
00:12:12.200 --> 00:12:16.519
<v Speaker 4>how do I make changes right? Because in today's economy,

230
00:12:16.559 --> 00:12:20.120
<v Speaker 4>you know, with the pandemic and people being at home,

231
00:12:20.240 --> 00:12:24.600
<v Speaker 4>like we were already essentially a digital economy, it's almost

232
00:12:24.759 --> 00:12:28.639
<v Speaker 4>entirely that way now. So you know, we're all forced

233
00:12:28.679 --> 00:12:34.000
<v Speaker 4>to innovate so much faster, you know, deploy We were

234
00:12:34.039 --> 00:12:37.720
<v Speaker 4>already deploying continuously, and now we want to do it

235
00:12:37.759 --> 00:12:40.039
<v Speaker 4>even more. So if we don't do it fast enough,

236
00:12:40.519 --> 00:12:43.679
<v Speaker 4>someone else is going to copy our business model, We're

237
00:12:43.720 --> 00:12:46.240
<v Speaker 4>going to we're going to lose lose customers we could have.

238
00:12:46.320 --> 00:12:50.039
<v Speaker 4>So there's so much pressure to get features out there faster,

239
00:12:50.799 --> 00:12:54.440
<v Speaker 4>and so again it's you know, you can't optimize for everything,

240
00:12:54.480 --> 00:12:57.279
<v Speaker 4>but it's thinking about well, what is going to benefit

241
00:12:57.320 --> 00:13:01.080
<v Speaker 4>me to isolate where I may want to be able

242
00:13:01.120 --> 00:13:05.240
<v Speaker 4>to innovate faster move separate from the other aspects of

243
00:13:05.279 --> 00:13:08.360
<v Speaker 4>the code. One problem that and even at Amazon our

244
00:13:08.399 --> 00:13:12.200
<v Speaker 4>teams ran into this, especially some of the bigger services,

245
00:13:12.919 --> 00:13:16.360
<v Speaker 4>where you really want to get a bug fix out

246
00:13:16.440 --> 00:13:18.840
<v Speaker 4>or some feature out. But if you're all in the

247
00:13:18.879 --> 00:13:21.519
<v Speaker 4>same if it's all in the same kitten kaboodle, and

248
00:13:21.559 --> 00:13:23.360
<v Speaker 4>you've got an issue that pops up with one of

249
00:13:23.360 --> 00:13:25.200
<v Speaker 4>the other changes, you got to roll that whole thing

250
00:13:25.279 --> 00:13:28.039
<v Speaker 4>back because at the end of the day, you can't

251
00:13:28.399 --> 00:13:32.039
<v Speaker 4>have impact ongoing impact to your customers. And so that

252
00:13:33.080 --> 00:13:36.519
<v Speaker 4>is something that I think really hurts teams their velocity

253
00:13:37.159 --> 00:13:40.639
<v Speaker 4>when you've got to make sure that these twelve or

254
00:13:40.679 --> 00:13:43.919
<v Speaker 4>twenty or however many features are all working perfectly in

255
00:13:44.000 --> 00:13:46.080
<v Speaker 4>order to get all of them out the door. So

256
00:13:46.200 --> 00:13:49.039
<v Speaker 4>rather than an all or nothing, micro services really help

257
00:13:49.080 --> 00:13:52.679
<v Speaker 4>you there. So you wouldn't isolate everything, but the areas

258
00:13:52.720 --> 00:13:54.639
<v Speaker 4>where you know you're going to have a focus on,

259
00:13:55.399 --> 00:13:58.720
<v Speaker 4>or you can predict, or you already know that are

260
00:13:58.720 --> 00:14:00.879
<v Speaker 4>important to your customers, that's where you may want to

261
00:14:00.919 --> 00:14:01.440
<v Speaker 4>think about it.

262
00:14:01.879 --> 00:14:04.919
<v Speaker 1>So one other thing that I'm wondering about because Dave

263
00:14:05.039 --> 00:14:07.000
<v Speaker 1>was like, well, how do you how do you deal

264
00:14:07.039 --> 00:14:10.840
<v Speaker 1>with you know, the database level. I'm thinking, how do

265
00:14:10.879 --> 00:14:13.840
<v Speaker 1>you figure out like traffic coming in right? I mean,

266
00:14:13.840 --> 00:14:16.759
<v Speaker 1>do you have subdomains, do you have like Varnish or

267
00:14:16.799 --> 00:14:19.519
<v Speaker 1>something on the front that you know figures out this

268
00:14:19.600 --> 00:14:23.159
<v Speaker 1>path means this micro service or do you have them

269
00:14:23.240 --> 00:14:25.480
<v Speaker 1>talk to each other through I've seen like rabbit MQ,

270
00:14:26.399 --> 00:14:29.679
<v Speaker 1>which I've also seen be a headache. I mean, how

271
00:14:29.720 --> 00:14:30.679
<v Speaker 1>do you work all that out?

272
00:14:31.159 --> 00:14:34.440
<v Speaker 4>Yeah, So there's a number of solutions here. I think

273
00:14:34.440 --> 00:14:37.440
<v Speaker 4>one nice way to start is just too And here's

274
00:14:37.480 --> 00:14:40.480
<v Speaker 4>where an abstraction does actually benefit you, because you can

275
00:14:40.559 --> 00:14:43.120
<v Speaker 4>put a facade in front of your service. And so

276
00:14:43.200 --> 00:14:45.759
<v Speaker 4>maybe you start out with just actually just calling inline.

277
00:14:45.799 --> 00:14:49.200
<v Speaker 4>You're just calling the class directly in your same Ruby process.

278
00:14:49.600 --> 00:14:51.840
<v Speaker 4>But that then that positions you so that when you

279
00:14:51.879 --> 00:14:54.320
<v Speaker 4>do move it out to a service, you can swap

280
00:14:54.399 --> 00:14:56.759
<v Speaker 4>that out and it's and it's less of a problem

281
00:14:57.039 --> 00:15:01.000
<v Speaker 4>in terms of the domains I like, I personally like

282
00:15:01.080 --> 00:15:04.360
<v Speaker 4>having the different subdomains part of that. I guess the

283
00:15:04.440 --> 00:15:07.559
<v Speaker 4>product that I work with, Engineer facilitates this pretty nicely,

284
00:15:07.559 --> 00:15:10.320
<v Speaker 4>where each of your apps within the same application just

285
00:15:10.320 --> 00:15:13.759
<v Speaker 4>get different subdomains. But there's obviously different ways that you

286
00:15:13.799 --> 00:15:15.879
<v Speaker 4>can do it, and you don't actually you know, of

287
00:15:15.919 --> 00:15:17.879
<v Speaker 4>course you don't need to split that out because you

288
00:15:17.919 --> 00:15:22.480
<v Speaker 4>could just use different URL paths to accomplish a similar goal.

289
00:15:23.360 --> 00:15:26.840
<v Speaker 4>But having the if you get it into containers and

290
00:15:26.840 --> 00:15:30.159
<v Speaker 4>you can segregate, then you get those benefits of the

291
00:15:30.159 --> 00:15:33.639
<v Speaker 4>physical deployment also. So to me, I would keep I

292
00:15:33.840 --> 00:15:36.159
<v Speaker 4>prefer to try to keep it simple. You you know,

293
00:15:36.399 --> 00:15:39.399
<v Speaker 4>certainly there there's a couple different choices there. I mean

294
00:15:39.440 --> 00:15:43.279
<v Speaker 4>I would probably if you can't avoid putting messaging layers

295
00:15:43.279 --> 00:15:45.960
<v Speaker 4>in between, you know that if you can keep it simple,

296
00:15:46.080 --> 00:15:48.679
<v Speaker 4>rest calls, you're you know, unless you need to do

297
00:15:48.720 --> 00:15:51.919
<v Speaker 4>something different, I'd probably would advocate for that. You know,

298
00:15:52.039 --> 00:15:54.480
<v Speaker 4>keep it as simple as possible, but no simpler. But

299
00:15:54.559 --> 00:15:58.120
<v Speaker 4>there's also other tools and frameworks that help you do that.

300
00:15:58.559 --> 00:16:01.639
<v Speaker 4>I haven't worked with it in detail, AWSS Service Mesh,

301
00:16:01.679 --> 00:16:05.639
<v Speaker 4>which helps you orchestrate all of these micro services. So

302
00:16:05.840 --> 00:16:07.919
<v Speaker 4>there are there are things out there that will that

303
00:16:07.960 --> 00:16:10.879
<v Speaker 4>will help you manage all of this, and probably those

304
00:16:10.879 --> 00:16:13.279
<v Speaker 4>are worth it if you really get into large numbers,

305
00:16:13.559 --> 00:16:16.519
<v Speaker 4>if you really your if your enterprise is you know,

306
00:16:16.639 --> 00:16:19.200
<v Speaker 4>truly bought in and you're and you're going across many

307
00:16:19.200 --> 00:16:22.360
<v Speaker 4>different departments in many different organizations. That's probably when you

308
00:16:22.399 --> 00:16:23.559
<v Speaker 4>when you look at something like that.

309
00:16:23.720 --> 00:16:27.120
<v Speaker 2>But yeah, so kind of where I'm going with the

310
00:16:27.159 --> 00:16:29.639
<v Speaker 2>whole database side of things, because I agree, if you

311
00:16:29.679 --> 00:16:33.000
<v Speaker 2>do have a micro services environment, then you should have

312
00:16:33.960 --> 00:16:37.440
<v Speaker 2>a separate database for each micro service. But the issue

313
00:16:37.519 --> 00:16:40.320
<v Speaker 2>kind of comes into play is when you sort off

314
00:16:40.399 --> 00:16:43.720
<v Speaker 2>with just a few micro services, it's fine, it's easy

315
00:16:43.799 --> 00:16:46.720
<v Speaker 2>to manage, but then when you scale up to one

316
00:16:46.799 --> 00:16:51.639
<v Speaker 2>hundred to one thousand to ten thousand, it becomes less manageable,

317
00:16:52.320 --> 00:16:58.440
<v Speaker 2>and your infrastructure cost also is scaling up fairly.

318
00:16:58.320 --> 00:17:01.840
<v Speaker 1>Past five and I'm getting a headache.

319
00:17:02.600 --> 00:17:05.680
<v Speaker 2>So the issue with that scene is when a micro

320
00:17:05.799 --> 00:17:09.759
<v Speaker 2>service stops becoming a micro service and it becomes a

321
00:17:10.079 --> 00:17:15.440
<v Speaker 2>monolith service to where you have now these twenty different

322
00:17:15.799 --> 00:17:20.400
<v Speaker 2>or forty different micro services that just have grown and

323
00:17:20.440 --> 00:17:25.200
<v Speaker 2>grown and grown, and now you have forty separate, full

324
00:17:25.240 --> 00:17:29.359
<v Speaker 2>fledged Ruby on Rails applications that are so highly coupled

325
00:17:29.359 --> 00:17:32.839
<v Speaker 2>and dependent on each other, that would it had been

326
00:17:32.920 --> 00:17:38.200
<v Speaker 2>better to just have built it into one beautiful, majestic monolith.

327
00:17:38.480 --> 00:17:41.160
<v Speaker 4>Yeah, I'm I think I had a similar reaction that

328
00:17:41.759 --> 00:17:45.319
<v Speaker 4>Chuck had. If we get into the thousands, I'm completely

329
00:17:45.400 --> 00:17:48.200
<v Speaker 4>with you, we've probably gone We've gone off the rails

330
00:17:48.200 --> 00:17:49.599
<v Speaker 4>at that point.

331
00:17:49.720 --> 00:17:52.200
<v Speaker 2>I think that's where Netflix is at. I don't know

332
00:17:52.240 --> 00:17:54.880
<v Speaker 2>how many they have, but I've seen their data map

333
00:17:54.960 --> 00:17:58.079
<v Speaker 2>of their micro services and communications. It looks like a

334
00:17:58.119 --> 00:18:01.680
<v Speaker 2>whole globe of just jumbled spaghetti mess.

335
00:18:02.079 --> 00:18:05.319
<v Speaker 4>I believe that's probably correct. I actually got to work

336
00:18:05.359 --> 00:18:07.440
<v Speaker 4>with them a little bit when I was at AWS.

337
00:18:07.960 --> 00:18:11.400
<v Speaker 4>They also are a bit of a snowflake because no,

338
00:18:11.480 --> 00:18:14.200
<v Speaker 4>I mean, there are very few companies or organizations that

339
00:18:14.279 --> 00:18:19.039
<v Speaker 4>have the amount of resources that they have. Companies like Netflix,

340
00:18:19.599 --> 00:18:22.839
<v Speaker 4>like Amazon, you know, there aren't very many folks that

341
00:18:22.920 --> 00:18:26.880
<v Speaker 4>can put that many resources on it. And they have

342
00:18:26.920 --> 00:18:30.160
<v Speaker 4>a vast amount of capability as well. I think for

343
00:18:30.960 --> 00:18:34.960
<v Speaker 4>small and medium sized business, you're looking at a different

344
00:18:35.000 --> 00:18:39.559
<v Speaker 4>category and a different type of architecture, and it would

345
00:18:39.599 --> 00:18:42.480
<v Speaker 4>probably not be good if you got into those numbers.

346
00:18:43.039 --> 00:18:46.839
<v Speaker 4>I will say, on the infrastructure cost point that you

347
00:18:46.960 --> 00:18:50.119
<v Speaker 4>brought up, I think that would be true on if

348
00:18:50.200 --> 00:18:54.759
<v Speaker 4>you're on instances or virtual machines. However, containers are very

349
00:18:54.839 --> 00:18:58.599
<v Speaker 4>efficient at this You can put a lot more container

350
00:18:58.640 --> 00:19:03.039
<v Speaker 4>processes on the underlying hardware, and you can you also

351
00:19:03.039 --> 00:19:05.720
<v Speaker 4>get a lot of those other benefits that I that

352
00:19:05.799 --> 00:19:09.440
<v Speaker 4>I mentioned. So I don't know that the infrastructure cost

353
00:19:09.480 --> 00:19:11.599
<v Speaker 4>would be quite as bad as you as you think

354
00:19:11.599 --> 00:19:15.920
<v Speaker 4>it is, because the container processes are pretty lightweight. They

355
00:19:16.160 --> 00:19:19.920
<v Speaker 4>can start up in milliseconds as opposed to you know,

356
00:19:20.079 --> 00:19:22.920
<v Speaker 4>like an EC two instance probably takes like between thirty

357
00:19:22.960 --> 00:19:26.240
<v Speaker 4>and sixty seconds to start up, whereas a container, let's

358
00:19:26.279 --> 00:19:29.039
<v Speaker 4>say it, let's round it off to a second. So

359
00:19:29.160 --> 00:19:32.000
<v Speaker 4>you can scale those up and down really really quickly,

360
00:19:32.319 --> 00:19:35.359
<v Speaker 4>and you can pack a lot more onto a physical

361
00:19:35.400 --> 00:19:37.440
<v Speaker 4>cluster as well. So I don't know if that would

362
00:19:37.440 --> 00:19:39.079
<v Speaker 4>be as much of an issue. But on the on

363
00:19:39.160 --> 00:19:43.480
<v Speaker 4>the complexity front, Tim, I agree, there's some point where

364
00:19:43.480 --> 00:19:44.960
<v Speaker 4>it becomes unmanageable. Yeah.

365
00:19:45.160 --> 00:19:48.960
<v Speaker 2>The infrastructure scaling pricing that I was referring to is

366
00:19:49.000 --> 00:19:51.839
<v Speaker 2>more on the database side, because on a small tier

367
00:19:51.920 --> 00:19:56.240
<v Speaker 2>database that's really all the application needs. But because you

368
00:19:56.279 --> 00:19:59.799
<v Speaker 2>have scaled it up to fifty or one hundred micro services,

369
00:20:00.240 --> 00:20:02.359
<v Speaker 2>you're not going to be able to connect to that

370
00:20:02.440 --> 00:20:06.839
<v Speaker 2>same database instance with the lower tier plan because the

371
00:20:06.960 --> 00:20:11.640
<v Speaker 2>number of max connections that's available on those various plans,

372
00:20:11.680 --> 00:20:16.039
<v Speaker 2>you would have to either spin up multiple database servers,

373
00:20:16.480 --> 00:20:21.279
<v Speaker 2>in which case you incur scaling costs there, or have

374
00:20:21.319 --> 00:20:25.559
<v Speaker 2>one really large database server where you have multiple databases

375
00:20:26.279 --> 00:20:29.559
<v Speaker 2>within there, and then you still incur a higher cost

376
00:20:29.960 --> 00:20:33.960
<v Speaker 2>just for that max number of connections. Now, AWS may

377
00:20:34.000 --> 00:20:37.079
<v Speaker 2>have something different now where you can allow more connections,

378
00:20:37.440 --> 00:20:40.519
<v Speaker 2>but each micro service would need at least its one

379
00:20:40.680 --> 00:20:43.839
<v Speaker 2>own dedicated connection to the database instance.

380
00:20:44.359 --> 00:20:47.440
<v Speaker 4>Yeah, unless your databases are of pretty decent size, I

381
00:20:47.480 --> 00:20:50.119
<v Speaker 4>would probably go the route you mentioned where if you're

382
00:20:50.160 --> 00:20:53.079
<v Speaker 4>talking AWS, you have an RDS database and you can

383
00:20:53.079 --> 00:20:57.039
<v Speaker 4>put multiple not instances, multiple schemas on there, right, so

384
00:20:57.039 --> 00:20:59.920
<v Speaker 4>at least you can segregate it that way. You know,

385
00:21:00.200 --> 00:21:03.599
<v Speaker 4>if many many of these micro services, if they have

386
00:21:03.640 --> 00:21:06.480
<v Speaker 4>a smaller footprint, there's not no real reason to have

387
00:21:06.519 --> 00:21:09.519
<v Speaker 4>a different physical instance, you know, you don't need to

388
00:21:09.599 --> 00:21:13.000
<v Speaker 4>take that separation to the n degree. Not to be

389
00:21:13.079 --> 00:21:18.240
<v Speaker 4>too salesy, but we do. The company EngineYard also has

390
00:21:18.519 --> 00:21:21.799
<v Speaker 4>a scale arc product which is a database proxy, which

391
00:21:21.839 --> 00:21:25.160
<v Speaker 4>is also a nice way to actually get the three

392
00:21:25.279 --> 00:21:30.400
<v Speaker 4>tier architecture independence actually separate out your application tier from

393
00:21:30.400 --> 00:21:33.200
<v Speaker 4>your database by connecting to the proxy and then it

394
00:21:33.240 --> 00:21:36.160
<v Speaker 4>can talk to all of these other databases make them

395
00:21:36.160 --> 00:21:39.799
<v Speaker 4>look like different connections, do caching, intelligent caching, and security

396
00:21:39.839 --> 00:21:42.680
<v Speaker 4>controls for you. Again, if you get into larger number

397
00:21:42.680 --> 00:21:46.759
<v Speaker 4>of databases, that might be something that's that's helpful. But yeah,

398
00:21:46.839 --> 00:21:51.400
<v Speaker 4>packing multiple database schemas on the same you know, RDS

399
00:21:51.400 --> 00:21:54.839
<v Speaker 4>cluster is actually pretty pretty good strategy in a lot

400
00:21:54.920 --> 00:21:57.039
<v Speaker 4>of cases unless you have a really high volume er,

401
00:21:57.519 --> 00:21:59.279
<v Speaker 4>a really large sized database.

402
00:22:00.079 --> 00:22:03.319
<v Speaker 2>Whole container idea instead of the virtual machines I really

403
00:22:03.400 --> 00:22:06.839
<v Speaker 2>do like and I think that especially even if you

404
00:22:06.880 --> 00:22:12.200
<v Speaker 2>stick with a monolith version of your application to do

405
00:22:12.279 --> 00:22:17.400
<v Speaker 2>auto scaling, you can more instantaneously respond to the demand

406
00:22:17.480 --> 00:22:21.480
<v Speaker 2>coming in opposed to provisioning a whole new virtual machine.

407
00:22:21.920 --> 00:22:25.319
<v Speaker 2>So I'm really with you on there with using doctor

408
00:22:25.359 --> 00:22:29.160
<v Speaker 2>containers and stuff like that, because I think that's the

409
00:22:29.319 --> 00:22:34.200
<v Speaker 2>proper way to do auto scaling because you get instant

410
00:22:34.319 --> 00:22:38.279
<v Speaker 2>reaction to your users instead of having to wait, Okay,

411
00:22:38.359 --> 00:22:42.319
<v Speaker 2>we're at a fifty percent usage load across all our vms.

412
00:22:42.599 --> 00:22:46.279
<v Speaker 2>We need to hurry up and add more servers, all automatically,

413
00:22:46.319 --> 00:22:50.559
<v Speaker 2>of course, But then fifteen minutes later the server's provision

414
00:22:50.839 --> 00:22:54.839
<v Speaker 2>and now it's ready. Well, that traffic's all said and done.

415
00:22:54.720 --> 00:22:59.759
<v Speaker 4>Now absolutely, so yeah, these those two things that we've

416
00:22:59.759 --> 00:23:02.440
<v Speaker 4>been talking about, the micro services and the containers are

417
00:23:02.519 --> 00:23:06.400
<v Speaker 4>most certainly independent. So like you were just saying, even

418
00:23:06.880 --> 00:23:10.160
<v Speaker 4>with beautiful monolith, containers give you a lot of benefit.

419
00:23:10.200 --> 00:23:12.640
<v Speaker 4>They give you this scale, really fast scalability that you

420
00:23:12.720 --> 00:23:15.640
<v Speaker 4>just talked about, and something we haven't even mentioned yet,

421
00:23:15.680 --> 00:23:19.680
<v Speaker 4>it's actually pretty nice for development as well. So developing

422
00:23:20.440 --> 00:23:25.160
<v Speaker 4>with containers really helps cut down on how many times,

423
00:23:25.200 --> 00:23:27.920
<v Speaker 4>how much time in my career have I spent getting

424
00:23:27.960 --> 00:23:32.039
<v Speaker 4>my workstation, my development environment set up the way that

425
00:23:32.079 --> 00:23:35.240
<v Speaker 4>I want it, and you know, managing those things. So

426
00:23:35.640 --> 00:23:39.240
<v Speaker 4>using containers for development is really nice for that. There's

427
00:23:39.279 --> 00:23:42.359
<v Speaker 4>also some really nice tooling to help out there as well,

428
00:23:42.480 --> 00:23:46.759
<v Speaker 4>so we offer dev spaces. There's also an open source

429
00:23:46.920 --> 00:23:51.319
<v Speaker 4>gipod where you can with a single click bring up

430
00:23:51.359 --> 00:23:55.599
<v Speaker 4>the online ide. It's running based on the container that

431
00:23:55.680 --> 00:23:58.480
<v Speaker 4>you define, and you can also do some simple automation,

432
00:23:58.640 --> 00:24:01.960
<v Speaker 4>so for example, you can have it on startup, do

433
00:24:02.039 --> 00:24:06.079
<v Speaker 4>your bundle, install, start your rail server. It opens up

434
00:24:06.119 --> 00:24:11.480
<v Speaker 4>a preview window inside of your online ide, which is

435
00:24:11.559 --> 00:24:16.559
<v Speaker 4>based roughly it's based roughly on vs code, so you

436
00:24:16.599 --> 00:24:19.440
<v Speaker 4>can use those extensions as well, so, yeah, so you

437
00:24:19.480 --> 00:24:22.880
<v Speaker 4>get benefits from containers, not just in the deployment, but

438
00:24:22.920 --> 00:24:26.160
<v Speaker 4>I think in the development as well, and you know,

439
00:24:26.200 --> 00:24:29.279
<v Speaker 4>hopefully never have to hear the phrase works on my machine. Again.

440
00:24:29.799 --> 00:24:33.119
<v Speaker 4>That helps to alleviate some of those issues.

441
00:24:33.119 --> 00:24:36.240
<v Speaker 2>Until you get half the developers using ARM the other

442
00:24:36.279 --> 00:24:39.480
<v Speaker 2>half using xAd six platforms.

443
00:24:41.559 --> 00:24:44.720
<v Speaker 4>Yes, there's a whole another paradigm shift that we now

444
00:24:44.759 --> 00:24:49.640
<v Speaker 4>have to think about, right, Well, I know, yeah, I

445
00:24:49.640 --> 00:24:52.319
<v Speaker 4>know a lot of the Ruby gems do work on it,

446
00:24:52.319 --> 00:24:55.519
<v Speaker 4>but there's a handful that don't. And I know the

447
00:24:55.559 --> 00:24:59.400
<v Speaker 4>company I work with as actually we're investing actually looking

448
00:24:59.440 --> 00:25:02.720
<v Speaker 4>for rubis to help make get all of those gems

449
00:25:02.799 --> 00:25:06.279
<v Speaker 4>up to speed un armed because the price improvement, sorry,

450
00:25:06.279 --> 00:25:10.920
<v Speaker 4>the performance and price improvement is really significant. So it's

451
00:25:11.000 --> 00:25:12.200
<v Speaker 4>a it's a big boost.

452
00:25:13.079 --> 00:25:15.680
<v Speaker 2>Yeah, I couldn't have said it better myself. I have

453
00:25:15.839 --> 00:25:18.599
<v Speaker 2>a eight core mac Pro one hundred and ninety two

454
00:25:18.599 --> 00:25:22.720
<v Speaker 2>gigs RAM thing is a monster. Then I have a

455
00:25:23.119 --> 00:25:28.000
<v Speaker 2>thirteen inch MacBook PROILM one with sixteen gigs of RAM.

456
00:25:28.400 --> 00:25:31.640
<v Speaker 2>You know, whatever it comes with. I can't tell a

457
00:25:31.680 --> 00:25:35.119
<v Speaker 2>difference in performance on my day to day tasks. I

458
00:25:35.200 --> 00:25:39.400
<v Speaker 2>really cannot tell the difference. There is a huge price

459
00:25:39.480 --> 00:25:44.039
<v Speaker 2>tag difference. It's insane. So the ELM one, the whole

460
00:25:44.200 --> 00:25:48.839
<v Speaker 2>ARM movement that Apple is doing, I think is amazing,

461
00:25:49.319 --> 00:25:53.640
<v Speaker 2>and if they can keep it cost effective, then it's

462
00:25:53.720 --> 00:25:57.039
<v Speaker 2>going to really make a huge difference in how we

463
00:25:57.119 --> 00:25:59.839
<v Speaker 2>approach things, no.

464
00:26:00.359 --> 00:26:04.079
<v Speaker 4>Doubt, one hundred percent agree. I really you know now

465
00:26:04.119 --> 00:26:08.359
<v Speaker 4>that I'm a developer evangelist. I shifted from engineer too.

466
00:26:08.400 --> 00:26:10.240
<v Speaker 4>I guess you could say I'm on the marketing side,

467
00:26:10.279 --> 00:26:15.680
<v Speaker 4>so still an engineer at heart. But the phrase game

468
00:26:15.759 --> 00:26:19.279
<v Speaker 4>changer gets overused so many times. When you go to conferences,

469
00:26:19.279 --> 00:26:21.880
<v Speaker 4>you hear this is a game changer, that's a game changer.

470
00:26:22.440 --> 00:26:25.720
<v Speaker 4>I think. I think the use of ARM, what we're

471
00:26:25.759 --> 00:26:28.440
<v Speaker 4>talking about here, I think actually does fall into that category.

472
00:26:28.480 --> 00:26:30.000
<v Speaker 4>I think it's a big shift and you're going to

473
00:26:30.000 --> 00:26:33.079
<v Speaker 4>see a lot of energy put toward that, and I

474
00:26:33.079 --> 00:26:35.440
<v Speaker 4>think it's really going to help things out. I mean,

475
00:26:35.960 --> 00:26:39.799
<v Speaker 4>people complain about sometimes rails being slow. It's like, well,

476
00:26:40.400 --> 00:26:42.240
<v Speaker 4>if you run it on a faster computer, that that's

477
00:26:42.279 --> 00:26:45.319
<v Speaker 4>a really nice way to solve that problem. Certainly certainly

478
00:26:45.359 --> 00:26:48.119
<v Speaker 4>cost effective there, it's a lot cheaper than the person

479
00:26:48.160 --> 00:26:51.839
<v Speaker 4>hours that you might spend diving in, diving into that potentially.

480
00:26:53.079 --> 00:26:55.559
<v Speaker 1>Yeah, I want to move us back toward micro service

481
00:26:55.599 --> 00:26:59.119
<v Speaker 1>here services here for a minute, because I just remember

482
00:26:59.160 --> 00:27:02.400
<v Speaker 1>the nightmares. I went, you're moving stuff to micro services

483
00:27:02.400 --> 00:27:04.799
<v Speaker 1>back in the day, and I can kind of imagine

484
00:27:04.839 --> 00:27:07.960
<v Speaker 1>scenarios that are somewhat obvious, right, I mean, you know,

485
00:27:08.000 --> 00:27:12.079
<v Speaker 1>you can move your authorization right over to micro services

486
00:27:12.079 --> 00:27:15.119
<v Speaker 1>and then you just you know, maybe do some permissions

487
00:27:15.200 --> 00:27:19.839
<v Speaker 1>checks or you know, authority checks validate that somebody's actually

488
00:27:19.880 --> 00:27:21.880
<v Speaker 1>who they say they are against their identity on the

489
00:27:21.920 --> 00:27:24.839
<v Speaker 1>machine or on the other service, right, And so that's

490
00:27:24.920 --> 00:27:28.960
<v Speaker 1>kind of an obvious one to me. But I remember

491
00:27:29.000 --> 00:27:31.640
<v Speaker 1>we tried to split our app up into services, and

492
00:27:31.680 --> 00:27:35.519
<v Speaker 1>things were pretty tightly coupled together. And it's because the

493
00:27:35.599 --> 00:27:38.920
<v Speaker 1>concerns kind of blended from one thing to the next,

494
00:27:39.000 --> 00:27:40.799
<v Speaker 1>right from one step to the next or stage to

495
00:27:40.839 --> 00:27:43.519
<v Speaker 1>the next, as things move through the system, and so

496
00:27:43.599 --> 00:27:46.839
<v Speaker 1>there really wasn't a clear cut, a clear place to cut.

497
00:27:47.000 --> 00:27:49.359
<v Speaker 1>And so we when we picked one because it's like, oh, well,

498
00:27:49.400 --> 00:27:51.640
<v Speaker 1>this is stage one and this is stage two, so

499
00:27:51.680 --> 00:27:53.720
<v Speaker 1>we're just going to cut it between stage one and

500
00:27:53.720 --> 00:27:56.200
<v Speaker 1>stage two. Well it turned out that stage one and

501
00:27:56.240 --> 00:27:58.240
<v Speaker 1>stage two still have a lot in common, and so

502
00:27:59.079 --> 00:28:01.559
<v Speaker 1>you know, there's not that clear delineation, and so it

503
00:28:01.599 --> 00:28:04.480
<v Speaker 1>gave us problems. And you know, I'm thinking about some

504
00:28:04.559 --> 00:28:06.319
<v Speaker 1>of the apps that I'm working on now and a

505
00:28:06.359 --> 00:28:08.279
<v Speaker 1>lot of them have that same problem. And that's why

506
00:28:08.319 --> 00:28:13.240
<v Speaker 1>this monolith idea works really nicely, right, is because all

507
00:28:13.279 --> 00:28:16.319
<v Speaker 1>of those concerns that kind of span the entire app

508
00:28:16.839 --> 00:28:20.000
<v Speaker 1>are all in there. So how do you start to

509
00:28:20.039 --> 00:28:24.200
<v Speaker 1>really think about Okay, you know this is a good

510
00:28:24.440 --> 00:28:28.440
<v Speaker 1>option for a micro service, and this maybe does belong

511
00:28:28.480 --> 00:28:29.240
<v Speaker 1>in a monolith.

512
00:28:29.400 --> 00:28:32.559
<v Speaker 4>Yeah, it's a great question. So you know, I mentioned

513
00:28:32.920 --> 00:28:36.400
<v Speaker 4>that earlier. I wrote a book with the phrase best

514
00:28:36.400 --> 00:28:38.200
<v Speaker 4>practices and a title, and I think I have a

515
00:28:38.200 --> 00:28:41.960
<v Speaker 4>little bit different take on that now. I believe that

516
00:28:42.200 --> 00:28:44.400
<v Speaker 4>the use of micro services what we've been talking about,

517
00:28:44.480 --> 00:28:46.400
<v Speaker 4>is a great practice to do if it works for you,

518
00:28:47.200 --> 00:28:51.599
<v Speaker 4>and it's probably you know, it's not a one one

519
00:28:51.640 --> 00:28:56.240
<v Speaker 4>size fits all, So it's more of a concept that

520
00:28:56.279 --> 00:28:58.920
<v Speaker 4>you can apply to your situation. If it's really hard

521
00:28:58.960 --> 00:29:04.279
<v Speaker 4>to to untangle those concerns, you know, maybe maybe you

522
00:29:04.839 --> 00:29:07.599
<v Speaker 4>just keep it in, keep it in that single app.

523
00:29:07.680 --> 00:29:11.359
<v Speaker 4>Maybe it's not not worth doing, not worth the effort

524
00:29:11.440 --> 00:29:12.680
<v Speaker 4>to break it out.

525
00:29:12.880 --> 00:29:16.480
<v Speaker 2>So I basically have a general rule of thumb when

526
00:29:16.519 --> 00:29:21.480
<v Speaker 2>it comes to micro services if this feature, you know.

527
00:29:21.839 --> 00:29:24.759
<v Speaker 2>So let's give a real world example. Let's say if

528
00:29:24.920 --> 00:29:29.680
<v Speaker 2>I'm in the business of PDFs and whether I'm a

529
00:29:29.839 --> 00:29:34.720
<v Speaker 2>government or whomever, and I want to have the ability

530
00:29:35.200 --> 00:29:39.519
<v Speaker 2>to take in a PDF and then have it automatically

531
00:29:40.119 --> 00:29:43.440
<v Speaker 2>do the form fill out based on the parameters that

532
00:29:43.519 --> 00:29:48.599
<v Speaker 2>are coming in. So this is a very useful feature

533
00:29:49.039 --> 00:29:52.039
<v Speaker 2>for one of the applications that I'm developing within our

534
00:29:52.079 --> 00:29:56.839
<v Speaker 2>same organization. This feature is also very useful for five

535
00:29:56.880 --> 00:30:02.440
<v Speaker 2>other applications that we're developing. So because this feature can

536
00:30:02.839 --> 00:30:07.599
<v Speaker 2>provide a lot of usefulness to these five different applications,

537
00:30:08.279 --> 00:30:11.640
<v Speaker 2>and we can come to some kind of compromis or

538
00:30:11.759 --> 00:30:15.200
<v Speaker 2>agreement on its API of how it should look. It

539
00:30:15.240 --> 00:30:19.400
<v Speaker 2>should be taken a form post with a list of parameters.

540
00:30:19.720 --> 00:30:23.920
<v Speaker 2>It should have an idea of a PDF that is

541
00:30:24.519 --> 00:30:29.759
<v Speaker 2>stored on the database or wherever it's stored. Then we

542
00:30:29.839 --> 00:30:34.720
<v Speaker 2>can have one codebase that serves five applications. So I

543
00:30:34.720 --> 00:30:37.640
<v Speaker 2>think that's a good use case of a micro service.

544
00:30:37.920 --> 00:30:41.079
<v Speaker 2>It does one thing, it does it really well, and

545
00:30:41.160 --> 00:30:44.640
<v Speaker 2>it is highly reusable, not only in my application, but

546
00:30:44.759 --> 00:30:47.079
<v Speaker 2>in multiple other applications.

547
00:30:47.319 --> 00:30:51.240
<v Speaker 4>Yeah, that's a great example. And I think that if

548
00:30:51.279 --> 00:30:55.079
<v Speaker 4>you've identified that as a needs used in more than

549
00:30:55.119 --> 00:30:57.640
<v Speaker 4>three places, which is a good general rule for reuse,

550
00:30:57.680 --> 00:30:59.880
<v Speaker 4>so you know you want to package that up and

551
00:31:00.759 --> 00:31:04.839
<v Speaker 4>not repeat yourself across that group. So how do you

552
00:31:04.880 --> 00:31:07.759
<v Speaker 4>deliver that capability to the other users of it or

553
00:31:07.759 --> 00:31:10.720
<v Speaker 4>even reuse it yourself? And so you know, you could

554
00:31:10.799 --> 00:31:14.119
<v Speaker 4>just point point the other teams or the other developers

555
00:31:14.160 --> 00:31:18.039
<v Speaker 4>to the repo. You could build a gem package it

556
00:31:18.039 --> 00:31:19.880
<v Speaker 4>that way, which is also a nice way to do it,

557
00:31:20.519 --> 00:31:22.559
<v Speaker 4>or the route that you described. You could make it

558
00:31:22.880 --> 00:31:25.160
<v Speaker 4>an API or a micro service and it is it's

559
00:31:25.200 --> 00:31:28.559
<v Speaker 4>well defined and it is that that's a perfect use

560
00:31:28.599 --> 00:31:32.720
<v Speaker 4>case for a micro service, I will say, Chuck, you

561
00:31:32.720 --> 00:31:35.920
<v Speaker 4>also brought up the authorization. So those kind of you know,

562
00:31:36.039 --> 00:31:40.160
<v Speaker 4>non functional concerns are prime candidates as well. They're easy

563
00:31:40.200 --> 00:31:43.440
<v Speaker 4>to separate out from the rest of your application. It's

564
00:31:43.440 --> 00:31:46.799
<v Speaker 4>where you get into the nitty gritty of the business

565
00:31:46.799 --> 00:31:49.160
<v Speaker 4>logic or workflow where it becomes a little bit harder

566
00:31:49.160 --> 00:31:51.960
<v Speaker 4>to do it. I will say, though, to try to

567
00:31:52.000 --> 00:31:55.799
<v Speaker 4>tie some of these threads together. You mentioned earlier Dave

568
00:31:55.920 --> 00:32:01.680
<v Speaker 4>that Netflix has thousands of these and really Aws does too.

569
00:32:01.759 --> 00:32:05.000
<v Speaker 4>So one thing I realized that when I was there.

570
00:32:05.640 --> 00:32:08.759
<v Speaker 4>You know, one of the best things that Amazon does

571
00:32:09.119 --> 00:32:12.720
<v Speaker 4>is they make each team be essentially like its own

572
00:32:12.759 --> 00:32:16.240
<v Speaker 4>startup company, so that that team can innovate as fast

573
00:32:16.279 --> 00:32:19.960
<v Speaker 4>as they can and deliver value to customers. And then

574
00:32:20.039 --> 00:32:22.279
<v Speaker 4>I also say, the worst thing that they do is

575
00:32:22.519 --> 00:32:25.559
<v Speaker 4>that very same thing, because you have all of these

576
00:32:25.599 --> 00:32:29.160
<v Speaker 4>teams not always marching to the same beat and kind

577
00:32:29.200 --> 00:32:32.559
<v Speaker 4>of repeating some things are not always always going in

578
00:32:32.599 --> 00:32:37.559
<v Speaker 4>the same direction, but all of these different web services are.

579
00:32:38.000 --> 00:32:42.359
<v Speaker 4>It's not really Customers think about it as one infrastructure

580
00:32:42.680 --> 00:32:45.680
<v Speaker 4>or platform that they're using, but it's really one hundred

581
00:32:45.680 --> 00:32:48.640
<v Speaker 4>and fifty different services. I think the numbers actually higher

582
00:32:48.759 --> 00:32:53.279
<v Speaker 4>probably now. And so when you're building one of those,

583
00:32:53.440 --> 00:32:57.880
<v Speaker 4>you're using easily, you know, ten or twelve other ones

584
00:32:58.440 --> 00:33:01.160
<v Speaker 4>in order to compose your application. So I worked on

585
00:33:01.200 --> 00:33:06.079
<v Speaker 4>a security service. I helped build Resource Access Manager, and

586
00:33:06.160 --> 00:33:10.799
<v Speaker 4>so you know, in terms of like monitoring and other

587
00:33:11.279 --> 00:33:13.359
<v Speaker 4>kind of things, you know, we obviously we don't. We

588
00:33:13.400 --> 00:33:16.079
<v Speaker 4>didn't build our own monitoring service. We use cloud watch

589
00:33:16.119 --> 00:33:20.720
<v Speaker 4>for example, and authorization of course we use. We used

590
00:33:20.759 --> 00:33:25.319
<v Speaker 4>I am identity access manager. So it's really those are

591
00:33:25.400 --> 00:33:30.559
<v Speaker 4>good examples of large sets of services. You can think

592
00:33:30.599 --> 00:33:33.039
<v Speaker 4>of them as micro services. Some are more coarse grained,

593
00:33:33.720 --> 00:33:36.720
<v Speaker 4>but in order to build up these really large, really

594
00:33:36.799 --> 00:33:40.839
<v Speaker 4>large platforms that can do amazing things that run run

595
00:33:40.839 --> 00:33:43.839
<v Speaker 4>a majority of the Internet when you think about it,

596
00:33:43.880 --> 00:33:46.920
<v Speaker 4>and so there's there's a lot of capability there. Again,

597
00:33:46.960 --> 00:33:49.039
<v Speaker 4>it comes with the caveat Like we talked about before,

598
00:33:49.160 --> 00:33:53.200
<v Speaker 4>those type of companies have, you know, armies of engineers

599
00:33:53.240 --> 00:33:55.240
<v Speaker 4>who can work on all of these things. Most of

600
00:33:55.319 --> 00:33:58.119
<v Speaker 4>us are not in a position where we have that

601
00:33:58.200 --> 00:34:00.319
<v Speaker 4>many other teammates and teams to help us do this.

602
00:34:00.519 --> 00:34:03.240
<v Speaker 4>So you kind of have to right size these design

603
00:34:03.279 --> 00:34:07.680
<v Speaker 4>principles for the scenario, your scenario you're working on. But yeah,

604
00:34:07.759 --> 00:34:09.880
<v Speaker 4>there is no one right answer. You always want to

605
00:34:10.320 --> 00:34:13.239
<v Speaker 4>apply it to your situation.

606
00:34:13.920 --> 00:34:14.320
<v Speaker 3>I guess.

607
00:34:14.400 --> 00:34:17.320
<v Speaker 1>The other the other end of that right is how

608
00:34:17.360 --> 00:34:19.760
<v Speaker 1>big does it have to be to warrant putting it

609
00:34:19.800 --> 00:34:23.400
<v Speaker 1>into a micro service as opposed to putting it into

610
00:34:23.559 --> 00:34:28.480
<v Speaker 1>a delayed job sidekick rescue worker, or just sticking it

611
00:34:28.519 --> 00:34:33.239
<v Speaker 1>in like lib or app services or whatever, as just

612
00:34:33.320 --> 00:34:36.199
<v Speaker 1>the library that just does a thing right and then

613
00:34:36.280 --> 00:34:37.719
<v Speaker 1>just gets called out somewhere.

614
00:34:38.800 --> 00:34:41.920
<v Speaker 4>Yeah, I would, So here's where we get into. I

615
00:34:41.920 --> 00:34:47.159
<v Speaker 4>would evaluate the deployment or sorry, the operational aspect of

616
00:34:47.199 --> 00:34:49.360
<v Speaker 4>it and see what you can get there. So, if

617
00:34:49.360 --> 00:34:52.920
<v Speaker 4>it's a sidekick job, you're going to have a little

618
00:34:53.119 --> 00:34:54.800
<v Speaker 4>less You have to make sure you build in the

619
00:34:54.840 --> 00:34:57.280
<v Speaker 4>metrics and the visibility to see how that is behaving.

620
00:34:58.480 --> 00:35:01.239
<v Speaker 4>If it's its own micro service, which you can, let's

621
00:35:01.239 --> 00:35:03.639
<v Speaker 4>say it's in a container, I can observe that independently

622
00:35:03.800 --> 00:35:07.760
<v Speaker 4>very easily. I can scale it separate from everything else.

623
00:35:08.280 --> 00:35:10.920
<v Speaker 4>So if you let's say you have your web app

624
00:35:10.920 --> 00:35:14.719
<v Speaker 4>and a sidekick process, so you're taking orders on the

625
00:35:15.119 --> 00:35:18.920
<v Speaker 4>front end and Sidekick is doing some fulfillment on the

626
00:35:18.960 --> 00:35:21.639
<v Speaker 4>back end. So if you make a change and let's

627
00:35:21.639 --> 00:35:25.119
<v Speaker 4>say that the CPU spikes or you identify a memory

628
00:35:25.199 --> 00:35:27.840
<v Speaker 4>leak or some other problem, you know it's not going

629
00:35:27.880 --> 00:35:30.039
<v Speaker 4>to be immediately obvious. Well, was that one of the

630
00:35:30.119 --> 00:35:31.760
<v Speaker 4>changes I went into the web app or was it

631
00:35:31.840 --> 00:35:35.320
<v Speaker 4>the asynchronous job, And then what's the impact of that?

632
00:35:35.360 --> 00:35:38.119
<v Speaker 4>The impact is much different, right because your focus, you

633
00:35:38.119 --> 00:35:40.880
<v Speaker 4>should have a relentless focus on your customer. So if

634
00:35:40.920 --> 00:35:43.199
<v Speaker 4>it's the web app, they can't take any orders. If

635
00:35:43.199 --> 00:35:45.960
<v Speaker 4>it's the sidekick process. It's like, well, that's a little

636
00:35:45.960 --> 00:35:48.400
<v Speaker 4>bit better. I can still accept orders and I'm going

637
00:35:48.440 --> 00:35:50.000
<v Speaker 4>to hopefully get that business. I might just be a

638
00:35:50.039 --> 00:35:52.760
<v Speaker 4>little delayed in getting the shipments out or processing whatever,

639
00:35:53.199 --> 00:35:56.679
<v Speaker 4>whatever it is. So having to be its own if

640
00:35:56.719 --> 00:35:59.320
<v Speaker 4>it's valuable like that, right, If I can get benefit

641
00:35:59.360 --> 00:36:03.039
<v Speaker 4>from observing it and scaling it separately, then you're in

642
00:36:03.079 --> 00:36:05.559
<v Speaker 4>a better spot. If you need to scale up that

643
00:36:06.079 --> 00:36:09.079
<v Speaker 4>back end process, if it's doing more work, then you know,

644
00:36:09.119 --> 00:36:11.880
<v Speaker 4>maybe it's nice to have it in a separate deployable unit.

645
00:36:12.360 --> 00:36:14.280
<v Speaker 4>But those are the types of considerations that I would

646
00:36:14.280 --> 00:36:16.880
<v Speaker 4>look at as opposed to, or in addition to, I

647
00:36:16.880 --> 00:36:20.039
<v Speaker 4>should say, the separation of concerns and how easily how

648
00:36:20.079 --> 00:36:22.519
<v Speaker 4>easy is it for me to make code changes if

649
00:36:22.519 --> 00:36:24.639
<v Speaker 4>I need to innovate AD capabilities.

650
00:36:25.880 --> 00:36:29.320
<v Speaker 2>Yeah, so I have a little story that I'll try

651
00:36:29.360 --> 00:36:32.599
<v Speaker 2>to make tangible to this. So I've had a number

652
00:36:32.599 --> 00:36:36.800
<v Speaker 2>of dogs growing up, and one of the dogs, you know,

653
00:36:37.079 --> 00:36:39.960
<v Speaker 2>was a border collie. So the nature of the border

654
00:36:40.000 --> 00:36:44.039
<v Speaker 2>collie is a hurting animal. And if we had installed

655
00:36:44.039 --> 00:36:47.920
<v Speaker 2>an invisible fence around our yard, it really would have

656
00:36:47.960 --> 00:36:51.039
<v Speaker 2>confused the dog because that dog is meant to be

657
00:36:51.079 --> 00:36:55.280
<v Speaker 2>more free, and it would have hurt its nature essentially.

658
00:36:55.880 --> 00:36:59.320
<v Speaker 2>So we got a chain link fence which was a physical,

659
00:36:59.559 --> 00:37:04.519
<v Speaker 2>visible boundary around the yard. And I had another dog

660
00:37:05.159 --> 00:37:08.320
<v Speaker 2>whom was not a hurting dog. They're more of a

661
00:37:08.360 --> 00:37:12.280
<v Speaker 2>guard dog. So that dog wanted to be around me

662
00:37:12.519 --> 00:37:16.320
<v Speaker 2>all the time. It was a rot Wilder Doberman mix

663
00:37:16.800 --> 00:37:19.920
<v Speaker 2>which I named her Kitty, but that's a different story.

664
00:37:22.519 --> 00:37:25.880
<v Speaker 2>And I could let that dog out of the yard,

665
00:37:26.360 --> 00:37:29.159
<v Speaker 2>you know, into a open backyard and run free, and

666
00:37:29.199 --> 00:37:31.840
<v Speaker 2>we never had to worry about her because she always

667
00:37:31.880 --> 00:37:34.360
<v Speaker 2>quickly came right back to us because she wanted to

668
00:37:34.360 --> 00:37:37.480
<v Speaker 2>be right there next to us. She wasn't interested in

669
00:37:37.559 --> 00:37:42.079
<v Speaker 2>hunting or hurting. So the idea of in translating this

670
00:37:42.239 --> 00:37:45.159
<v Speaker 2>back over to what we're talking about with micro services

671
00:37:45.400 --> 00:37:49.559
<v Speaker 2>versus monoliths, I think that the monolith is more like

672
00:37:49.599 --> 00:37:54.440
<v Speaker 2>that big open backyard without any boundaries. And if you're

673
00:37:54.519 --> 00:37:58.119
<v Speaker 2>not careful, it's not a matter of if, but just

674
00:37:58.159 --> 00:38:01.159
<v Speaker 2>a matter of when are you going to to have

675
00:38:01.360 --> 00:38:05.400
<v Speaker 2>an accident or mistake on your hands because you have

676
00:38:06.280 --> 00:38:10.480
<v Speaker 2>now gotten too much cross contamination within your application. You

677
00:38:10.519 --> 00:38:14.280
<v Speaker 2>weren't careful with the boundaries and you broke a lot

678
00:38:14.320 --> 00:38:20.000
<v Speaker 2>of single responsibility principles, and now things are too tightly

679
00:38:20.119 --> 00:38:23.400
<v Speaker 2>coupled and intertwined in together, and you have a mess.

680
00:38:23.679 --> 00:38:27.440
<v Speaker 2>Whereas the fenced in backyard is more like the micro services,

681
00:38:27.480 --> 00:38:31.880
<v Speaker 2>where you are forced to stay within this confined area,

682
00:38:32.320 --> 00:38:37.239
<v Speaker 2>which means you're forced to think about and write the

683
00:38:37.400 --> 00:38:42.960
<v Speaker 2>single responsibility principles because you don't have access to the

684
00:38:43.000 --> 00:38:47.679
<v Speaker 2>outside world beyond your gated fens. And I think that

685
00:38:48.320 --> 00:38:52.280
<v Speaker 2>if we are talking about a single application, that its

686
00:38:52.320 --> 00:38:57.480
<v Speaker 2>codebase is never reused anywhere else. So I think that

687
00:38:57.960 --> 00:39:03.599
<v Speaker 2>we can train ourselves as developers to have more responsibility

688
00:39:03.719 --> 00:39:07.440
<v Speaker 2>in how we are writing our code, to not introduce

689
00:39:07.559 --> 00:39:13.400
<v Speaker 2>a lot of this cross contamination of logic which really

690
00:39:13.400 --> 00:39:17.639
<v Speaker 2>should be separated out. And by doing that, like Chuck said,

691
00:39:17.719 --> 00:39:21.760
<v Speaker 2>with the lib or app services or interactors, whatever kind

692
00:39:21.760 --> 00:39:24.320
<v Speaker 2>of naming you want to call it, but these plain

693
00:39:24.400 --> 00:39:28.960
<v Speaker 2>old Ruby objects where you're encapsulating and building these virtual

694
00:39:29.119 --> 00:39:32.920
<v Speaker 2>fences around that bit of logic, then you're able to

695
00:39:33.440 --> 00:39:38.159
<v Speaker 2>create the idea of the micro services without breaking up

696
00:39:38.199 --> 00:39:39.719
<v Speaker 2>the majestic monolith.

697
00:39:40.199 --> 00:39:43.199
<v Speaker 4>That's a great analogy for separation of concerns. I got

698
00:39:43.199 --> 00:39:45.719
<v Speaker 4>to remember that one and use that in the future.

699
00:39:46.480 --> 00:39:49.800
<v Speaker 4>The dogs in the fenced in backyard. I like that. Yep, yeah,

700
00:39:49.840 --> 00:39:53.039
<v Speaker 4>I mean I think that you brought up a really

701
00:39:53.039 --> 00:39:56.199
<v Speaker 4>good point. It's like, well, you know, we're all if

702
00:39:56.199 --> 00:39:58.960
<v Speaker 4>we're all in the same backyard, you know, how long

703
00:39:59.000 --> 00:40:02.639
<v Speaker 4>will it be until we all you know, cause problems

704
00:40:02.679 --> 00:40:04.719
<v Speaker 4>We bump into each other trying to get our work done.

705
00:40:05.559 --> 00:40:07.239
<v Speaker 4>You know, one person is cutting the grass in the

706
00:40:07.280 --> 00:40:09.320
<v Speaker 4>backyard while the others are trying to play volleyball. It

707
00:40:09.440 --> 00:40:14.320
<v Speaker 4>just doesn't work very well. And so, you know, we

708
00:40:14.639 --> 00:40:17.159
<v Speaker 4>talked about actually like as it gets bigger, it can

709
00:40:17.199 --> 00:40:19.280
<v Speaker 4>get more complicated. But you can look at it the

710
00:40:19.320 --> 00:40:21.960
<v Speaker 4>other way that as you know, it's easy when you're

711
00:40:21.960 --> 00:40:24.519
<v Speaker 4>getting started to have it all being you know, app

712
00:40:24.559 --> 00:40:26.760
<v Speaker 4>and live, it's actually as you get bigger and bigger

713
00:40:26.800 --> 00:40:31.079
<v Speaker 4>where it becomes more of a challenge because changing one

714
00:40:31.119 --> 00:40:36.320
<v Speaker 4>thing has ramifications and unintended places, and that's really one

715
00:40:36.400 --> 00:40:39.679
<v Speaker 4>of the one of the big challenges. There's a pretty

716
00:40:39.760 --> 00:40:43.039
<v Speaker 4>nice tool that I've been working with or testing out

717
00:40:43.159 --> 00:40:47.800
<v Speaker 4>called app land and its it's a it's open source,

718
00:40:47.840 --> 00:40:49.760
<v Speaker 4>you can grab it and it gives you a nice

719
00:40:49.880 --> 00:40:53.679
<v Speaker 4>visual map of the connections the call stacks and you

720
00:40:53.719 --> 00:40:56.679
<v Speaker 4>can see how your components are related. You know, I

721
00:40:56.679 --> 00:40:59.800
<v Speaker 4>always like to see I'd like to have a visual

722
00:41:00.199 --> 00:41:03.719
<v Speaker 4>or mental model in my head of their requests coming

723
00:41:03.760 --> 00:41:06.639
<v Speaker 4>in and how the route that they take through the

724
00:41:06.679 --> 00:41:09.360
<v Speaker 4>controller and what objects they actually use. And this gives

725
00:41:09.400 --> 00:41:12.719
<v Speaker 4>you a nice kind of visual representation of that. This

726
00:41:12.840 --> 00:41:15.400
<v Speaker 4>was actually something that I thought about when you know,

727
00:41:15.440 --> 00:41:18.760
<v Speaker 4>I first started doing Rails and Ruby, which I mentioned,

728
00:41:18.760 --> 00:41:21.880
<v Speaker 4>you know, like six seven years ago. And when you

729
00:41:21.920 --> 00:41:24.039
<v Speaker 4>do Ruby or sorry when you excuse me, when you

730
00:41:24.079 --> 00:41:28.360
<v Speaker 4>do rails new it's interesting you actually get I think

731
00:41:28.400 --> 00:41:32.760
<v Speaker 4>it's about fifty files with five hundred lines of code,

732
00:41:33.360 --> 00:41:36.159
<v Speaker 4>give or take. And Rails isn't embarrassed about this either,

733
00:41:36.199 --> 00:41:39.119
<v Speaker 4>because you can do bin rail stats and it'll tell

734
00:41:39.119 --> 00:41:42.320
<v Speaker 4>you exactly how many files and lines of code there are.

735
00:41:43.079 --> 00:41:45.960
<v Speaker 4>So that's a lot of code and a lot of

736
00:41:46.000 --> 00:41:48.519
<v Speaker 4>files just to do a Hello World. Right. If I

737
00:41:48.559 --> 00:41:50.880
<v Speaker 4>was going to compare that to no JS, for example,

738
00:41:51.400 --> 00:41:54.639
<v Speaker 4>I think probably one file maybe what like five lines

739
00:41:54.679 --> 00:41:59.039
<v Speaker 4>something like that. But that's there's also the positive aspect

740
00:41:59.079 --> 00:42:01.440
<v Speaker 4>of it that it gives me. It prescribes a lot

741
00:42:01.440 --> 00:42:03.400
<v Speaker 4>of things for me. I always if I know, if

742
00:42:03.440 --> 00:42:06.199
<v Speaker 4>I want to find out where a controller action is.

743
00:42:06.239 --> 00:42:07.960
<v Speaker 4>I know exactly where to look. If I want to

744
00:42:08.000 --> 00:42:11.360
<v Speaker 4>find where the images are located, I already know. So

745
00:42:11.400 --> 00:42:15.239
<v Speaker 4>it gives me a great framework to get started. It doesn't,

746
00:42:15.400 --> 00:42:18.760
<v Speaker 4>you know, it's not going to stop you from dumping,

747
00:42:19.000 --> 00:42:22.199
<v Speaker 4>from making your your helper's directory become a dumping ground

748
00:42:22.239 --> 00:42:26.760
<v Speaker 4>for every everything known to man and having all kinds

749
00:42:26.800 --> 00:42:28.760
<v Speaker 4>of all kinds of stuff in there. That's not going

750
00:42:28.840 --> 00:42:31.039
<v Speaker 4>to prevent that. And that's where the backyard can get

751
00:42:31.800 --> 00:42:35.000
<v Speaker 4>kind of messy. I will say the one having worked

752
00:42:35.039 --> 00:42:38.679
<v Speaker 4>on a lot of different projects in different languages and technologies,

753
00:42:38.679 --> 00:42:40.880
<v Speaker 4>it's nice, you know. It used to be that on

754
00:42:40.920 --> 00:42:44.440
<v Speaker 4>every project you would have the infamous like string helper class,

755
00:42:45.079 --> 00:42:46.920
<v Speaker 4>and so it's nice that we don't have to do

756
00:42:46.960 --> 00:42:49.760
<v Speaker 4>that in Ruby because the string the string class is

757
00:42:49.800 --> 00:42:52.760
<v Speaker 4>pretty rich and as most of what you need, so

758
00:42:53.440 --> 00:42:54.880
<v Speaker 4>we don't we don't have to do with that. But

759
00:42:55.360 --> 00:42:58.039
<v Speaker 4>you know, helper directories always things like that can get

760
00:42:58.440 --> 00:43:01.239
<v Speaker 4>messy pretty quickly if you're not careful. My daughter has

761
00:43:01.239 --> 00:43:05.360
<v Speaker 4>a multiese poodle, Peanut, and I'm pretty sure when I

762
00:43:05.400 --> 00:43:07.119
<v Speaker 4>take Peanut out for a walk, if I took him

763
00:43:07.119 --> 00:43:09.440
<v Speaker 4>off the leash. I'm pretty sure he would go running.

764
00:43:09.480 --> 00:43:12.320
<v Speaker 4>I don't think he's the guard dog that that would

765
00:43:12.320 --> 00:43:14.800
<v Speaker 4>stand by my side. He'd be you know, like down

766
00:43:14.880 --> 00:43:17.199
<v Speaker 4>the road checking things out. That he's probably like, finally

767
00:43:17.199 --> 00:43:18.639
<v Speaker 4>I get to go run around.

768
00:43:19.599 --> 00:43:21.360
<v Speaker 3>Yeah. That's funny because when I was a kid, we

769
00:43:21.440 --> 00:43:22.159
<v Speaker 3>had two dogs.

770
00:43:22.760 --> 00:43:25.119
<v Speaker 1>We had a cocker Spaniel and you know, so she

771
00:43:25.199 --> 00:43:26.559
<v Speaker 1>was kind of a little dog, and then we had

772
00:43:26.559 --> 00:43:29.800
<v Speaker 1>a miniature Chihuahua and she was a littler dog, a

773
00:43:29.880 --> 00:43:31.920
<v Speaker 1>much littler dog. She weighed about a pound and a half.

774
00:43:32.400 --> 00:43:36.480
<v Speaker 1>Oh wow, Yeah, she was tiny, and we the cocker

775
00:43:36.480 --> 00:43:39.239
<v Speaker 1>spaniel couldn't get out of the backyard, but she could

776
00:43:39.280 --> 00:43:41.719
<v Speaker 1>dig holes deep enough for the chihuaha to get out

777
00:43:41.719 --> 00:43:43.159
<v Speaker 1>of the backyard. And there was nothing we could do

778
00:43:43.199 --> 00:43:46.760
<v Speaker 1>to stop it. And so and that, I guess taking

779
00:43:46.760 --> 00:43:48.920
<v Speaker 1>that metaphor to the next level. That's the other thing

780
00:43:48.920 --> 00:43:51.920
<v Speaker 1>that you find is if everybody, if you share the backyard,

781
00:43:52.159 --> 00:43:53.840
<v Speaker 1>somebody's going to find a way to dig a hole

782
00:43:53.920 --> 00:43:54.920
<v Speaker 1>to let people out.

783
00:43:55.719 --> 00:44:01.599
<v Speaker 4>That's a great point. So years will always find a way.

784
00:44:02.280 --> 00:44:04.079
<v Speaker 3>So now we're in a Jurassic Park.

785
00:44:04.559 --> 00:44:11.559
<v Speaker 1>But anyway, Yeah, it's it's definitely interesting to think about

786
00:44:11.599 --> 00:44:14.119
<v Speaker 1>But at the end of the day, I mean, we're

787
00:44:14.159 --> 00:44:17.280
<v Speaker 1>we're just trying to solve problems, right. And it's it's

788
00:44:17.320 --> 00:44:19.760
<v Speaker 1>interesting too because I keep having the conversation with my

789
00:44:19.840 --> 00:44:23.199
<v Speaker 1>coworkers and it's you know, I shouldn't suggest this because

790
00:44:23.199 --> 00:44:25.280
<v Speaker 1>this is work that I don't want to have to do,

791
00:44:26.039 --> 00:44:28.280
<v Speaker 1>but this is probably the right solution to this problem.

792
00:44:28.800 --> 00:44:31.119
<v Speaker 1>And you know that's what we're in it for, right,

793
00:44:31.159 --> 00:44:33.400
<v Speaker 1>We're in it to solve these problems, right, And so

794
00:44:34.239 --> 00:44:37.440
<v Speaker 1>sometimes it's going to be micro services is you know,

795
00:44:37.800 --> 00:44:40.920
<v Speaker 1>a terrific way to solve the problem. And sometimes it's

796
00:44:40.920 --> 00:44:43.760
<v Speaker 1>going to be, hey, you know, we need to keep

797
00:44:43.800 --> 00:44:45.719
<v Speaker 1>all this stuff together so that it kind of all

798
00:44:45.760 --> 00:44:51.280
<v Speaker 1>moves and works together in this way. And sometimes we're

799
00:44:51.360 --> 00:44:52.800
<v Speaker 1>going to be in a situation where we just have

800
00:44:52.800 --> 00:44:53.639
<v Speaker 1>to make a judgment call.

801
00:44:54.079 --> 00:44:55.039
<v Speaker 3>And so I like that.

802
00:44:55.039 --> 00:44:57.760
<v Speaker 1>That's where this conversation is gone, where it's hey, look,

803
00:44:58.079 --> 00:44:59.760
<v Speaker 1>these are some of the trade offs that come in

804
00:44:59.800 --> 00:45:02.920
<v Speaker 1>this way or that way, and these are some of

805
00:45:02.960 --> 00:45:04.480
<v Speaker 1>the considerations you're going to wind to make in.

806
00:45:04.679 --> 00:45:07.639
<v Speaker 4>Yeah, that's really that's really well said. These are different

807
00:45:07.639 --> 00:45:10.960
<v Speaker 4>tools in the toolbox, and yeah, solve solving problems is

808
00:45:10.960 --> 00:45:13.639
<v Speaker 4>one of the greatest parts about being, you know, an

809
00:45:13.639 --> 00:45:16.880
<v Speaker 4>engineer and doing what we do probably closely followed by

810
00:45:16.880 --> 00:45:20.559
<v Speaker 4>seeing our users and customers actually get to take advantage

811
00:45:20.559 --> 00:45:23.679
<v Speaker 4>of these these creations that we out into the world.

812
00:45:24.039 --> 00:45:27.480
<v Speaker 2>Yep, absolutely, because I mean, let's face it, if you

813
00:45:27.679 --> 00:45:33.320
<v Speaker 2>have a really pro team that follows wonderful practices, they're

814
00:45:33.440 --> 00:45:38.039
<v Speaker 2>very consistent and there's no hidden surprises, and if you

815
00:45:38.719 --> 00:45:43.079
<v Speaker 2>create a monolith, then it's going to be very maintainable,

816
00:45:43.360 --> 00:45:46.320
<v Speaker 2>it's going to be well tested and you're not going

817
00:45:46.400 --> 00:45:49.239
<v Speaker 2>to have any problems. Take that in compared to a

818
00:45:49.360 --> 00:45:53.880
<v Speaker 2>team that is not very well versed. They are not

819
00:45:54.079 --> 00:45:59.039
<v Speaker 2>consistent and they're creating micro services. Now you have an

820
00:45:59.079 --> 00:46:02.639
<v Speaker 2>application which consists of one hundred microsurfaces and each one

821
00:46:02.760 --> 00:46:07.119
<v Speaker 2>is its own nightmare. So and it can go either way.

822
00:46:07.519 --> 00:46:10.360
<v Speaker 2>You have a team that's great with micro services, they're

823
00:46:10.400 --> 00:46:14.119
<v Speaker 2>great with practices, and everything is consistent and isolated in

824
00:46:14.159 --> 00:46:16.679
<v Speaker 2>these micro services, and it's could be a great application.

825
00:46:16.760 --> 00:46:19.039
<v Speaker 2>But then you have a team that's not as well

826
00:46:19.119 --> 00:46:23.559
<v Speaker 2>versed and they are just creating an insane monolith that

827
00:46:23.719 --> 00:46:28.960
<v Speaker 2>is just unmaintainable. So it's a healthy balance of choosing

828
00:46:29.000 --> 00:46:31.320
<v Speaker 2>the right tool for the job and making sure that

829
00:46:31.360 --> 00:46:35.000
<v Speaker 2>you have the team and budget to match, as well

830
00:46:35.039 --> 00:46:39.920
<v Speaker 2>as the infrastructure budget to host, because as we said,

831
00:46:40.000 --> 00:46:45.679
<v Speaker 2>there could be differences in which direction you go. So overall,

832
00:46:46.440 --> 00:46:50.480
<v Speaker 2>I think that because I've worked primarily on Ruby on

833
00:46:50.559 --> 00:46:54.800
<v Speaker 2>Rails applications, micro services doesn't really have a fit in

834
00:46:54.840 --> 00:46:59.360
<v Speaker 2>my world because I think the convention over configuration that

835
00:46:59.480 --> 00:47:03.000
<v Speaker 2>Rails his provided me, plus the practices that I have

836
00:47:03.159 --> 00:47:08.880
<v Speaker 2>developed over the past ten twelve years, has really negated

837
00:47:08.960 --> 00:47:12.360
<v Speaker 2>the need for micro services in my world. But that

838
00:47:12.440 --> 00:47:16.280
<v Speaker 2>could be a different story for someone else where micro

839
00:47:16.360 --> 00:47:18.159
<v Speaker 2>services is the answer for them.

840
00:47:18.480 --> 00:47:22.079
<v Speaker 1>Yeah, I also just want to I should point out

841
00:47:22.360 --> 00:47:25.679
<v Speaker 1>so the app that I work on primarily these days

842
00:47:26.039 --> 00:47:28.480
<v Speaker 1>for my full time job, it was written to replace

843
00:47:28.519 --> 00:47:31.400
<v Speaker 1>another app that was written in another framework, in another language,

844
00:47:31.880 --> 00:47:36.719
<v Speaker 1>and essentially it was written very quickly by some very

845
00:47:36.719 --> 00:47:38.960
<v Speaker 1>talented engineers. But it was written very quickly, and they

846
00:47:38.960 --> 00:47:40.800
<v Speaker 1>threw a lot of best practices out the window just

847
00:47:40.840 --> 00:47:44.400
<v Speaker 1>to get it out the door. And so we're dealing

848
00:47:44.440 --> 00:47:47.559
<v Speaker 1>with those the fallout of that stuff right now. Right

849
00:47:47.840 --> 00:47:50.039
<v Speaker 1>because we're now in the second year, we're coming back

850
00:47:50.079 --> 00:47:53.800
<v Speaker 1>around to, you know, essentially another iteration of what this

851
00:47:53.840 --> 00:47:58.440
<v Speaker 1>thing does, and you know, and so we're coming into Okay,

852
00:47:58.639 --> 00:47:59.880
<v Speaker 1>we've got to deal with this, and we've got to

853
00:47:59.920 --> 00:48:01.519
<v Speaker 1>do with this, we've got to deal with that, we've

854
00:48:01.519 --> 00:48:04.000
<v Speaker 1>got to deal with you know, these other things. And

855
00:48:04.239 --> 00:48:07.639
<v Speaker 1>it's you know, it's yeah, you know what Dave's saying.

856
00:48:07.679 --> 00:48:11.239
<v Speaker 1>It's just not pretty. And it really does, in a

857
00:48:11.280 --> 00:48:14.400
<v Speaker 1>lot of cases, come down to your discipline and your

858
00:48:14.440 --> 00:48:18.039
<v Speaker 1>willingness to look at these problems and identify where these

859
00:48:18.039 --> 00:48:21.119
<v Speaker 1>things are going to come up right, and so you know,

860
00:48:21.239 --> 00:48:24.760
<v Speaker 1>whether or not you use one architecture or the other,

861
00:48:24.800 --> 00:48:26.920
<v Speaker 1>whether or not you make these decisions one way or

862
00:48:26.960 --> 00:48:29.239
<v Speaker 1>the other, what it really comes down to is your

863
00:48:29.280 --> 00:48:32.519
<v Speaker 1>discipline in implementing them and approaching these problems in a

864
00:48:32.519 --> 00:48:36.559
<v Speaker 1>way that is going to solve the problem in the

865
00:48:36.599 --> 00:48:40.360
<v Speaker 1>long term. And RAILS does a lot of things that

866
00:48:40.440 --> 00:48:44.199
<v Speaker 1>makes it really easy for you to approach this. From

867
00:48:44.239 --> 00:48:47.000
<v Speaker 1>the majestic monolith, I kept saying beautiful monolith at the

868
00:48:47.039 --> 00:48:49.760
<v Speaker 1>beginning because I couldn't remember the word that dhhused in

869
00:48:49.880 --> 00:48:52.480
<v Speaker 1>his blog article. And I have the article up now

870
00:48:52.519 --> 00:48:55.679
<v Speaker 1>in front of me, so I'll put on link in

871
00:48:55.719 --> 00:48:58.440
<v Speaker 1>the show notes. But you know, and that's his approach

872
00:48:58.480 --> 00:49:01.039
<v Speaker 1>and so that's the approach to the from rails. But

873
00:49:01.239 --> 00:49:03.679
<v Speaker 1>as Darren pointed out, you know, there are a lot

874
00:49:03.679 --> 00:49:06.159
<v Speaker 1>of things in there because it's built on rack that

875
00:49:06.320 --> 00:49:09.320
<v Speaker 1>it does exceptionally well. That allows you to break it

876
00:49:09.360 --> 00:49:13.239
<v Speaker 1>out into services if you need to. And so because

877
00:49:13.280 --> 00:49:17.079
<v Speaker 1>of that, it makes it, you know, really versatile in

878
00:49:17.119 --> 00:49:20.559
<v Speaker 1>your approach, and so you know, find the approach that

879
00:49:20.599 --> 00:49:23.760
<v Speaker 1>works for you and then just be disciplined in the

880
00:49:23.760 --> 00:49:26.119
<v Speaker 1>way that you approach it so that it does the

881
00:49:26.119 --> 00:49:27.760
<v Speaker 1>work that you need it to do, solve the problem

882
00:49:27.800 --> 00:49:30.280
<v Speaker 1>that you need to solve. And that's the that like,

883
00:49:30.280 --> 00:49:32.360
<v Speaker 1>like Darren said, this is the really great part is

884
00:49:32.400 --> 00:49:34.239
<v Speaker 1>that we get to go in and we get to

885
00:49:34.280 --> 00:49:36.719
<v Speaker 1>figure out the pieces to the puzzle. It's like playing

886
00:49:36.719 --> 00:49:38.880
<v Speaker 1>a video game, except at the end of the day

887
00:49:39.400 --> 00:49:42.960
<v Speaker 1>it's not the prescribed path through the level. It's the Hey,

888
00:49:43.000 --> 00:49:44.519
<v Speaker 1>at the end of the day, we got the problem

889
00:49:44.639 --> 00:49:46.639
<v Speaker 1>solved and we get to do some really cool stuff

890
00:49:46.679 --> 00:49:47.920
<v Speaker 1>along the way to figure it out.

891
00:49:49.079 --> 00:49:51.280
<v Speaker 4>Yeah, those two points, those two points were spot on.

892
00:49:51.400 --> 00:49:53.199
<v Speaker 4>Right at the end of the day, there's no there's

893
00:49:53.239 --> 00:49:57.719
<v Speaker 4>no until AI advances to another level, maybe there's no

894
00:49:58.280 --> 00:50:01.480
<v Speaker 4>replacement for the design and the discipline, Right, So you

895
00:50:01.519 --> 00:50:03.679
<v Speaker 4>do that design upfront and it's like what's best for

896
00:50:03.760 --> 00:50:07.480
<v Speaker 4>my situation, and then the discipline. I think that you know,

897
00:50:07.599 --> 00:50:10.480
<v Speaker 4>even after you've agreed on the design, I think there's

898
00:50:10.519 --> 00:50:14.639
<v Speaker 4>no substitute for those code reviews, right, Like, that's that's

899
00:50:14.679 --> 00:50:17.559
<v Speaker 4>where you're really like, Okay, are we are we really

900
00:50:17.719 --> 00:50:19.559
<v Speaker 4>doing what we said we were going to do? We

901
00:50:19.679 --> 00:50:22.480
<v Speaker 4>are we following our guidelines? You know. That's how you

902
00:50:22.519 --> 00:50:24.400
<v Speaker 4>make sure that you accomplish that goal and you don't

903
00:50:24.480 --> 00:50:26.519
<v Speaker 4>end up kind of in a situation like you describe,

904
00:50:26.519 --> 00:50:28.320
<v Speaker 4>where a lot of people find themselves with a code

905
00:50:28.360 --> 00:50:31.679
<v Speaker 4>base that has a life of its own, its own personality,

906
00:50:32.039 --> 00:50:35.239
<v Speaker 4>for whatever reason that it ended up being created that way. Right,

907
00:50:35.280 --> 00:50:38.199
<v Speaker 4>there's always reasons that at the time that get applied,

908
00:50:38.239 --> 00:50:41.920
<v Speaker 4>but there's just no substitute for those things. Yeah. I've

909
00:50:41.960 --> 00:50:45.239
<v Speaker 4>worked previously. I worked in environments where we did not

910
00:50:45.360 --> 00:50:48.679
<v Speaker 4>review every line of code, and then more recently I did,

911
00:50:48.719 --> 00:50:51.679
<v Speaker 4>And it's hard to imagine not having code reviews for

912
00:50:51.719 --> 00:50:52.679
<v Speaker 4>everything anymore.

913
00:50:52.920 --> 00:50:55.039
<v Speaker 1>Yeah, So real quick, I'm going to throw out a

914
00:50:55.039 --> 00:50:57.719
<v Speaker 1>couple of resources and then we'll get to picks. One

915
00:50:57.800 --> 00:50:59.880
<v Speaker 1>is you mentioned machine learning and AI and I have

916
00:51:00.079 --> 00:51:02.840
<v Speaker 1>to say, we have a machine learning podcast. You can

917
00:51:02.880 --> 00:51:05.119
<v Speaker 1>go check it out at Adventures machine Learning. Just go

918
00:51:05.159 --> 00:51:07.719
<v Speaker 1>to devchat dot tv click podcasts up at the top

919
00:51:07.840 --> 00:51:10.519
<v Speaker 1>and it's right there Adventures and machine Learning. Or you

920
00:51:10.559 --> 00:51:13.239
<v Speaker 1>can find it in your favorite podcast app. Just do

921
00:51:13.320 --> 00:51:14.840
<v Speaker 1>it search Adventures in Machine Learning.

922
00:51:14.880 --> 00:51:15.519
<v Speaker 3>You'll find it.

923
00:51:15.519 --> 00:51:18.559
<v Speaker 1>It's got kind of a face and some artwork. Anyway,

924
00:51:18.800 --> 00:51:21.000
<v Speaker 1>it looks really cool and I'm very proud of it.

925
00:51:21.239 --> 00:51:23.960
<v Speaker 1>And yeah, one of the hosts, he's a really good

926
00:51:24.000 --> 00:51:29.360
<v Speaker 1>looking guy. And yeah, Migael's pretty cool too. The other

927
00:51:29.519 --> 00:51:31.159
<v Speaker 1>one that I'm going to throw out there, and you know,

928
00:51:31.159 --> 00:51:34.199
<v Speaker 1>because we're talking about discipline and practices and things like that.

929
00:51:34.400 --> 00:51:37.480
<v Speaker 1>I had a really terrific conversation with Bob Martin about

930
00:51:37.559 --> 00:51:42.400
<v Speaker 1>clean craftsmanship and he talked about practices. Oh man, I'm

931
00:51:42.400 --> 00:51:47.079
<v Speaker 1>gonna blow this so hard. Practices. There were three levels

932
00:51:47.119 --> 00:51:51.000
<v Speaker 1>to it. The third one was ethics practicals. I think

933
00:51:51.000 --> 00:51:55.599
<v Speaker 1>it was disciplines. Principles was the principles anyway, go listen

934
00:51:55.639 --> 00:51:57.079
<v Speaker 1>to it because he breaks it down. And the first

935
00:51:57.159 --> 00:52:01.079
<v Speaker 1>level was he talks about TDD pairing. You know those

936
00:52:01.159 --> 00:52:03.039
<v Speaker 1>kinds of things where you know, like you're talking about

937
00:52:03.079 --> 00:52:06.119
<v Speaker 1>the code reviews kind of falls underpairing, right, and then

938
00:52:06.320 --> 00:52:10.880
<v Speaker 1>testing of some kind right under TDD, you know, and

939
00:52:10.920 --> 00:52:13.679
<v Speaker 1>some of these other things where you're just doing these

940
00:52:13.800 --> 00:52:15.079
<v Speaker 1>practices that get you to.

941
00:52:15.119 --> 00:52:15.800
<v Speaker 3>Where you need to go.

942
00:52:15.880 --> 00:52:17.800
<v Speaker 1>And then you have standards, right, That's what it was.

943
00:52:17.840 --> 00:52:20.920
<v Speaker 1>It with standards, and so what are your code standards? Right,

944
00:52:21.039 --> 00:52:23.760
<v Speaker 1>that make the code the kind of quality that you

945
00:52:23.800 --> 00:52:26.199
<v Speaker 1>have to do. And then the ethics where you know,

946
00:52:26.280 --> 00:52:28.840
<v Speaker 1>the kinds of things where it's and he has the

947
00:52:28.880 --> 00:52:31.119
<v Speaker 1>programmer's oath is what he calls it, and we kind

948
00:52:31.119 --> 00:52:31.679
<v Speaker 1>of talked through that.

949
00:52:31.719 --> 00:52:32.519
<v Speaker 3>We have another.

950
00:52:32.239 --> 00:52:34.920
<v Speaker 1>Episode where we talked about that on the Clean Coders podcast,

951
00:52:35.199 --> 00:52:37.320
<v Speaker 1>But he talks about you know, hey, you know, am

952
00:52:37.320 --> 00:52:40.159
<v Speaker 1>I making the code based better? Am I delivering for

953
00:52:40.199 --> 00:52:42.679
<v Speaker 1>the company that's paying me for my time? Am I

954
00:52:43.239 --> 00:52:45.960
<v Speaker 1>delivering code that meets the kind of standards? Am I

955
00:52:45.960 --> 00:52:49.519
<v Speaker 1>improving my skills so that I can deliver for my team?

956
00:52:49.679 --> 00:52:52.480
<v Speaker 1>And you know, things like that, and anyway, it was

957
00:52:52.559 --> 00:52:55.320
<v Speaker 1>really really interesting conversation and that's the kind of thing

958
00:52:55.320 --> 00:52:57.880
<v Speaker 1>that we really need to be talking about too, within

959
00:52:58.079 --> 00:53:00.519
<v Speaker 1>our within our teams and with the people that we

960
00:53:00.559 --> 00:53:02.760
<v Speaker 1>work with, because at the end of the day, it's

961
00:53:02.840 --> 00:53:06.400
<v Speaker 1>not just Hey, here's the technology and the technical approach

962
00:53:06.400 --> 00:53:09.360
<v Speaker 1>that we used to solve the problem, but it's yeah,

963
00:53:09.400 --> 00:53:11.039
<v Speaker 1>what are we doing to make sure that it's the

964
00:53:11.119 --> 00:53:13.440
<v Speaker 1>right solution to the right problem. What are we doing

965
00:53:13.440 --> 00:53:15.320
<v Speaker 1>to make sure that the code meets the standards that

966
00:53:15.360 --> 00:53:18.920
<v Speaker 1>we have for the kinds of solutions we deliver, and

967
00:53:18.960 --> 00:53:20.800
<v Speaker 1>what kinds of things are we doing day to day

968
00:53:21.440 --> 00:53:23.559
<v Speaker 1>in order to make sure that we are delivering for

969
00:53:23.679 --> 00:53:26.199
<v Speaker 1>the company that we work for, delivering for the team

970
00:53:26.239 --> 00:53:29.159
<v Speaker 1>we work with, delivering for the world at large, and

971
00:53:29.199 --> 00:53:32.239
<v Speaker 1>things like that. So anyway, terrific conversation. I'll put both

972
00:53:32.280 --> 00:53:34.599
<v Speaker 1>of those links in the show notes, and yeah, let's

973
00:53:34.599 --> 00:53:37.679
<v Speaker 1>go ahead and new picks. I'm going to push it today. First, Dave,

974
00:53:37.679 --> 00:53:38.639
<v Speaker 1>do you have some picks for us?

975
00:53:39.119 --> 00:53:42.719
<v Speaker 2>Yeah? Sure, So my first pick is a pack tool

976
00:53:42.920 --> 00:53:46.360
<v Speaker 2>Gecko Gauge. If you've ever had to work with hardyboard,

977
00:53:46.440 --> 00:53:48.800
<v Speaker 2>which is the cement fiber boards that you put on

978
00:53:48.880 --> 00:53:53.360
<v Speaker 2>the side of houses, then this tool is amazing. It

979
00:53:53.440 --> 00:53:56.760
<v Speaker 2>allows you to just clamp onto the previous fiber board

980
00:53:56.760 --> 00:53:59.840
<v Speaker 2>that you installed and then set the new one just

981
00:54:00.239 --> 00:54:04.039
<v Speaker 2>right on top. It'll be completely leveled to the other one.

982
00:54:04.519 --> 00:54:08.599
<v Speaker 2>It is a life saving tool for working with hardyboard.

983
00:54:09.079 --> 00:54:10.679
<v Speaker 2>And the whole reason why I picked this up is

984
00:54:10.719 --> 00:54:14.400
<v Speaker 2>because I'm building a shed underneath our deck and I'm

985
00:54:14.440 --> 00:54:16.840
<v Speaker 2>now getting around to the part where I'm doing the

986
00:54:16.920 --> 00:54:19.159
<v Speaker 2>sighting to make it look like the rest of the house.

987
00:54:19.920 --> 00:54:21.519
<v Speaker 2>I was not going to be able to do this

988
00:54:21.639 --> 00:54:24.840
<v Speaker 2>job without that tool. So it's amazing. And on the

989
00:54:24.960 --> 00:54:29.559
<v Speaker 2>date of recording this podcast today is April first, i

990
00:54:29.719 --> 00:54:33.400
<v Speaker 2>launched a new tutorial site. So I've been doing drift

991
00:54:33.440 --> 00:54:37.360
<v Speaker 2>and Ruby for many, many years, over two hundred eighty

992
00:54:37.559 --> 00:54:41.480
<v Speaker 2>episodes I've recorded on Ruby and Ruby on rails, and

993
00:54:41.559 --> 00:54:44.960
<v Speaker 2>so today I've launched a new training site and that

994
00:54:45.159 --> 00:54:48.800
<v Speaker 2>is drifting Cobal. So you can go to driftingcobyl dot

995
00:54:48.840 --> 00:54:52.360
<v Speaker 2>com and you'll see that it's a completely satire side

996
00:54:52.400 --> 00:54:58.719
<v Speaker 2>for April first, but hey, if it picks up one subscriber,

997
00:54:58.840 --> 00:55:02.000
<v Speaker 2>that's like ten percent of the entire Cobalt user base,

998
00:55:02.360 --> 00:55:03.360
<v Speaker 2>so I'd say that's when.

999
00:55:03.800 --> 00:55:07.800
<v Speaker 4>Wow, that's amazing. I actually did Cobal when I first

1000
00:55:07.840 --> 00:55:12.039
<v Speaker 4>started programming dating myself again, so this is great to see.

1001
00:55:13.559 --> 00:55:17.400
<v Speaker 3>Nice, very cool. I'm gonna have to is that a

1002
00:55:17.400 --> 00:55:18.000
<v Speaker 3>punch card?

1003
00:55:18.360 --> 00:55:21.960
<v Speaker 2>It is nice, It's not a real punch card. The

1004
00:55:22.000 --> 00:55:25.000
<v Speaker 2>real punch cards were more like the this is.

1005
00:55:25.199 --> 00:55:28.880
<v Speaker 4>This looks like a copy book description almost Yeah, your

1006
00:55:28.960 --> 00:55:30.280
<v Speaker 4>data formats.

1007
00:55:29.800 --> 00:55:31.880
<v Speaker 3>And oh I'm tweeting it right now.

1008
00:55:34.000 --> 00:55:35.719
<v Speaker 4>It is a good It is a good call out

1009
00:55:35.760 --> 00:55:38.639
<v Speaker 4>that we are recording this on April first. When you

1010
00:55:38.679 --> 00:55:40.440
<v Speaker 4>all asked me to be a guest on the podcast,

1011
00:55:40.480 --> 00:55:43.159
<v Speaker 4>I wasn't sure if you were joking or serious.

1012
00:55:45.119 --> 00:55:48.119
<v Speaker 3>Hey, you scheduled it not us fair enough?

1013
00:55:48.159 --> 00:55:48.719
<v Speaker 4>Fair enough?

1014
00:55:48.960 --> 00:55:51.239
<v Speaker 1>Yeah, all right, I've got a couple of picks I'm

1015
00:55:51.239 --> 00:55:53.440
<v Speaker 1>gonna throw out there. The first pick that I have

1016
00:55:54.239 --> 00:55:56.559
<v Speaker 1>is I've been using this tool I'm really liking. It

1017
00:55:56.639 --> 00:56:00.239
<v Speaker 1>is called click up now. If you have used no

1018
00:56:00.239 --> 00:56:02.360
<v Speaker 1>notion dot so I've picked it on the show before.

1019
00:56:02.960 --> 00:56:05.800
<v Speaker 1>Notion is kind of an all in one how do

1020
00:56:05.840 --> 00:56:07.840
<v Speaker 1>I put it? It's supposed to be kind of a

1021
00:56:07.840 --> 00:56:14.880
<v Speaker 1>wiki slash, trellos slash, to do list slash anyway, it

1022
00:56:14.960 --> 00:56:19.000
<v Speaker 1>does not have any kind of automation, and it doesn't

1023
00:56:19.079 --> 00:56:22.760
<v Speaker 1>integrate with Zapier, and so I quit using it eventually

1024
00:56:22.800 --> 00:56:23.679
<v Speaker 1>because I just couldn't.

1025
00:56:23.880 --> 00:56:25.519
<v Speaker 3>I couldn't do with it what I wanted to do.

1026
00:56:25.679 --> 00:56:25.840
<v Speaker 4>Right.

1027
00:56:26.480 --> 00:56:28.360
<v Speaker 1>Well, clickup has all that stuff built in and what

1028
00:56:28.400 --> 00:56:31.119
<v Speaker 1>it doesn't have built in it actually integrates with Zapier.

1029
00:56:31.679 --> 00:56:36.360
<v Speaker 1>So I'm really really loving this tool, and so I'm

1030
00:56:36.400 --> 00:56:38.639
<v Speaker 1>actually moving as many of the workflows for.

1031
00:56:38.599 --> 00:56:40.360
<v Speaker 3>Devchat dot tv over to it as I can.

1032
00:56:40.760 --> 00:56:42.920
<v Speaker 1>A lot of the stuffs still on Trello, and that's

1033
00:56:42.920 --> 00:56:44.880
<v Speaker 1>where I wound up moving a lot of this stuff too,

1034
00:56:45.400 --> 00:56:47.519
<v Speaker 1>so it's going to take some time to move it over.

1035
00:56:47.920 --> 00:56:49.920
<v Speaker 1>But I am really really looking forward to some of

1036
00:56:49.960 --> 00:56:53.360
<v Speaker 1>this stuff. I can actually include some of the other

1037
00:56:53.599 --> 00:56:56.280
<v Speaker 1>folks from dev chat dot tv on it, and so

1038
00:56:56.400 --> 00:57:00.639
<v Speaker 1>I'm looking at instead of for example, we have some

1039
00:57:00.760 --> 00:57:05.360
<v Speaker 1>automation that's built into Zappier that's supposed to like pick

1040
00:57:05.440 --> 00:57:10.920
<v Speaker 1>things up and send out a calendar invite and set

1041
00:57:10.960 --> 00:57:13.960
<v Speaker 1>up a Google doc and do all this stuff. And

1042
00:57:14.000 --> 00:57:15.760
<v Speaker 1>I'm hoping that I can move all of that into

1043
00:57:15.800 --> 00:57:20.079
<v Speaker 1>clickup and then just invite our podcast guests as guests

1044
00:57:20.239 --> 00:57:22.920
<v Speaker 1>on the test. That's the only part of it. I

1045
00:57:22.920 --> 00:57:27.280
<v Speaker 1>can't guarantee what'll work because I haven't double checked on that,

1046
00:57:27.840 --> 00:57:30.559
<v Speaker 1>But for the hosts and everybody else, I can actually

1047
00:57:30.639 --> 00:57:32.559
<v Speaker 1>go in and do that, and I'm hoping to be

1048
00:57:32.559 --> 00:57:35.079
<v Speaker 1>able to automate all of that stuff so that then

1049
00:57:35.119 --> 00:57:38.119
<v Speaker 1>it comes back after the episode and says, because we

1050
00:57:38.280 --> 00:57:40.679
<v Speaker 1>manually have to follow up, Hey, can we get a

1051
00:57:40.719 --> 00:57:43.400
<v Speaker 1>description for the episode and a title for the episode?

1052
00:57:43.440 --> 00:57:45.719
<v Speaker 1>And because I'm not on all the shows, and so

1053
00:57:45.800 --> 00:57:47.519
<v Speaker 1>I'm kind of the backup on the shows that I

1054
00:57:47.559 --> 00:57:51.159
<v Speaker 1>show up for. But if I'm sick or if I'm

1055
00:57:51.199 --> 00:57:53.159
<v Speaker 1>just not on the show like Adventures in dot Net,

1056
00:57:53.719 --> 00:57:56.480
<v Speaker 1>I'm practically useless on that show anyway, Right, I can

1057
00:57:56.519 --> 00:57:58.239
<v Speaker 1>kind of make it up and go look up the terms.

1058
00:57:58.280 --> 00:58:02.360
<v Speaker 1>I don't know, but realist, right, if they're talking about

1059
00:58:02.360 --> 00:58:06.760
<v Speaker 1>like some deep library NC SHARP, it's like, okay, what

1060
00:58:07.000 --> 00:58:07.559
<v Speaker 1>is this thing?

1061
00:58:07.639 --> 00:58:07.840
<v Speaker 4>Right?

1062
00:58:07.880 --> 00:58:09.320
<v Speaker 3>And I have to go do some research.

1063
00:58:09.760 --> 00:58:12.480
<v Speaker 1>So that's what I'm looking at doing, is just automating

1064
00:58:12.480 --> 00:58:15.440
<v Speaker 1>the crap out of that. And so I'm pretty excited

1065
00:58:15.440 --> 00:58:17.639
<v Speaker 1>about that and working through it.

1066
00:58:18.119 --> 00:58:20.599
<v Speaker 3>But if it lets me automate all of that stuff,

1067
00:58:21.280 --> 00:58:22.679
<v Speaker 3>I'm going to be one happy dude.

1068
00:58:23.079 --> 00:58:25.159
<v Speaker 1>And so I'm going to pick that. The other thing

1069
00:58:25.199 --> 00:58:28.320
<v Speaker 1>that I am also going to pick is dev influencers.

1070
00:58:28.719 --> 00:58:32.119
<v Speaker 1>So dev influencers dot com. You've heard me talk about

1071
00:58:32.119 --> 00:58:35.519
<v Speaker 1>dev heroes, that's now dev influencers. So if you're looking

1072
00:58:35.599 --> 00:58:38.920
<v Speaker 1>at kind of that next stage, or if you're in

1073
00:58:38.960 --> 00:58:42.960
<v Speaker 1>a position like Darren, where you're a developer, evangelist, or

1074
00:58:43.000 --> 00:58:46.440
<v Speaker 1>you're trying to you know, gain some kind of audience,

1075
00:58:47.000 --> 00:58:49.800
<v Speaker 1>you know, where you're trying to get noticed. I'm putting

1076
00:58:49.800 --> 00:58:53.960
<v Speaker 1>together basically a coaching program and I currently have five

1077
00:58:54.039 --> 00:58:57.280
<v Speaker 1>people in there where I'm coaching them every week on Okay,

1078
00:58:57.280 --> 00:59:00.000
<v Speaker 1>here's how you build an audience. I'm focused on podcasts,

1079
00:59:00.519 --> 00:59:02.639
<v Speaker 1>So here's how you build an audience. Here's how you

1080
00:59:02.960 --> 00:59:05.480
<v Speaker 1>build your podcast. Here's how you get people to listen

1081
00:59:05.519 --> 00:59:07.639
<v Speaker 1>to it, Here's how you grow it. And then from

1082
00:59:07.719 --> 00:59:10.400
<v Speaker 1>there it's here's how you build it into Some people

1083
00:59:10.400 --> 00:59:13.360
<v Speaker 1>want to do speaking, some people want to teach live training,

1084
00:59:13.440 --> 00:59:14.760
<v Speaker 1>some people want to do courses.

1085
00:59:14.840 --> 00:59:15.719
<v Speaker 3>Some people want to do.

1086
00:59:15.679 --> 00:59:17.920
<v Speaker 1>I mean, you know, there are all these options. Build

1087
00:59:17.920 --> 00:59:20.960
<v Speaker 1>their freelancing practice, get a better job. All of those

1088
00:59:20.960 --> 00:59:24.960
<v Speaker 1>things are things that I have done out of podcasting

1089
00:59:25.119 --> 00:59:27.480
<v Speaker 1>while I'm working on the course. But all the other

1090
00:59:27.480 --> 00:59:28.159
<v Speaker 1>things are things.

1091
00:59:28.000 --> 00:59:28.880
<v Speaker 3>That I've done out of it.

1092
00:59:29.000 --> 00:59:31.239
<v Speaker 1>Right, I have a book that I've written that I've

1093
00:59:31.239 --> 00:59:33.760
<v Speaker 1>sold off to the back of the podcast, and so

1094
00:59:33.960 --> 00:59:35.679
<v Speaker 1>if that's something you're interested and you can go check

1095
00:59:35.719 --> 00:59:38.320
<v Speaker 1>it out. But if you want a podcast about it,

1096
00:59:38.599 --> 00:59:40.400
<v Speaker 1>I'm putting that out too, So go check it out

1097
00:59:40.400 --> 00:59:44.119
<v Speaker 1>dev influencers dot Com slash podcast and you can check

1098
00:59:44.159 --> 00:59:46.800
<v Speaker 1>that out there. You can also go to dev influencers

1099
00:59:46.840 --> 00:59:51.400
<v Speaker 1>dot com slash apply and you'll put your email and

1100
00:59:51.519 --> 00:59:54.280
<v Speaker 1>name in. And that's just so that some people, for

1101
00:59:54.360 --> 00:59:58.440
<v Speaker 1>whatever reason, they hit the thing on their phone, the application,

1102
00:59:58.559 --> 01:00:01.039
<v Speaker 1>and then for whatever reason they don't get the information in.

1103
01:00:01.360 --> 01:00:03.400
<v Speaker 1>That's so that I can just remind them, hey, look, yah,

1104
01:00:03.480 --> 01:00:05.960
<v Speaker 1>filled it out. Can you come back right? And then

1105
01:00:05.960 --> 01:00:08.559
<v Speaker 1>I'm planning on sending some emails out and some other stuff,

1106
01:00:08.559 --> 01:00:12.239
<v Speaker 1>putting some other stuff together there. But yeah, dev influencers

1107
01:00:12.280 --> 01:00:13.960
<v Speaker 1>dot Com that's where all that stuff's going to be

1108
01:00:13.960 --> 01:00:16.119
<v Speaker 1>for the podcast, and I'm going to be talking about

1109
01:00:16.119 --> 01:00:18.360
<v Speaker 1>how to advance your career. A lot of people they

1110
01:00:18.360 --> 01:00:20.239
<v Speaker 1>get stuck at senior developer, that's the other thing, and

1111
01:00:20.239 --> 01:00:22.039
<v Speaker 1>they're like, I don't want to be a manager. I

1112
01:00:22.079 --> 01:00:25.039
<v Speaker 1>don't really want to go architecture or whatever. I want

1113
01:00:25.079 --> 01:00:27.039
<v Speaker 1>to keep writing code and this is a way you

1114
01:00:27.039 --> 01:00:29.960
<v Speaker 1>can do that. So anyway, dev influencers dot Com. That's

1115
01:00:30.000 --> 01:00:33.039
<v Speaker 1>kind of my thing. And that's not an April Fool's joke. Darren,

1116
01:00:33.400 --> 01:00:34.400
<v Speaker 1>Do you have some picks for us.

1117
01:00:34.559 --> 01:00:36.519
<v Speaker 4>Yeah, well, I'm going to go ahead and mention if

1118
01:00:36.559 --> 01:00:39.960
<v Speaker 4>you like Ruby and rails and you like the getting

1119
01:00:40.000 --> 01:00:42.760
<v Speaker 4>those benefits of containers that I talked about, definitely check

1120
01:00:42.760 --> 01:00:46.599
<v Speaker 4>out engine yard containers. That's our the next generation platform.

1121
01:00:46.639 --> 01:00:49.360
<v Speaker 4>You can go to engine yard dot com. You can

1122
01:00:49.400 --> 01:00:52.159
<v Speaker 4>also on that site go under resources on the blog.

1123
01:00:52.199 --> 01:00:55.360
<v Speaker 4>You can check out my Ruby Unbundled blog where we

1124
01:00:55.400 --> 01:00:58.320
<v Speaker 4>talk about the different architecture concepts and and other cool

1125
01:00:58.880 --> 01:01:01.800
<v Speaker 4>things that I find fascinating about Ruby. But yeah, so

1126
01:01:02.000 --> 01:01:04.639
<v Speaker 4>engine Yard containers is a great way to quickly deploy

1127
01:01:04.679 --> 01:01:08.000
<v Speaker 4>those Ruby apps, scale them up, and get some of

1128
01:01:08.000 --> 01:01:11.079
<v Speaker 4>those observability and other benefits we talked about. Am I

1129
01:01:11.119 --> 01:01:12.679
<v Speaker 4>allowed to do that for a pick? Is that okay?

1130
01:01:12.840 --> 01:01:13.360
<v Speaker 3>Absolutely?

1131
01:01:14.920 --> 01:01:16.960
<v Speaker 1>We usually ask you to at the end where people

1132
01:01:16.960 --> 01:01:18.880
<v Speaker 1>can find you, So that's that does help.

1133
01:01:19.119 --> 01:01:22.599
<v Speaker 4>I'm ahead of the game, yep, I would. I would

1134
01:01:22.599 --> 01:01:25.079
<v Speaker 4>throw in mentioned the other app Land is a really

1135
01:01:25.159 --> 01:01:27.599
<v Speaker 4>nice way to figure out what's going on with your

1136
01:01:27.599 --> 01:01:30.159
<v Speaker 4>codebase as well. I would throw that out there as

1137
01:01:30.199 --> 01:01:32.559
<v Speaker 4>my other pick they have. I think app map is

1138
01:01:32.599 --> 01:01:35.559
<v Speaker 4>actually the gem. App Land is a site if you

1139
01:01:35.559 --> 01:01:38.519
<v Speaker 4>want to share those across different users on your project.

1140
01:01:38.840 --> 01:01:40.000
<v Speaker 3>Awesome. All right.

1141
01:01:40.320 --> 01:01:44.400
<v Speaker 1>Well, and then I'm assuming you're also on Twitter and facebo, Facebook, Twitter,

1142
01:01:44.440 --> 01:01:44.960
<v Speaker 1>and GitHub.

1143
01:01:45.320 --> 01:01:49.440
<v Speaker 4>I am at Darren Bramer d A R R E

1144
01:01:49.559 --> 01:01:51.800
<v Speaker 4>N b r O E M M E R. I

1145
01:01:51.840 --> 01:01:53.679
<v Speaker 4>probably need to get a better Twitter handle, don't I

1146
01:01:54.159 --> 01:01:58.000
<v Speaker 4>that's too complicated, but it is my name, so you can.

1147
01:01:58.079 --> 01:02:00.960
<v Speaker 4>You can find me there. And on GitHub, I have

1148
01:02:01.079 --> 01:02:04.000
<v Speaker 4>my old user ID, just letter D and then the

1149
01:02:04.039 --> 01:02:06.360
<v Speaker 4>first seven letters of my last name, D Bromine, so

1150
01:02:06.599 --> 01:02:07.559
<v Speaker 4>that's me on GitHub.

1151
01:02:07.639 --> 01:02:09.639
<v Speaker 1>All right, cool, all right, well, thank you for coming.

1152
01:02:09.679 --> 01:02:12.039
<v Speaker 1>This was really really fun. Yeah, thanks you so much

1153
01:02:12.039 --> 01:02:13.159
<v Speaker 1>for having me. This was great.

1154
01:02:13.480 --> 01:02:15.800
<v Speaker 3>Yeah, it's fun to argue about architecture, right.

1155
01:02:16.400 --> 01:02:17.440
<v Speaker 4>I love it. I love it.

1156
01:02:18.800 --> 01:02:21.000
<v Speaker 3>This is what it's all about, all right, folks. Well

1157
01:02:21.079 --> 01:02:22.280
<v Speaker 3>until next week, Max out
