WEBVTT

1
00:00:01.080 --> 00:00:03.000
<v Speaker 1>How'd you like to listen to dot net rocks with

2
00:00:03.080 --> 00:00:07.879
<v Speaker 1>no ads? Easy? Become a patron for just five dollars

3
00:00:07.919 --> 00:00:10.800
<v Speaker 1>a month. You get access to a private RSS feed

4
00:00:10.839 --> 00:00:14.240
<v Speaker 1>where all the shows have no ads. Twenty dollars a month,

5
00:00:14.279 --> 00:00:16.879
<v Speaker 1>we'll get you that and a special dot net Rocks

6
00:00:16.960 --> 00:00:21.000
<v Speaker 1>patron mug. Sign up now at Patreon dot dot NetRocks

7
00:00:21.120 --> 00:00:37.280
<v Speaker 1>dot com. Hey guess what, it's dot net rocks. I'm

8
00:00:37.320 --> 00:00:41.840
<v Speaker 1>Carl Franklin, an amateur camp and we haven't it's been

9
00:00:41.880 --> 00:00:45.119
<v Speaker 1>a while since we just recorded one. Last week's show

10
00:00:45.159 --> 00:00:47.520
<v Speaker 1>we recorded about an hour ago. But before that, it's

11
00:00:47.560 --> 00:00:49.880
<v Speaker 1>been been a month because I went on the road

12
00:00:49.880 --> 00:00:51.479
<v Speaker 1>for a month, all right. I did a couple of

13
00:00:51.479 --> 00:00:54.240
<v Speaker 1>weeks in Mexico just to get out of the gray

14
00:00:54.320 --> 00:00:56.359
<v Speaker 1>because it's the challenge of looking up up here.

15
00:00:56.799 --> 00:00:59.039
<v Speaker 2>And then NBC London.

16
00:00:59.359 --> 00:01:02.560
<v Speaker 1>I saw the posts you did from Mexico with our

17
00:01:02.600 --> 00:01:03.840
<v Speaker 1>friends Paul and Stephanie.

18
00:01:04.120 --> 00:01:06.120
<v Speaker 2>Yep, they came. They came down for a week with us,

19
00:01:06.120 --> 00:01:09.840
<v Speaker 2>and then I was at NBC London and then Sweet

20
00:01:09.879 --> 00:01:11.079
<v Speaker 2>Dug in Stockholm.

21
00:01:11.280 --> 00:01:11.760
<v Speaker 1>Very cool.

22
00:01:12.359 --> 00:01:15.000
<v Speaker 2>So you saw Fritz there, I believe I did. The

23
00:01:15.000 --> 00:01:17.040
<v Speaker 2>Fritzy was there, The Hunter was there, the Handsoman.

24
00:01:17.480 --> 00:01:19.040
<v Speaker 1>Wow, that's cool.

25
00:01:19.200 --> 00:01:21.879
<v Speaker 2>Yeah, I know the excess of Scots. To be honest,

26
00:01:22.000 --> 00:01:25.359
<v Speaker 2>I will be at the other Stockholm conference dev some Yeah,

27
00:01:25.439 --> 00:01:28.040
<v Speaker 2>I'm looking at being there as well, so maybe we

28
00:01:28.040 --> 00:01:29.120
<v Speaker 2>can record some stuff.

29
00:01:29.239 --> 00:01:31.359
<v Speaker 1>Yeah maybe I think the weather be a little nicer

30
00:01:31.400 --> 00:01:36.560
<v Speaker 1>when I'm there. Yeah, it'll be probably, I think just timing. Okay,

31
00:01:36.840 --> 00:01:47.120
<v Speaker 1>let's get into better now a framework. All right, man,

32
00:01:47.120 --> 00:01:50.400
<v Speaker 1>what do you got long last? Yeah, Music to Code

33
00:01:50.400 --> 00:01:53.519
<v Speaker 1>Buy track twenty two is available.

34
00:01:53.640 --> 00:01:54.959
<v Speaker 2>Oh my goodness, it has been a while.

35
00:01:55.159 --> 00:01:59.680
<v Speaker 1>Is available for download and it's been added into the

36
00:02:00.040 --> 00:02:04.599
<v Speaker 1>Election and the Wave collection and the Flat collection and

37
00:02:04.760 --> 00:02:07.519
<v Speaker 1>you can go get it at music toocode buy dot net. Awesome,

38
00:02:07.599 --> 00:02:11.680
<v Speaker 1>but that's not the only thing. Maybe should we play

39
00:02:11.800 --> 00:02:12.520
<v Speaker 1>just a little bit of it?

40
00:02:12.639 --> 00:02:12.840
<v Speaker 2>Yeah?

41
00:02:12.879 --> 00:02:33.719
<v Speaker 1>You should, all right, I should go ahead, So there

42
00:02:33.759 --> 00:02:35.039
<v Speaker 1>you go. It's just a little bit of it.

43
00:02:35.560 --> 00:02:36.000
<v Speaker 2>Awesome.

44
00:02:36.120 --> 00:02:39.439
<v Speaker 1>Yeah. So I do have an announcement around this whole

45
00:02:39.520 --> 00:02:42.199
<v Speaker 1>music to Code by, music to Flow by whatever thing.

46
00:02:42.719 --> 00:02:46.280
<v Speaker 1>So music to Code by, you know, it started long

47
00:02:46.319 --> 00:02:51.879
<v Speaker 1>ago as a project that was on Kickstarter, did an

48
00:02:51.919 --> 00:02:55.879
<v Speaker 1>album with three tracks and sent out a CD, and

49
00:02:55.919 --> 00:02:58.680
<v Speaker 1>then I started making more tracks and selling them digitally

50
00:02:59.560 --> 00:03:01.159
<v Speaker 1>and it all was going pretty well, and it kind

51
00:03:01.159 --> 00:03:04.479
<v Speaker 1>of slowed down quite a lot, and then every once

52
00:03:04.479 --> 00:03:07.319
<v Speaker 1>in a while, I'd throw out another track every year,

53
00:03:07.479 --> 00:03:10.280
<v Speaker 1>every couple of years. And I really wanted to market

54
00:03:10.319 --> 00:03:13.560
<v Speaker 1>it outside of developers, because the developers are the only

55
00:03:13.599 --> 00:03:16.080
<v Speaker 1>ones who know what music to code, buy is, and

56
00:03:16.599 --> 00:03:19.360
<v Speaker 1>anybody else looks at that and says, I don't code,

57
00:03:19.520 --> 00:03:21.680
<v Speaker 1>what do I need this for? And so I really

58
00:03:21.719 --> 00:03:25.599
<v Speaker 1>wanted to market it as a you know, a relaxation,

59
00:03:25.800 --> 00:03:29.000
<v Speaker 1>a focused tool to the broader audience. So I tried

60
00:03:29.080 --> 00:03:32.439
<v Speaker 1>music to flow by. Well that didn't really work either,

61
00:03:32.759 --> 00:03:37.560
<v Speaker 1>and so I'm rebranding it yet again, and it's going

62
00:03:37.599 --> 00:03:41.000
<v Speaker 1>to be called Magic Focus Music. Interesting, Yeah, because I

63
00:03:41.039 --> 00:03:44.759
<v Speaker 1>think that kind of describes what it is. And I

64
00:03:44.800 --> 00:03:47.560
<v Speaker 1>don't want to do this as an app. And here's why.

65
00:03:48.000 --> 00:03:53.159
<v Speaker 1>I'm basically charging for access to this music, right And

66
00:03:53.479 --> 00:03:55.439
<v Speaker 1>if you do an app, then you have to go

67
00:03:55.520 --> 00:04:00.599
<v Speaker 1>through the app store in a purchases give thirty percent.

68
00:04:00.800 --> 00:04:03.759
<v Speaker 1>What a what a racket that is? So I'm building

69
00:04:03.800 --> 00:04:08.560
<v Speaker 1>a website. It'll be mobile friendly, you'll sign up, you'll

70
00:04:08.599 --> 00:04:11.599
<v Speaker 1>buy your stuff. It's going to be subscription, it's going

71
00:04:11.680 --> 00:04:17.360
<v Speaker 1>to be affordable. And because I also figure that people

72
00:04:17.399 --> 00:04:20.480
<v Speaker 1>are going to mostly use this like in their laptops,

73
00:04:21.079 --> 00:04:23.199
<v Speaker 1>on their when they're working on their laptops, when they're

74
00:04:23.240 --> 00:04:27.519
<v Speaker 1>on their desktop. So don't really foresee anybody putting it

75
00:04:27.560 --> 00:04:31.240
<v Speaker 1>on on their phone while they're using their phone, because

76
00:04:31.279 --> 00:04:33.639
<v Speaker 1>if he's in their phone, they're not really focusing on anything,

77
00:04:33.680 --> 00:04:36.920
<v Speaker 1>are they true? Yeah, yeah, so that's the story. Look

78
00:04:36.959 --> 00:04:41.439
<v Speaker 1>for music tooflow by dot com. I will mention it

79
00:04:41.519 --> 00:04:43.519
<v Speaker 1>on the show when it is available, but I'm working

80
00:04:43.600 --> 00:04:46.480
<v Speaker 1>on it right now, and in the meantime, if you

81
00:04:46.480 --> 00:04:48.879
<v Speaker 1>want to just download the tracks and manage them yourself,

82
00:04:48.920 --> 00:04:51.800
<v Speaker 1>like most developers like to do, go to music toocoba

83
00:04:51.920 --> 00:04:55.399
<v Speaker 1>dot net. It's the same stuff, all right, It's exactly

84
00:04:55.439 --> 00:04:57.079
<v Speaker 1>the same music. So that's it.

85
00:04:57.160 --> 00:04:59.160
<v Speaker 2>Cool man, That's what I got. Who's talking to us today,

86
00:04:59.199 --> 00:05:01.959
<v Speaker 2>Richard Grady Calm on Top of Show eighteen sixty one.

87
00:05:02.000 --> 00:05:04.160
<v Speaker 2>We did it with Jeremy back in August of twenty

88
00:05:04.240 --> 00:05:08.399
<v Speaker 2>twenty three. You know that I thought talking about minimal architecture. Hey,

89
00:05:08.399 --> 00:05:10.560
<v Speaker 2>we're going to talk about vertical architecture, but first we

90
00:05:10.560 --> 00:05:13.720
<v Speaker 2>talked about minimal architecture eighteen months ago. So Damien had

91
00:05:13.720 --> 00:05:16.000
<v Speaker 2>this great comedy, said a great episode. I always enjoy

92
00:05:16.040 --> 00:05:19.160
<v Speaker 2>hearing from Jeremy, and it's great to see. Finally a

93
00:05:19.279 --> 00:05:23.560
<v Speaker 2>tapering off of the micro services hype. I found much

94
00:05:23.600 --> 00:05:29.519
<v Speaker 2>greater developer efficiency aggressively building natural quote seams that's seams

95
00:05:30.439 --> 00:05:34.480
<v Speaker 2>seems into projects. Version one or the test edition might

96
00:05:34.519 --> 00:05:37.199
<v Speaker 2>ship is a single process, but built from multiple projects,

97
00:05:37.199 --> 00:05:40.160
<v Speaker 2>which can then be easily broken into deployal microservice if

98
00:05:40.639 --> 00:05:44.199
<v Speaker 2>and when required. Another approach is to have multiple build

99
00:05:44.279 --> 00:05:46.519
<v Speaker 2>versions of a product. One is a single process and

100
00:05:46.560 --> 00:05:49.560
<v Speaker 2>others might be split into multiple micro services. And if

101
00:05:49.560 --> 00:05:51.360
<v Speaker 2>you get your seams right, the amount of additional work

102
00:05:51.399 --> 00:05:54.439
<v Speaker 2>is trivial. It can be a good exercise which forces

103
00:05:54.480 --> 00:05:57.839
<v Speaker 2>clean separations as a project grows and allows simple deployments

104
00:05:57.879 --> 00:06:01.279
<v Speaker 2>and a fast develop when the mega load volumes are required.

105
00:06:02.079 --> 00:06:04.439
<v Speaker 2>I find it useful to actively try and separate development

106
00:06:04.519 --> 00:06:08.160
<v Speaker 2>from ultimate deployment. The vast majority of our business code

107
00:06:08.199 --> 00:06:10.560
<v Speaker 2>can run just as well on a watch as in

108
00:06:10.560 --> 00:06:14.759
<v Speaker 2>the cloud. Although obstensibly ridiculous, I don't know watch based

109
00:06:14.800 --> 00:06:21.160
<v Speaker 2>development approaching AI. Yeah, well, of course you'll have.

110
00:06:21.120 --> 00:06:24.720
<v Speaker 1>To have a cy my coffee cup as AI in it.

111
00:06:24.839 --> 00:06:30.279
<v Speaker 2>Yes, my fork. Although obstensibly ridiculous, as all AI projects

112
00:06:30.279 --> 00:06:32.920
<v Speaker 2>are approaching designs with the goal of running it on

113
00:06:33.000 --> 00:06:35.720
<v Speaker 2>a watch can push towards some good, clean design decisions.

114
00:06:35.800 --> 00:06:37.920
<v Speaker 2>I think you got a good insight here, Damien, which

115
00:06:37.959 --> 00:06:42.000
<v Speaker 2>is you're pushing on Conway's law that if we organize

116
00:06:42.040 --> 00:06:46.600
<v Speaker 2>the project into logical units, those are the those become

117
00:06:46.639 --> 00:06:49.720
<v Speaker 2>the natural seams. So you start thinking about what are

118
00:06:49.759 --> 00:06:52.720
<v Speaker 2>the areas of resonance, like what's likely to change, keep

119
00:06:52.759 --> 00:06:55.839
<v Speaker 2>that separate, and whether you compile it all into one

120
00:06:55.839 --> 00:06:58.839
<v Speaker 2>big assembly or not doesn't matter. Right, The deployment is

121
00:06:58.879 --> 00:07:01.439
<v Speaker 2>separate from the construction. So Damian, thank you so much

122
00:07:01.480 --> 00:07:03.199
<v Speaker 2>for your comment, and a copy of musico By. It's

123
00:07:03.240 --> 00:07:04.399
<v Speaker 2>on its way to you. And if you'd like a

124
00:07:04.399 --> 00:07:06.079
<v Speaker 2>copy of musico By, I write a comment on the

125
00:07:06.079 --> 00:07:08.240
<v Speaker 2>website at dot at Rocks, dot Commra on the Facebook,

126
00:07:08.240 --> 00:07:10.120
<v Speaker 2>so we publish every show there, and if you comment

127
00:07:10.120 --> 00:07:11.319
<v Speaker 2>there at everyady on the show, we'll send you a

128
00:07:11.399 --> 00:07:12.160
<v Speaker 2>copy of music Oe.

129
00:07:12.240 --> 00:07:15.560
<v Speaker 1>And you can follow us on the other social media's.

130
00:07:15.639 --> 00:07:18.759
<v Speaker 1>We've been on ex Twitter forever. We're also on mastadon

131
00:07:19.079 --> 00:07:24.240
<v Speaker 1>and at Blue Sky, which is really coming along, and

132
00:07:23.480 --> 00:07:29.600
<v Speaker 1>some aberration of at Carl Franklin and at Rich Campbell absolutely. Yeah.

133
00:07:29.680 --> 00:07:33.079
<v Speaker 1>All right, So before we introduced Jeremy Miller, let's talk

134
00:07:33.079 --> 00:07:37.000
<v Speaker 1>about nineteen thirty nine. Some significant events included the start

135
00:07:37.040 --> 00:07:37.800
<v Speaker 1>of World War two.

136
00:07:38.199 --> 00:07:39.600
<v Speaker 2>Yeah, that's kind of a significant event.

137
00:07:39.720 --> 00:07:43.600
<v Speaker 1>Yeah. Germany invaded Poland on September first, leading Britain and

138
00:07:43.639 --> 00:07:46.920
<v Speaker 1>France declare war on Germany. Additionally, this year saw the

139
00:07:47.000 --> 00:07:51.000
<v Speaker 1>debut of iconic cultural works like The Wizard of Oz

140
00:07:51.600 --> 00:07:55.120
<v Speaker 1>and the first NCAA basketball tournament. What do you got

141
00:07:55.120 --> 00:07:56.000
<v Speaker 1>on near lest Richard?

142
00:07:56.160 --> 00:07:58.240
<v Speaker 2>You know, I've been doing I've been doing the future

143
00:07:58.240 --> 00:08:00.959
<v Speaker 2>of energy since the Worldwide Energy Geek out what ten

144
00:08:01.040 --> 00:08:05.680
<v Speaker 2>years ago, and that finally spun into folks asking me

145
00:08:05.879 --> 00:08:08.920
<v Speaker 2>to do talks just on nuclear power, which and now

146
00:08:08.959 --> 00:08:11.879
<v Speaker 2>I've done for the past year or so. And interesting, curiously,

147
00:08:11.879 --> 00:08:14.079
<v Speaker 2>I started doing them before it got really exciting, because

148
00:08:14.079 --> 00:08:16.399
<v Speaker 2>it really has been around on to nuclear power. But

149
00:08:16.560 --> 00:08:19.480
<v Speaker 2>one of the cornerstones of that entire story is starts

150
00:08:19.480 --> 00:08:25.240
<v Speaker 2>in nineteen thirty nine when Autahon and lease Meitner published

151
00:08:25.240 --> 00:08:28.959
<v Speaker 2>the paper on splitting a uranium atom for the first time. Wow,

152
00:08:30.279 --> 00:08:34.519
<v Speaker 2>And interestingly, they calculated the yield of the energy of

153
00:08:34.559 --> 00:08:39.679
<v Speaker 2>splitting that atom from Einstein's nineteen oh five paper equals

154
00:08:39.799 --> 00:08:43.440
<v Speaker 2>mc squared and he was absolutely completely right, Like the

155
00:08:43.519 --> 00:08:47.720
<v Speaker 2>numbers worked perfectly. So thirty something years before this guy

156
00:08:47.759 --> 00:08:51.000
<v Speaker 2>had figured out, well, if you really could convert matter

157
00:08:51.039 --> 00:08:53.720
<v Speaker 2>into energy, this is how much you'd get. And that

158
00:08:54.000 --> 00:08:56.759
<v Speaker 2>paper is sorted to the foundational piece like first time

159
00:08:56.840 --> 00:08:59.519
<v Speaker 2>the intentionally split the ADAM was nineteen thirty nine and

160
00:09:00.000 --> 00:09:03.279
<v Speaker 2>eighteen forty five they will deploy the first automic bomb.

161
00:09:03.639 --> 00:09:07.120
<v Speaker 1>I don't know if it was this paper or which

162
00:09:07.200 --> 00:09:11.440
<v Speaker 1>one that after it was proven, they came to Einstein

163
00:09:11.480 --> 00:09:13.879
<v Speaker 1>and said, professor, you were right, you were right. Isn't

164
00:09:13.879 --> 00:09:15.720
<v Speaker 1>that a victory for you. He says, no, it's a

165
00:09:15.759 --> 00:09:16.720
<v Speaker 1>victory for God.

166
00:09:18.879 --> 00:09:24.960
<v Speaker 2>Very that's very Einsteinian. Yeah, yeah, but yeah, he's it's

167
00:09:25.000 --> 00:09:27.840
<v Speaker 2>amazing how quickly all of that happened. Yeah, you know.

168
00:09:27.879 --> 00:09:31.320
<v Speaker 2>The good news is from that came this paper from

169
00:09:31.399 --> 00:09:34.799
<v Speaker 2>the English, the mod Report, that said both we can

170
00:09:34.879 --> 00:09:36.679
<v Speaker 2>use this to make energy and we can use this

171
00:09:36.759 --> 00:09:41.120
<v Speaker 2>to make weapons, and whereupon they probably did both.

172
00:09:41.360 --> 00:09:41.919
<v Speaker 1>Yeah.

173
00:09:42.000 --> 00:09:44.480
<v Speaker 2>Yeah, nineteen thirty nine pivotal year and.

174
00:09:44.639 --> 00:09:47.559
<v Speaker 1>A pivotal episode of dot net rocks. Because our old

175
00:09:47.600 --> 00:09:51.799
<v Speaker 1>friend Jeremy Miller is here. And you know, if if

176
00:09:51.840 --> 00:09:54.799
<v Speaker 1>you're younger than us. You probably you might know who

177
00:09:54.840 --> 00:09:57.559
<v Speaker 1>he is, but if you've been around for a few

178
00:09:57.639 --> 00:10:00.320
<v Speaker 1>years like we have, you'll definitely know. So I'm going

179
00:10:00.360 --> 00:10:03.440
<v Speaker 1>to read your bio anyway. Jeremy Jeremy Miller started his

180
00:10:03.519 --> 00:10:07.080
<v Speaker 1>career as a real engineer that's in quotes, but wandered

181
00:10:07.080 --> 00:10:10.639
<v Speaker 1>into software because that looked like more fun. Since then,

182
00:10:10.759 --> 00:10:14.840
<v Speaker 1>Jeremy has worked in and led software development teams in

183
00:10:14.879 --> 00:10:21.120
<v Speaker 1>the computer manufacturing industry, finance, insurance, healthcare, and banking industries. Lately,

184
00:10:21.200 --> 00:10:24.519
<v Speaker 1>Jeremy has been focused on leading software architecture and teams

185
00:10:24.960 --> 00:10:28.720
<v Speaker 1>and helping mentor other software architects, and by lately I

186
00:10:28.720 --> 00:10:33.759
<v Speaker 1>mean the last ten years right. Having had roles both

187
00:10:33.919 --> 00:10:37.480
<v Speaker 1>as an in house software architect and software consultant, Jeremy

188
00:10:37.559 --> 00:10:40.240
<v Speaker 1>has a great deal of insight into the challenges that

189
00:10:40.279 --> 00:10:45.000
<v Speaker 1>confront companies developing and maintaining enterprise systems over time. Jeremy

190
00:10:45.039 --> 00:10:47.679
<v Speaker 1>is well known for his open source software tools, starting

191
00:10:47.679 --> 00:10:52.759
<v Speaker 1>with structure Map and continuing to Martin and Wolverine and others.

192
00:10:52.840 --> 00:10:55.519
<v Speaker 1>Jeremy is also a frequent author and technical speaker at

193
00:10:55.519 --> 00:11:00.000
<v Speaker 1>software conferences and can be found at JEREMYD. Miller dot com.

194
00:11:00.440 --> 00:11:03.759
<v Speaker 1>Welcome back, sir, thank you very much and very sorry.

195
00:11:03.879 --> 00:11:07.000
<v Speaker 3>Let me apologize for writing such a ridiculously long I

196
00:11:07.120 --> 00:11:08.039
<v Speaker 3>hope for you.

197
00:11:08.120 --> 00:11:11.279
<v Speaker 1>Well, people need to know who you are, and uh, yeah,

198
00:11:11.759 --> 00:11:17.399
<v Speaker 1>you're the guy. And Hibernate Mafia member is not in there, however, heard.

199
00:11:17.600 --> 00:11:20.840
<v Speaker 3>Oh if we could just kindly kindly let that one,

200
00:11:22.000 --> 00:11:23.000
<v Speaker 3>that one go by.

201
00:11:23.039 --> 00:11:24.080
<v Speaker 2>A long time ago.

202
00:11:24.279 --> 00:11:26.159
<v Speaker 1>Man, that's right, nobody remembers.

203
00:11:26.279 --> 00:11:29.639
<v Speaker 3>Yeah, most of your audience, most of your audience is wondering,

204
00:11:29.679 --> 00:11:30.879
<v Speaker 3>what is it Hybernate.

205
00:11:31.320 --> 00:11:32.960
<v Speaker 1>That's all right, we don't need to tell him.

206
00:11:35.440 --> 00:11:37.360
<v Speaker 2>How is the critter stack these days?

207
00:11:37.639 --> 00:11:40.759
<v Speaker 3>Yeah, so the critive sack. Somebody was making fun of

208
00:11:40.759 --> 00:11:44.679
<v Speaker 3>that today. Martin and Wolverine moving along very well. So

209
00:11:44.759 --> 00:11:47.799
<v Speaker 3>at this point, you know, the shameless plug park. At

210
00:11:47.799 --> 00:11:50.559
<v Speaker 3>this point, I would say Martin is the most widely

211
00:11:50.679 --> 00:11:54.480
<v Speaker 3>used to ben sourcing tool dotnet. I think it's by

212
00:11:54.519 --> 00:11:57.519
<v Speaker 3>far and away the most robust. I think we're this.

213
00:11:57.919 --> 00:12:00.480
<v Speaker 3>We had such a huge year last year in terms

214
00:12:00.519 --> 00:12:04.120
<v Speaker 3>of future development. I think I'm ready at the point

215
00:12:04.120 --> 00:12:06.320
<v Speaker 3>to say I think we stand up against any events

216
00:12:06.360 --> 00:12:12.759
<v Speaker 3>sourcing infrastructure across any ecosystem. Nice good Wolverine completes Wolverine

217
00:12:12.759 --> 00:12:15.879
<v Speaker 3>and some other littler things complete the the the whole

218
00:12:15.919 --> 00:12:20.720
<v Speaker 3>critter stack, and that is that's a purposeful theme. Moving

219
00:12:20.759 --> 00:12:23.080
<v Speaker 3>really fast on that, and like one of the specifics

220
00:12:23.120 --> 00:12:26.320
<v Speaker 3>we'll talk about is how Wolverine has some special sauce

221
00:12:26.360 --> 00:12:31.080
<v Speaker 3>for doing vertical slice architecture and almost to take the well,

222
00:12:31.080 --> 00:12:33.559
<v Speaker 3>eventually you're gonna let you, you're gonna make me, let

223
00:12:33.559 --> 00:12:36.720
<v Speaker 3>me take a tangent on your comment from Damian earlier.

224
00:12:37.759 --> 00:12:40.440
<v Speaker 3>It's also developing a lot of special sauce for doing

225
00:12:40.519 --> 00:12:44.480
<v Speaker 3>modular monoliths, and we might wanna, might want to talk

226
00:12:44.559 --> 00:12:47.639
<v Speaker 3>about why the modular monolith idea is absolutely not a

227
00:12:47.679 --> 00:12:50.639
<v Speaker 3>silver bullet and there's a lot more challenges than I

228
00:12:50.639 --> 00:12:52.480
<v Speaker 3>think people are recognizing right now.

229
00:12:52.600 --> 00:12:54.519
<v Speaker 2>Yeah, dude, if there was an easy way to do it,

230
00:12:54.519 --> 00:12:56.159
<v Speaker 2>we'd be doing it. Everything is hard.

231
00:12:57.519 --> 00:12:58.440
<v Speaker 3>Yeah, it was easy.

232
00:12:58.440 --> 00:13:00.679
<v Speaker 2>You could buy it at seven to eleven. Everything is

233
00:13:00.720 --> 00:13:05.799
<v Speaker 2>definitely hard. You know, we've kept circling back on this idea.

234
00:13:05.799 --> 00:13:08.360
<v Speaker 2>I mean, of course twenty something years have done at Rocks.

235
00:13:09.000 --> 00:13:12.200
<v Speaker 2>We've gone through it all. Man, Like, remember when SOA

236
00:13:12.399 --> 00:13:16.240
<v Speaker 2>was a good idea and yeah, then we talked about

237
00:13:16.279 --> 00:13:18.960
<v Speaker 2>the various globs of goo and now you call them

238
00:13:19.000 --> 00:13:22.840
<v Speaker 2>monoliths and then you know this modularization or peeling pieces

239
00:13:22.840 --> 00:13:25.960
<v Speaker 2>off like it's it's a cycle, right, you know, we're

240
00:13:26.000 --> 00:13:27.279
<v Speaker 2>all trying to build better software.

241
00:13:27.440 --> 00:13:30.440
<v Speaker 1>SOA was an eye opener for me, not in the

242
00:13:30.720 --> 00:13:33.879
<v Speaker 1>implementation that was suggested at the time, because I thought

243
00:13:33.879 --> 00:13:36.080
<v Speaker 1>that was way over architected, but just the idea of

244
00:13:36.120 --> 00:13:40.200
<v Speaker 1>having islands. I thought that was a good idea, and

245
00:13:40.279 --> 00:13:42.279
<v Speaker 1>it was one that hadn't occurred to me up to then.

246
00:13:42.480 --> 00:13:44.559
<v Speaker 3>I think you read it to it more so. I

247
00:13:44.679 --> 00:13:47.679
<v Speaker 3>was a Dell Computers at the time when when Dell

248
00:13:47.799 --> 00:13:51.720
<v Speaker 3>still manufactured their own stuff. So I'm trying to apply

249
00:13:51.799 --> 00:13:55.360
<v Speaker 3>that to at the time manufacturing it when you have

250
00:13:55.440 --> 00:13:59.200
<v Speaker 3>shipping systems and inventory systems and a million and one

251
00:13:59.399 --> 00:14:02.440
<v Speaker 3>little one off things where they may need to want

252
00:14:02.480 --> 00:14:03.960
<v Speaker 3>to talk to each other, where you don't want to

253
00:14:04.039 --> 00:14:08.600
<v Speaker 3>duplicate as much data, you know, SOA was it was

254
00:14:08.639 --> 00:14:12.000
<v Speaker 3>attractive at least in theory, right I don't I don't

255
00:14:12.000 --> 00:14:14.360
<v Speaker 3>think anybody wants to reuse any of the mechanisms we

256
00:14:14.559 --> 00:14:15.279
<v Speaker 3>use back then though.

257
00:14:15.360 --> 00:14:17.240
<v Speaker 1>Now, yeah, that's exactly what I'm saying.

258
00:14:17.360 --> 00:14:20.320
<v Speaker 2>Tooling is always a problem with this idea that SO

259
00:14:20.679 --> 00:14:23.159
<v Speaker 2>was catching. It was basically at the forefront of the

260
00:14:23.200 --> 00:14:25.720
<v Speaker 2>fact that we were about to blow the client up, right,

261
00:14:25.759 --> 00:14:27.639
<v Speaker 2>that that you were going to have phones, were going

262
00:14:27.679 --> 00:14:29.360
<v Speaker 2>to be real clients. There was going to be multiple

263
00:14:29.360 --> 00:14:32.240
<v Speaker 2>devices and multiple platforms, you know, coming out of the

264
00:14:32.279 --> 00:14:35.000
<v Speaker 2>wind Tell hegemony where you were building on the same

265
00:14:35.039 --> 00:14:37.279
<v Speaker 2>machine that everybody was working from. Or we didn't ever

266
00:14:37.360 --> 00:14:39.720
<v Speaker 2>think about it all that, which was a weird time.

267
00:14:40.519 --> 00:14:43.120
<v Speaker 2>It is always said, hey, this back end code you'll

268
00:14:43.159 --> 00:14:45.600
<v Speaker 2>work for everything. You'll only have to write that once

269
00:14:45.679 --> 00:14:47.240
<v Speaker 2>and now you'll be You just got to set a

270
00:14:47.279 --> 00:14:50.080
<v Speaker 2>services that you can decide what client you want to use.

271
00:14:50.960 --> 00:14:54.559
<v Speaker 3>Yes, that also went also went a lot easier when

272
00:14:54.559 --> 00:14:57.320
<v Speaker 3>we gave up on the full XML soap.

273
00:14:57.120 --> 00:15:00.000
<v Speaker 2>Thing and oh lord save from eximum.

274
00:15:00.399 --> 00:15:03.000
<v Speaker 3>Yeah, we're old enough. We lived through.

275
00:15:02.919 --> 00:15:04.919
<v Speaker 2>The wisdole, the wisdole nightmare.

276
00:15:05.039 --> 00:15:05.240
<v Speaker 1>Yeah.

277
00:15:05.279 --> 00:15:08.879
<v Speaker 3>Hell uh are systems that did three or four levels

278
00:15:08.919 --> 00:15:12.200
<v Speaker 3>of XML transformation to the point where you had no

279
00:15:12.240 --> 00:15:15.240
<v Speaker 3>traceability between up to downstream.

280
00:15:14.799 --> 00:15:16.799
<v Speaker 1>Right, we should never have needed biz talk.

281
00:15:18.600 --> 00:15:21.000
<v Speaker 2>Yeah, I mean the origins of bis talk before the

282
00:15:21.080 --> 00:15:26.600
<v Speaker 2>soap layer were you know, pre Internet intercommunications, Like they

283
00:15:26.600 --> 00:15:32.120
<v Speaker 2>were doing serious transformation of data for connecting between companies. Right,

284
00:15:32.519 --> 00:15:35.399
<v Speaker 2>the fact that we standardize the network and then it

285
00:15:35.440 --> 00:15:37.799
<v Speaker 2>starts standardizing protocols. You're right, we should have been able

286
00:15:37.840 --> 00:15:39.720
<v Speaker 2>to move away from it biz talk. I think just

287
00:15:39.759 --> 00:15:42.480
<v Speaker 2>tried to stay relevant. Yeah, Plus we kept screwing up.

288
00:15:43.559 --> 00:15:47.720
<v Speaker 2>These interplay protocols were bad, right, and they were always

289
00:15:47.799 --> 00:15:49.399
<v Speaker 2>bad like CORBA was bad.

290
00:15:50.279 --> 00:15:52.559
<v Speaker 3>Is the last we will go down this rabbit hole.

291
00:15:52.600 --> 00:15:55.600
<v Speaker 3>The last video I recorded, we talked about DCOM, a

292
00:15:55.720 --> 00:15:56.840
<v Speaker 3>DCOM war story.

293
00:15:56.919 --> 00:15:59.759
<v Speaker 2>So oh boy, and you know the D stands for dumb.

294
00:16:00.879 --> 00:16:05.279
<v Speaker 1>Welcome to three old guys talking about technology that doesn't

295
00:16:05.279 --> 00:16:06.039
<v Speaker 1>exist anymore.

296
00:16:06.440 --> 00:16:09.679
<v Speaker 2>But to the to your point, it's better now, right,

297
00:16:09.799 --> 00:16:14.039
<v Speaker 2>Like we have learned, we have better platforms, we have

298
00:16:14.120 --> 00:16:17.519
<v Speaker 2>more standardization. We we understand what a cloud proxy is

299
00:16:17.559 --> 00:16:19.720
<v Speaker 2>for and why it makes our lives so much better.

300
00:16:19.840 --> 00:16:20.960
<v Speaker 2>Like things are better.

301
00:16:22.120 --> 00:16:24.840
<v Speaker 3>I'll go farther the done it, I mean, we're all

302
00:16:24.840 --> 00:16:28.759
<v Speaker 3>done at guys. Here the donet ecosystem, I think it's

303
00:16:28.840 --> 00:16:33.919
<v Speaker 3>just generation vastly better after the dynat core wave of things.

304
00:16:34.120 --> 00:16:38.679
<v Speaker 3>Some of the low level abstractions that they put in

305
00:16:38.799 --> 00:16:44.000
<v Speaker 3>place I host, the I configuration, eyewagger, those standard interfaces,

306
00:16:44.039 --> 00:16:47.960
<v Speaker 3>the I host builder, so much of that has.

307
00:16:48.279 --> 00:16:51.320
<v Speaker 2>I'm coupling it from Windows entirely. That process, that rething

308
00:16:51.519 --> 00:16:53.399
<v Speaker 2>just made it a better profit platform.

309
00:16:53.519 --> 00:16:56.759
<v Speaker 3>Yes, I'm I'm doing this on a Mac. I haven't

310
00:16:56.799 --> 00:17:02.000
<v Speaker 3>coded on Windows in years except for Pararelel. Yeah. Love

311
00:17:02.039 --> 00:17:02.799
<v Speaker 3>the new World Order.

312
00:17:02.879 --> 00:17:04.119
<v Speaker 1>Now with dot net nine.

313
00:17:04.319 --> 00:17:06.799
<v Speaker 2>Yeah, well, and in the cloud, you're crazy not to

314
00:17:06.920 --> 00:17:09.359
<v Speaker 2>run it on Linux. Run dot nen olynux. It's a

315
00:17:09.400 --> 00:17:11.000
<v Speaker 2>twenty five percent discount if you do.

316
00:17:10.960 --> 00:17:12.839
<v Speaker 1>It and add dot Net nine into the mix and

317
00:17:13.039 --> 00:17:16.359
<v Speaker 1>using what eighty percent less memory or something crazy like that.

318
00:17:17.440 --> 00:17:20.279
<v Speaker 1>Dot Net nine uses so much less memory.

319
00:17:20.279 --> 00:17:22.880
<v Speaker 3>So I'm not I'm not really running apps in production

320
00:17:23.039 --> 00:17:25.039
<v Speaker 3>to know that, but I can say every time we

321
00:17:25.079 --> 00:17:28.640
<v Speaker 3>get a new dot net version, my build times go down. Yeah, yeah,

322
00:17:28.799 --> 00:17:30.119
<v Speaker 3>cannot complain.

323
00:17:30.200 --> 00:17:32.680
<v Speaker 2>And you and run times are faster like they really,

324
00:17:32.960 --> 00:17:36.119
<v Speaker 2>I don't know how they can keep this up. Is

325
00:17:36.160 --> 00:17:39.480
<v Speaker 2>there a law? Is there a law of this? At

326
00:17:39.480 --> 00:17:41.799
<v Speaker 2>some point it's only one bit being flipped, and that's

327
00:17:41.839 --> 00:17:42.440
<v Speaker 2>just not enough.

328
00:17:42.519 --> 00:17:45.000
<v Speaker 1>There it is Campbell's law right there. Yeah, you heard

329
00:17:45.000 --> 00:17:50.880
<v Speaker 1>it here. First, we will continue optimizing until there's only

330
00:17:50.920 --> 00:17:51.519
<v Speaker 1>one bit.

331
00:17:51.839 --> 00:17:55.079
<v Speaker 2>Yeah, down to a bit. Wait, we were going to

332
00:17:55.079 --> 00:17:57.039
<v Speaker 2>talk about something today, I'm sure what we were.

333
00:17:57.160 --> 00:18:01.000
<v Speaker 1>We were vertical architecture with some thing you expressed an

334
00:18:01.000 --> 00:18:01.480
<v Speaker 1>interest in.

335
00:18:01.680 --> 00:18:06.359
<v Speaker 3>Well, it's taking out the vertical slice architecture. But so

336
00:18:06.559 --> 00:18:09.640
<v Speaker 3>this might be a sequel to a sequel or continuation

337
00:18:09.720 --> 00:18:11.559
<v Speaker 3>in the last time time I got together with you

338
00:18:11.559 --> 00:18:16.400
<v Speaker 3>got it? M h. So the phrase vertical slice architecture,

339
00:18:16.400 --> 00:18:20.839
<v Speaker 3>it's popularized by by Jimmy Boguard in the dot net space.

340
00:18:20.880 --> 00:18:25.200
<v Speaker 3>It's you know, it's very very tightly associated with mediator.

341
00:18:26.519 --> 00:18:30.920
<v Speaker 3>Of course, Wolverine supports it, supports it quite differently potentially,

342
00:18:32.039 --> 00:18:34.839
<v Speaker 3>but I guess maybe stop and you know, to explain

343
00:18:34.920 --> 00:18:37.400
<v Speaker 3>what it is. I always got to stop and contrast

344
00:18:37.440 --> 00:18:41.839
<v Speaker 3>it to what's coming before or what's really the state

345
00:18:41.880 --> 00:18:45.039
<v Speaker 3>of the art, at least a few years ago. I'm

346
00:18:45.039 --> 00:18:47.799
<v Speaker 3>sure you guys have plenty of shows with folks coming

347
00:18:47.839 --> 00:18:52.880
<v Speaker 3>on to talk about clean architecture, onion architecture, extagonal ports

348
00:18:52.880 --> 00:18:55.759
<v Speaker 3>and adapters, done it right. I've been there, done now.

349
00:18:56.200 --> 00:19:02.279
<v Speaker 3>So they're very well meaning attempts to try to, you know,

350
00:19:02.359 --> 00:19:05.839
<v Speaker 3>establish a kind of a standard for a team get

351
00:19:05.880 --> 00:19:12.200
<v Speaker 3>better results of we want to disentangle business logic from infrastructure.

352
00:19:12.559 --> 00:19:16.799
<v Speaker 3>We'd like to make things testable. And then folks started

353
00:19:16.839 --> 00:19:22.160
<v Speaker 3>to throughout all of these enterprise architecture templates, these prescriptive

354
00:19:22.440 --> 00:19:24.559
<v Speaker 3>you know, look at my repository and I'll tell you

355
00:19:24.920 --> 00:19:27.799
<v Speaker 3>the emptying projects. You have to divide things into the

356
00:19:27.880 --> 00:19:31.200
<v Speaker 3>rules of what things are called, how they're divided. You

357
00:19:31.240 --> 00:19:34.519
<v Speaker 3>know where this goes. So I think we took a

358
00:19:34.559 --> 00:19:38.559
<v Speaker 3>couple of wrong terms. We you know, first thing we

359
00:19:38.599 --> 00:19:42.359
<v Speaker 3>did is these these temples tend to focus too much on,

360
00:19:43.279 --> 00:19:45.680
<v Speaker 3>you know, the nouns of the system. I have an

361
00:19:45.680 --> 00:19:48.400
<v Speaker 3>invoice controller that talks to an invoice service that must

362
00:19:48.440 --> 00:19:51.440
<v Speaker 3>talk to an invoice repository, and they've all got to

363
00:19:51.440 --> 00:19:52.640
<v Speaker 3>be an emptying different.

364
00:19:52.319 --> 00:19:53.839
<v Speaker 1>Projects, right, an email sender.

365
00:19:54.880 --> 00:19:59.200
<v Speaker 3>Yeah, and you know every system, every enterprise system, grows

366
00:19:59.279 --> 00:20:03.680
<v Speaker 3>until there's messaging service right right. Yeah, I've done lots

367
00:20:03.680 --> 00:20:10.519
<v Speaker 3>of those. But you know, it's made us kind of overemphasized,

368
00:20:10.519 --> 00:20:14.319
<v Speaker 3>maybe throwing in a lot of abstractions. You know, we

369
00:20:14.319 --> 00:20:16.599
<v Speaker 3>we maybe took a little too seriously the idea that

370
00:20:16.720 --> 00:20:19.640
<v Speaker 3>it has to be possible to swap out your infrastructure

371
00:20:19.640 --> 00:20:23.240
<v Speaker 3>at a moment's notice, which you know nobody really does

372
00:20:24.240 --> 00:20:29.640
<v Speaker 3>are very rarely right. So what happens in bigger enterprise

373
00:20:29.680 --> 00:20:35.440
<v Speaker 3>systems is you get these huge horizontal layers where every

374
00:20:35.680 --> 00:20:38.519
<v Speaker 3>use case has to bounce through all of these separate layers,

375
00:20:39.160 --> 00:20:41.680
<v Speaker 3>and it becomes very difficult to reason about a single

376
00:20:41.759 --> 00:20:45.160
<v Speaker 3>use case. It's all scattered around, right. You can't really

377
00:20:45.240 --> 00:20:49.039
<v Speaker 3>update anything anyway, even though you have these abstractions, because

378
00:20:49.079 --> 00:20:53.400
<v Speaker 3>it's a full project to replace the database or upgrade

379
00:20:53.400 --> 00:20:57.599
<v Speaker 3>a technology. It's just too bit So. The kind of

380
00:20:57.599 --> 00:21:00.119
<v Speaker 3>Reacto logical reaction to that is the idea of a

381
00:21:00.200 --> 00:21:03.680
<v Speaker 3>vertical slice architecture we are going to take. We're going

382
00:21:03.759 --> 00:21:07.400
<v Speaker 3>to primarily organize code, and here I'm just talking about

383
00:21:07.400 --> 00:21:10.119
<v Speaker 3>how we situate code. I'm not even really talking about

384
00:21:10.240 --> 00:21:13.880
<v Speaker 3>changing the basic constructions or anything like that, but we're

385
00:21:13.920 --> 00:21:17.680
<v Speaker 3>going to try to lean towards organizing code around use

386
00:21:17.720 --> 00:21:21.960
<v Speaker 3>cases or especially works well with cqurs. I'm going to

387
00:21:22.039 --> 00:21:25.359
<v Speaker 3>organize code around the command and everything it takes to

388
00:21:25.400 --> 00:21:29.240
<v Speaker 3>handle that command or ACQUERI and everything that they square it.

389
00:21:29.839 --> 00:21:31.599
<v Speaker 3>The general idea is I'm going to take things that

390
00:21:31.640 --> 00:21:33.640
<v Speaker 3>are closely related and I'm going to put them together,

391
00:21:34.039 --> 00:21:36.119
<v Speaker 3>and things that are not related, I'm going to spread

392
00:21:36.119 --> 00:21:36.559
<v Speaker 3>them out.

393
00:21:36.880 --> 00:21:40.680
<v Speaker 1>Right, So the vertical slice is starts when somebody clicks

394
00:21:40.680 --> 00:21:44.079
<v Speaker 1>a button, let's say on the website and ends when

395
00:21:44.160 --> 00:21:48.240
<v Speaker 1>there's a result, an end result, whether that goes through

396
00:21:48.279 --> 00:21:52.559
<v Speaker 1>a queue or through databases and all these other services,

397
00:21:53.119 --> 00:21:57.680
<v Speaker 1>all those things happen in one place that isn't shared

398
00:21:57.839 --> 00:21:58.839
<v Speaker 1>with the other slices.

399
00:21:59.319 --> 00:22:01.279
<v Speaker 3>So I won't go so I will go all the

400
00:22:01.279 --> 00:22:04.279
<v Speaker 3>way to that extreme. I mean, I would say it's

401
00:22:04.319 --> 00:22:09.000
<v Speaker 3>perfectly valid to share some helper code. But yeah, so

402
00:22:09.200 --> 00:22:11.640
<v Speaker 3>I really think of it as like a single web request.

403
00:22:11.720 --> 00:22:16.079
<v Speaker 3>You're issuing a create invoice or approve invoice command to

404
00:22:16.400 --> 00:22:20.680
<v Speaker 3>an HP endpoint. So everything that it takes to fully

405
00:22:21.279 --> 00:22:24.839
<v Speaker 3>apply that, you know, whatever data you need to fetch,

406
00:22:25.200 --> 00:22:28.960
<v Speaker 3>reading the HP validation business rules, it might have to

407
00:22:29.039 --> 00:22:33.599
<v Speaker 3>happen in finally, persistence, if you were using you know,

408
00:22:33.640 --> 00:22:37.000
<v Speaker 3>Woolring for example. Our idiom is to try to push

409
00:22:37.039 --> 00:22:39.400
<v Speaker 3>you to really do that in one code file.

410
00:22:40.640 --> 00:22:43.680
<v Speaker 2>So, I mean, are you talking about everything through all

411
00:22:43.720 --> 00:22:46.799
<v Speaker 2>of those layers just being a single apply.

412
00:22:46.839 --> 00:22:49.119
<v Speaker 1>Well, you're you're separating the UI though, right.

413
00:22:49.400 --> 00:22:51.960
<v Speaker 3>Yeah, yeah, if it's small enough.

414
00:22:52.079 --> 00:22:52.279
<v Speaker 1>Yeah.

415
00:22:52.319 --> 00:22:55.079
<v Speaker 3>Yeah. I'm a I'm a back end guy. Oka, yeah, Okay,

416
00:22:55.160 --> 00:22:57.680
<v Speaker 3>nobody would let me do front end work unless you

417
00:22:57.680 --> 00:22:58.279
<v Speaker 3>you're desperate.

418
00:22:58.480 --> 00:23:00.440
<v Speaker 1>Yeah, I don't think you'd want to put that in

419
00:23:00.519 --> 00:23:01.599
<v Speaker 1>your UI. Yeah.

420
00:23:01.680 --> 00:23:04.319
<v Speaker 3>No, no, no, no no, I mean that there's a

421
00:23:04.519 --> 00:23:07.839
<v Speaker 3>there's a fallow up conversation. Get somebody on to talk

422
00:23:07.880 --> 00:23:14.920
<v Speaker 3>about composite UI someday. But that's okay. So if it's

423
00:23:14.920 --> 00:23:16.920
<v Speaker 3>if the use case is small enough, I mean, if

424
00:23:16.960 --> 00:23:18.960
<v Speaker 3>it gets big, and you know it's probably with all

425
00:23:18.960 --> 00:23:22.319
<v Speaker 3>those prescriptive templates, they blow up. Is sometimes a particular

426
00:23:22.400 --> 00:23:24.200
<v Speaker 3>use case may be too big, and then you start

427
00:23:24.240 --> 00:23:28.000
<v Speaker 3>splitting things up helpers, maybe you draw out split off

428
00:23:28.039 --> 00:23:31.680
<v Speaker 3>message handlers. But what we're doing with vertical slice is

429
00:23:31.720 --> 00:23:36.400
<v Speaker 3>we're saying, you know, we're not so worried about necessarily

430
00:23:36.440 --> 00:23:40.039
<v Speaker 3>swapping out infrastructure. But I'll come back to that. What

431
00:23:40.119 --> 00:23:41.720
<v Speaker 3>you want, though, is you want to make it as

432
00:23:41.720 --> 00:23:44.599
<v Speaker 3>easy as possible to reason about what is happening in

433
00:23:44.599 --> 00:23:48.000
<v Speaker 3>my system from this input to the outputs it makes

434
00:23:48.279 --> 00:23:51.599
<v Speaker 3>because the business logic changes all the time. Yeah, and

435
00:23:52.519 --> 00:23:54.200
<v Speaker 3>that's where your bug fixes are going to go.

436
00:23:55.640 --> 00:23:57.759
<v Speaker 1>So you're saying, if you have everything in one file,

437
00:23:57.880 --> 00:24:00.400
<v Speaker 1>you don't have to step through the debugger and find

438
00:24:00.400 --> 00:24:04.480
<v Speaker 1>out which modules are being touched in which where they're coming.

439
00:24:04.559 --> 00:24:06.640
<v Speaker 1>And then now you've got this mental list of all

440
00:24:06.640 --> 00:24:09.119
<v Speaker 1>these places where you have to make changes. It's all

441
00:24:09.160 --> 00:24:10.200
<v Speaker 1>in one file.

442
00:24:10.640 --> 00:24:13.480
<v Speaker 3>In the ideal and the ideal you know some things

443
00:24:13.519 --> 00:24:15.839
<v Speaker 3>are going to be too big for that yet out.

444
00:24:15.960 --> 00:24:20.240
<v Speaker 3>But yeah, now to your point, I mean to go

445
00:24:20.400 --> 00:24:24.480
<v Speaker 3>into apostasy here. You know, if you're doing it to

446
00:24:24.519 --> 00:24:30.359
<v Speaker 3>Wolverine style, we're going to push you to ditch repository layers. Well,

447
00:24:30.559 --> 00:24:32.920
<v Speaker 3>at least as a go to default move. There's always

448
00:24:33.039 --> 00:24:38.599
<v Speaker 3>exceptions to directly utilize. If you're using a core use

449
00:24:38.640 --> 00:24:41.920
<v Speaker 3>the dB context. If you're using Martin Martin, you're going

450
00:24:42.000 --> 00:24:45.720
<v Speaker 3>to use I Document Store, Die document session directly with

451
00:24:46.039 --> 00:24:50.319
<v Speaker 3>a huge caveat here. You know, in our case, we

452
00:24:50.359 --> 00:24:53.359
<v Speaker 3>want it still to be in one file, but we'll

453
00:24:53.359 --> 00:24:56.559
<v Speaker 3>take other steps to isolate the business logic code away

454
00:24:56.599 --> 00:25:00.119
<v Speaker 3>from infrastructure so you can and kind of I'll come

455
00:25:00.200 --> 00:25:02.720
<v Speaker 3>back to that, but to be able to go right

456
00:25:02.799 --> 00:25:05.240
<v Speaker 3>down to the metal so you can use every last

457
00:25:05.279 --> 00:25:07.960
<v Speaker 3>bit of power in your data persistence tooling. You know

458
00:25:08.160 --> 00:25:12.519
<v Speaker 3>you need to fiddle with lazy versus eager fetching to

459
00:25:12.559 --> 00:25:15.400
<v Speaker 3>be faster. You need to batch up quaring to be faster.

460
00:25:16.079 --> 00:25:19.799
<v Speaker 1>Would you still want to use a CRUD interface. I mean,

461
00:25:19.799 --> 00:25:22.160
<v Speaker 1>that's the essence of what a repository is. Isn't it

462
00:25:22.160 --> 00:25:25.799
<v Speaker 1>so that you could swap out whatever you know, database

463
00:25:25.960 --> 00:25:29.279
<v Speaker 1>back end for testing memory repository for example.

464
00:25:29.640 --> 00:25:32.680
<v Speaker 3>Okay, so this is the part where people are going

465
00:25:32.720 --> 00:25:35.359
<v Speaker 3>to give you angry comments later, right, No, please bring

466
00:25:35.359 --> 00:25:37.359
<v Speaker 3>it on a little bit controversy. So we've got two

467
00:25:37.359 --> 00:25:40.079
<v Speaker 3>issues here. You know, on one hand, what are we going

468
00:25:40.160 --> 00:25:43.279
<v Speaker 3>to do to be able to swap out infrastructure? Right?

469
00:25:43.440 --> 00:25:43.880
<v Speaker 1>Mm hmm.

470
00:25:43.920 --> 00:25:45.359
<v Speaker 3>We're going to put a pin in that and come

471
00:25:45.400 --> 00:25:45.839
<v Speaker 3>back to it.

472
00:25:45.920 --> 00:25:46.160
<v Speaker 1>Okay.

473
00:25:46.240 --> 00:25:48.920
<v Speaker 3>Second point is how do I make code testable? Yeah, so,

474
00:25:49.279 --> 00:25:52.839
<v Speaker 3>especially with the wolverine style, we're leaning really heavily into

475
00:25:52.880 --> 00:25:56.680
<v Speaker 3>an idea from Jim Shore called the A frame architecture.

476
00:25:57.359 --> 00:25:59.960
<v Speaker 3>So in the show notes all I'll sen Joe Link

477
00:26:00.400 --> 00:26:05.279
<v Speaker 3>there's a paper called Testability without Mocks. I recommend to

478
00:26:05.400 --> 00:26:07.839
<v Speaker 3>everybody who works with me sooner or later the A

479
00:26:08.160 --> 00:26:11.559
<v Speaker 3>frame idea like that. Now, if you're talking about, say

480
00:26:11.599 --> 00:26:14.319
<v Speaker 3>we're building a wolf wearine handler, either an h should

481
00:26:14.319 --> 00:26:17.279
<v Speaker 3>be handler or a message handler. That is mean. Let's

482
00:26:17.279 --> 00:26:21.200
<v Speaker 3>say it's a proven invoice, right, so you probably need

483
00:26:21.200 --> 00:26:24.680
<v Speaker 3>to go get the current state of the invoice because

484
00:26:24.680 --> 00:26:26.759
<v Speaker 3>you may need to look at it. Is it already approved,

485
00:26:26.880 --> 00:26:30.960
<v Speaker 3>is everything done? Has you know everybody signed off? Whatever

486
00:26:31.000 --> 00:26:34.559
<v Speaker 3>it takes, and then decide, decide your business logic, decide

487
00:26:34.559 --> 00:26:37.640
<v Speaker 3>what do I knew? Next do I decide to approve

488
00:26:37.680 --> 00:26:39.920
<v Speaker 3>it and go on and maybe send out other fall

489
00:26:40.039 --> 00:26:44.000
<v Speaker 3>up messages or not, and then finally persist it. So

490
00:26:44.039 --> 00:26:47.960
<v Speaker 3>coming to this idea of an A frame, I'm not

491
00:26:48.000 --> 00:26:51.680
<v Speaker 3>gonna worry about interfaces and mock objects or stubs or

492
00:26:51.680 --> 00:26:54.039
<v Speaker 3>fakes or anything like that. We're going to divide things

493
00:26:54.119 --> 00:26:58.079
<v Speaker 3>up into like kind of a controller on top, the

494
00:26:58.920 --> 00:27:01.039
<v Speaker 3>a guy at top. He is going to reach into

495
00:27:01.160 --> 00:27:04.960
<v Speaker 3>data persistence. He's going to grab the invoice data for you,

496
00:27:05.039 --> 00:27:09.079
<v Speaker 3>push it into the business logic. Business logic. In the

497
00:27:09.119 --> 00:27:11.559
<v Speaker 3>case of Wolverine, we're pushing really hard. We want it

498
00:27:11.559 --> 00:27:12.559
<v Speaker 3>to be a pure function.

499
00:27:12.720 --> 00:27:15.720
<v Speaker 1>Now you keep mentioning Wolverine, but what if people don't

500
00:27:15.799 --> 00:27:18.920
<v Speaker 1>use Wolverine and aren't really familiar with it. How can

501
00:27:18.960 --> 00:27:21.640
<v Speaker 1>you give us an example that doesn't use Wolverine.

502
00:27:22.079 --> 00:27:25.680
<v Speaker 3>Actually, it's just extracting methods. So whether this was mediator

503
00:27:25.839 --> 00:27:29.319
<v Speaker 3>or whatever, it's going to be, just say say you

504
00:27:29.319 --> 00:27:31.599
<v Speaker 3>have a mediator handler and in service bus handler, mass

505
00:27:31.640 --> 00:27:36.319
<v Speaker 3>transit handler, or just just an MVC controller endpoint. What

506
00:27:36.359 --> 00:27:37.960
<v Speaker 3>you're really going to do is just build off some

507
00:27:38.000 --> 00:27:42.680
<v Speaker 3>some helper methods and that's it. So one method is

508
00:27:42.720 --> 00:27:46.559
<v Speaker 3>the controller, NVC controller is going to talk to E

509
00:27:46.680 --> 00:27:50.359
<v Speaker 3>of Core maybe and pull out the invoice information for you, ok. Right,

510
00:27:50.519 --> 00:27:53.839
<v Speaker 3>and then it's going to call into a method that

511
00:27:53.920 --> 00:27:57.319
<v Speaker 3>is your actual business logic. Who say, here's the command

512
00:27:57.519 --> 00:28:00.759
<v Speaker 3>somebody wants to prove this invoice, and here is the

513
00:28:00.799 --> 00:28:04.039
<v Speaker 3>current state of the invoice. And out of that pure function,

514
00:28:04.960 --> 00:28:06.839
<v Speaker 3>you tell me what to do next. You're going to

515
00:28:06.920 --> 00:28:10.359
<v Speaker 3>return some kind of result that is, here's an event

516
00:28:10.400 --> 00:28:12.319
<v Speaker 3>sourcing It could be here's an event I want you

517
00:28:12.359 --> 00:28:17.240
<v Speaker 3>to append invoice approved or approval rejected, whatever it's going

518
00:28:17.319 --> 00:28:20.920
<v Speaker 3>to be, or maybe something that reflects what to do next.

519
00:28:21.799 --> 00:28:26.799
<v Speaker 3>Now our business business function here I keep saying pure function.

520
00:28:27.359 --> 00:28:30.680
<v Speaker 3>You know we're gonna we're gonna dive into functional programming

521
00:28:30.680 --> 00:28:33.599
<v Speaker 3>world a little bit. People are gonna make fun of

522
00:28:33.599 --> 00:28:33.960
<v Speaker 3>me for this.

523
00:28:34.960 --> 00:28:37.759
<v Speaker 1>Now, nobody's making fun of you, dude, nobody.

524
00:28:37.920 --> 00:28:39.559
<v Speaker 3>No, people will on Blue Sky later.

525
00:28:40.079 --> 00:28:41.079
<v Speaker 1>So nobody.

526
00:28:41.200 --> 00:28:43.319
<v Speaker 3>We want to isolate that business logic or it's not

527
00:28:43.359 --> 00:28:46.319
<v Speaker 3>depending on services, there's no interfaces to mock it's just

528
00:28:46.799 --> 00:28:49.480
<v Speaker 3>if you have this state in this command, what do

529
00:28:49.559 --> 00:28:52.720
<v Speaker 3>you do next? You get you get business logic in

530
00:28:52.799 --> 00:28:55.480
<v Speaker 3>place where it's really easy to unit test, no mock

531
00:28:55.559 --> 00:28:58.160
<v Speaker 3>set up, no crazy stuff, no in memory database, I

532
00:28:58.200 --> 00:29:01.160
<v Speaker 3>don't care. And in the last step, you know, the

533
00:29:01.240 --> 00:29:04.680
<v Speaker 3>A frame the controller is like I'm getting stuff for you.

534
00:29:04.880 --> 00:29:07.400
<v Speaker 3>I'm pushing into business logic and I'm taking what you

535
00:29:07.480 --> 00:29:10.640
<v Speaker 3>decide to do next, and then I'm persisting it back

536
00:29:10.640 --> 00:29:13.200
<v Speaker 3>to ef core maybe or Martin or whatever it is,

537
00:29:13.759 --> 00:29:18.440
<v Speaker 3>and I'm sending out extra messages. So the A frame architecture,

538
00:29:18.960 --> 00:29:21.920
<v Speaker 3>it is really a coding approach, but it's a way

539
00:29:22.000 --> 00:29:25.039
<v Speaker 3>to isolate your business logic without having to throw in

540
00:29:25.079 --> 00:29:29.880
<v Speaker 3>a lot of abstractions, a lot of indirections and throwing out,

541
00:29:30.000 --> 00:29:33.160
<v Speaker 3>you know, five different projects like you would in onion architecture.

542
00:29:33.319 --> 00:29:36.920
<v Speaker 1>Right, it simplifies because that that is the fundamental problem

543
00:29:36.920 --> 00:29:41.279
<v Speaker 1>of all these architectures is that they complicate things and

544
00:29:41.319 --> 00:29:44.799
<v Speaker 1>they add all these layers of abstraction for the purpose

545
00:29:44.880 --> 00:29:49.160
<v Speaker 1>of what for you know, for for making it flexible.

546
00:29:49.240 --> 00:29:54.480
<v Speaker 1>But then something is ultimately flexible, it's ultimately difficult to.

547
00:29:54.519 --> 00:29:57.559
<v Speaker 3>Use it is now back to rewind to the point

548
00:29:57.559 --> 00:30:00.519
<v Speaker 3>and you're you. I think you were correctly challenged. Well,

549
00:30:00.519 --> 00:30:03.000
<v Speaker 3>what if I want to swap out my database? Yeah, yeah,

550
00:30:03.119 --> 00:30:05.880
<v Speaker 3>which you're unlikely to do, but you could, so.

551
00:30:07.200 --> 00:30:09.799
<v Speaker 2>I always finally, swap out the database defense a weak defense.

552
00:30:09.839 --> 00:30:11.799
<v Speaker 2>It's like, you're probably not going to do that.

553
00:30:12.160 --> 00:30:16.759
<v Speaker 3>You can't. You can't because if you have a big

554
00:30:16.880 --> 00:30:19.839
<v Speaker 3>enough project and it's a flat layer, you can't because

555
00:30:19.880 --> 00:30:22.440
<v Speaker 3>that's going to be an entire project to do a

556
00:30:22.440 --> 00:30:25.640
<v Speaker 3>full regression testing cycle, and most people can't do it.

557
00:30:25.839 --> 00:30:27.920
<v Speaker 3>Your business partners will never let you do.

558
00:30:27.920 --> 00:30:29.680
<v Speaker 1>That, all right, But here's a I can give you

559
00:30:29.759 --> 00:30:34.759
<v Speaker 1>an example where you would use a repository pattern basically

560
00:30:34.839 --> 00:30:38.119
<v Speaker 1>a cred interface, right is use you could use the

561
00:30:38.119 --> 00:30:41.680
<v Speaker 1>same interface on a client to create a repository that

562
00:30:41.759 --> 00:30:45.079
<v Speaker 1>calls makes all your API calls, and you could use

563
00:30:45.079 --> 00:30:48.039
<v Speaker 1>the same interface on that same client to do something

564
00:30:48.160 --> 00:30:55.200
<v Speaker 1>against the client side database that I can't even remember

565
00:30:55.200 --> 00:30:58.559
<v Speaker 1>the name of it now because I'm stupid, But I

566
00:30:58.680 --> 00:31:02.519
<v Speaker 1>dB something dB all right.

567
00:31:02.400 --> 00:31:03.599
<v Speaker 3>Well just local storage?

568
00:31:03.839 --> 00:31:07.279
<v Speaker 1>Sure, yeah, look not local storage, but there's another there's

569
00:31:07.279 --> 00:31:10.480
<v Speaker 1>another database that's built in a new browser. You can

570
00:31:10.559 --> 00:31:12.960
<v Speaker 1>do that, right and on the back end, if you

571
00:31:13.039 --> 00:31:17.920
<v Speaker 1>wanted to run things against repository that just uses memory

572
00:31:17.920 --> 00:31:21.440
<v Speaker 1>collections to test all your stuff. But I think that

573
00:31:21.839 --> 00:31:25.200
<v Speaker 1>is where you brought up another another thing that you

574
00:31:25.240 --> 00:31:30.160
<v Speaker 1>can test without mocking and test without memory databases and things.

575
00:31:30.240 --> 00:31:32.319
<v Speaker 3>Yes, so I want to test, be able to test.

576
00:31:32.759 --> 00:31:34.039
<v Speaker 3>I would really want to be able to test the

577
00:31:34.039 --> 00:31:37.720
<v Speaker 3>business logic without without having to do a bunch of

578
00:31:37.720 --> 00:31:41.279
<v Speaker 3>mock setups. You know, if you are as old as us,

579
00:31:41.759 --> 00:31:43.240
<v Speaker 3>and I don't think you have to be anywhere near

580
00:31:43.240 --> 00:31:46.160
<v Speaker 3>as old as US, You've dealt with code bases where

581
00:31:46.559 --> 00:31:51.000
<v Speaker 3>the unit tests were unusually hard to work with because

582
00:31:51.039 --> 00:31:54.640
<v Speaker 3>there was too much reliance on mocking libraries or fakes,

583
00:31:55.000 --> 00:31:58.319
<v Speaker 3>and those tests become very hard to reason about. They

584
00:31:58.400 --> 00:32:01.960
<v Speaker 3>become very brittle because you'reation is too tightly coupled to

585
00:32:02.880 --> 00:32:05.880
<v Speaker 3>the luck the system so indexed dB.

586
00:32:06.160 --> 00:32:07.400
<v Speaker 1>That's what I was trying to remember.

587
00:32:07.519 --> 00:32:10.240
<v Speaker 3>Sorry, gotcha, gotcha. I've read about it, never used it.

588
00:32:10.799 --> 00:32:13.559
<v Speaker 3>So a couple of things. The I think your example

589
00:32:13.559 --> 00:32:18.440
<v Speaker 3>of using a repository, I think that's perfectly valid as

590
00:32:18.519 --> 00:32:21.599
<v Speaker 3>far as swapping out the technology. So the single I

591
00:32:21.640 --> 00:32:24.759
<v Speaker 3>think the single best thing you can do to make

592
00:32:24.799 --> 00:32:29.039
<v Speaker 3>your technology swappable is to invest very heavily in having

593
00:32:29.160 --> 00:32:34.480
<v Speaker 3>a very effective test automation infrastructure. That's the one thing

594
00:32:34.480 --> 00:32:37.279
<v Speaker 3>that's going to give you enough feedback to do this,

595
00:32:37.400 --> 00:32:40.160
<v Speaker 3>because you can't just swap out interfaces if you can't

596
00:32:40.200 --> 00:32:43.720
<v Speaker 3>test your app very fast. Right, that's one thing we

597
00:32:43.799 --> 00:32:47.200
<v Speaker 3>keep touching on modular monolith a little bit. And I

598
00:32:47.240 --> 00:32:50.960
<v Speaker 3>think all this is related. I don't think if you

599
00:32:50.960 --> 00:32:55.000
<v Speaker 3>have a big system, it's impossible. It's effectively impossible to

600
00:32:55.000 --> 00:32:58.759
<v Speaker 3>swap out infrastructure in most project planning. But if you

601
00:32:58.839 --> 00:33:01.200
<v Speaker 3>have a way where you could do it bit by

602
00:33:01.559 --> 00:33:04.640
<v Speaker 3>module by module, maybe you could pull that off. Or

603
00:33:04.640 --> 00:33:10.759
<v Speaker 3>if you keep upgrade from whatever SQL server to sql

604
00:33:10.759 --> 00:33:13.880
<v Speaker 3>server to postgraphs for the cheap or hosting, or move

605
00:33:13.960 --> 00:33:16.400
<v Speaker 3>to a different no SQL database or get off Mango

606
00:33:16.480 --> 00:33:18.680
<v Speaker 3>dB or whatever it is, maybe you can do it

607
00:33:18.720 --> 00:33:23.440
<v Speaker 3>one module at a time. Right, a couple other things,

608
00:33:24.799 --> 00:33:29.200
<v Speaker 3>you know, diving into things like performance and whatnot. These

609
00:33:29.279 --> 00:33:32.680
<v Speaker 3>database engines, they do not work the same way at all.

610
00:33:34.200 --> 00:33:38.359
<v Speaker 3>Ef core might be a perfectly good abstraction over relational databases,

611
00:33:38.400 --> 00:33:41.519
<v Speaker 3>which are much more similar than not. I mean, maybe

612
00:33:41.519 --> 00:33:44.359
<v Speaker 3>you can go from SQL server to postcraph, but going

613
00:33:44.480 --> 00:33:49.559
<v Speaker 3>from a relational database to a no SQL database. That's

614
00:33:49.599 --> 00:33:52.680
<v Speaker 3>a very different ballgame. The same abstractions are not going

615
00:33:52.759 --> 00:33:56.759
<v Speaker 3>to work, even the link the link providers, there are

616
00:33:56.920 --> 00:34:01.279
<v Speaker 3>a lot of extensions. You know, people use these repository

617
00:34:01.279 --> 00:34:05.119
<v Speaker 3>abstractions where they let iqueriable link leak out that that's

618
00:34:05.160 --> 00:34:06.559
<v Speaker 3>probably a terrible idea.

619
00:34:07.000 --> 00:34:10.559
<v Speaker 1>Yeah, they no good, that's a terrible idea. And and

620
00:34:10.639 --> 00:34:11.880
<v Speaker 1>by the way, it doesn't work.

621
00:34:13.039 --> 00:34:13.760
<v Speaker 3>It doesn't work.

622
00:34:14.039 --> 00:34:18.800
<v Speaker 1>Inquible requires code, doesn't it. So it does, but it's

623
00:34:18.840 --> 00:34:19.360
<v Speaker 1>not data.

624
00:34:19.519 --> 00:34:23.320
<v Speaker 3>To make it fast, your equeriable is going to need

625
00:34:23.360 --> 00:34:26.280
<v Speaker 3>a lot of tool specific usage in a lot of cases.

626
00:34:26.639 --> 00:34:30.000
<v Speaker 1>Yeah, you can't just pass that from a to a

627
00:34:30.039 --> 00:34:33.079
<v Speaker 1>client from an API controller. Yeah, so ask me how

628
00:34:33.119 --> 00:34:33.400
<v Speaker 1>I know.

629
00:34:35.400 --> 00:34:39.199
<v Speaker 3>Everybody's done that. One I try to the testability point

630
00:34:39.320 --> 00:34:42.159
<v Speaker 3>you brought up. He's like, of course people get excited

631
00:34:42.199 --> 00:34:45.480
<v Speaker 3>about the in memory provider. It's going to behave very

632
00:34:45.480 --> 00:34:48.440
<v Speaker 3>differently than your real database. It will give you false positive.

633
00:34:50.039 --> 00:34:51.920
<v Speaker 3>So another thing I'm going to say is when you're

634
00:34:51.920 --> 00:34:57.119
<v Speaker 3>picking technologies, you very purposely try to pick technologies that

635
00:34:57.239 --> 00:35:00.880
<v Speaker 3>have a very good testability story, right, that play very

636
00:35:01.000 --> 00:35:05.159
<v Speaker 3>nicely inside of automated testing, which is to put my

637
00:35:05.239 --> 00:35:08.239
<v Speaker 3>money where my mouth is on that one, taking Martin

638
00:35:08.480 --> 00:35:12.199
<v Speaker 3>as either document store or it store. Martin has built

639
00:35:12.199 --> 00:35:15.320
<v Speaker 3>in functionality to set up databases on the fly if

640
00:35:15.360 --> 00:35:17.719
<v Speaker 3>you're in development or testing time, and it has the

641
00:35:17.760 --> 00:35:20.880
<v Speaker 3>ability to wipe your database out in one command line.

642
00:35:22.239 --> 00:35:24.480
<v Speaker 3>The point being here is it's just it's actually much

643
00:35:24.519 --> 00:35:29.360
<v Speaker 3>friendlier inside of an integrated test harness then we would

644
00:35:29.360 --> 00:35:31.159
<v Speaker 3>have been used to twenty years ago, where that was

645
00:35:31.199 --> 00:35:32.159
<v Speaker 3>almost impossible.

646
00:35:32.280 --> 00:35:38.079
<v Speaker 1>Yeah. Hey, getting back to my love for repositories. One

647
00:35:38.119 --> 00:35:39.920
<v Speaker 1>of the things that I do is I have a

648
00:35:41.000 --> 00:35:43.760
<v Speaker 1>an EF repository that's generic, and then I have a

649
00:35:43.800 --> 00:35:48.840
<v Speaker 1>generic Dapper repository. I have a GENERICADO dot net by

650
00:35:48.880 --> 00:35:52.480
<v Speaker 1>itself repository. And that's good because you know, if you

651
00:35:52.559 --> 00:35:56.320
<v Speaker 1>start out with a customer and they like EF and

652
00:35:56.360 --> 00:36:00.559
<v Speaker 1>then there's something, something happens, something whatever, and they're like, no,

653
00:36:00.639 --> 00:36:02.400
<v Speaker 1>we don't like this anymore, we want to move to

654
00:36:02.440 --> 00:36:05.639
<v Speaker 1>ado dot net. Well, then I'll try Dapper. Right. So

655
00:36:05.760 --> 00:36:09.400
<v Speaker 1>I'm not really changing the database per se, I'm changing

656
00:36:09.480 --> 00:36:14.159
<v Speaker 1>the code that accesses the database, and so that's one

657
00:36:14.159 --> 00:36:16.519
<v Speaker 1>of the reasons why. But I want to get your

658
00:36:16.519 --> 00:36:18.920
<v Speaker 1>reaction to this after the break, which we're doing right now.

659
00:36:18.960 --> 00:36:21.599
<v Speaker 1>We'll be right back dot net rocks. Hold on, We'll

660
00:36:21.639 --> 00:36:25.280
<v Speaker 1>be right back. Did you know there's a dot net

661
00:36:25.320 --> 00:36:30.639
<v Speaker 1>on aws community. Follow the social media blogs, YouTube influencers

662
00:36:30.679 --> 00:36:34.440
<v Speaker 1>and open source projects and add your own voice. Get

663
00:36:34.480 --> 00:36:38.280
<v Speaker 1>plugged into the dot net on aws community at aws

664
00:36:38.320 --> 00:36:45.920
<v Speaker 1>dot Amazon dot com, slash dot net. It's dot net rocks.

665
00:36:46.079 --> 00:36:48.599
<v Speaker 1>I'm Carl Franklin. That's my friend Richard Campbell hey, and

666
00:36:48.599 --> 00:36:53.400
<v Speaker 1>our friend Jeremy Miller. And want your reaction to uh

667
00:36:53.639 --> 00:36:56.760
<v Speaker 1>to my love of repositories again and then we'll get

668
00:36:56.760 --> 00:36:58.360
<v Speaker 1>off this. I swear to God.

669
00:37:01.079 --> 00:37:03.679
<v Speaker 3>No to today's point, what if you want to switch

670
00:37:03.760 --> 00:37:08.000
<v Speaker 3>quickly between dapper rideo, dot net or Core, or you

671
00:37:08.039 --> 00:37:10.079
<v Speaker 3>would to go to old school and bring in hibernade

672
00:37:10.119 --> 00:37:11.360
<v Speaker 3>back because that does still work.

673
00:37:11.559 --> 00:37:13.280
<v Speaker 1>I have no idea what you're talking about.

674
00:37:16.400 --> 00:37:19.719
<v Speaker 3>So if you're doing that, I think you're in a

675
00:37:19.800 --> 00:37:24.639
<v Speaker 3>world of I think that might apply well to more

676
00:37:24.719 --> 00:37:28.239
<v Speaker 3>of a creud centric world where I'm editing in order

677
00:37:28.280 --> 00:37:30.800
<v Speaker 3>at a time I'm adding a you know, an invoice

678
00:37:30.800 --> 00:37:35.159
<v Speaker 3>at the time. You know, I hate the phrase pick

679
00:37:35.199 --> 00:37:37.519
<v Speaker 3>the right tool for the job, but pick the right

680
00:37:37.559 --> 00:37:40.039
<v Speaker 3>tool for the job. Most of what I'm talking about

681
00:37:40.119 --> 00:37:43.280
<v Speaker 3>I do deal with larger systems with a lot more workflow,

682
00:37:43.440 --> 00:37:47.719
<v Speaker 3>a lot more complexity than a CREUD system. So what

683
00:37:47.840 --> 00:37:51.199
<v Speaker 3>you're talking about, I think that's fine for something that's

684
00:37:51.199 --> 00:37:54.679
<v Speaker 3>mostly about editing data. But right off the bat, so

685
00:37:55.280 --> 00:37:57.639
<v Speaker 3>you know Richard's an old database guy.

686
00:37:57.960 --> 00:37:58.920
<v Speaker 1>You mean old.

687
00:38:00.679 --> 00:38:00.880
<v Speaker 3>Is not.

688
00:38:04.599 --> 00:38:06.000
<v Speaker 2>So no older than you?

689
00:38:07.119 --> 00:38:09.920
<v Speaker 3>There are these by two weeks you can write really

690
00:38:09.960 --> 00:38:14.400
<v Speaker 3>bad database you know, database sequel queries. My experience can't

691
00:38:14.400 --> 00:38:17.039
<v Speaker 3>speak for everybody else. My experience, by far away, the

692
00:38:17.079 --> 00:38:21.400
<v Speaker 3>worst cause of very poor performance with the database is

693
00:38:21.480 --> 00:38:25.119
<v Speaker 3>being chatty, making way too many calls back and forth

694
00:38:25.239 --> 00:38:28.679
<v Speaker 3>to the database, even to the point where you know,

695
00:38:28.719 --> 00:38:31.800
<v Speaker 3>in these layering things where you might be calling for

696
00:38:31.880 --> 00:38:33.880
<v Speaker 3>the same data over and over and over again and

697
00:38:33.960 --> 00:38:36.199
<v Speaker 3>you don't even know it because you can't see it. So,

698
00:38:36.239 --> 00:38:39.920
<v Speaker 3>taking that as an example, say you have this is

699
00:38:39.920 --> 00:38:42.079
<v Speaker 3>pretty common. You have a web request and then the

700
00:38:42.119 --> 00:38:45.119
<v Speaker 3>course of handling it, you need to look up three

701
00:38:45.239 --> 00:38:49.199
<v Speaker 3>or four different entities at a time. Sure, right, and

702
00:38:49.800 --> 00:38:53.360
<v Speaker 3>if you take some kind of repository abstraction approach, you're

703
00:38:54.280 --> 00:38:56.440
<v Speaker 3>you don't have to do this, but you probably fall

704
00:38:56.559 --> 00:38:59.320
<v Speaker 3>down that path of having a totally separate repository for

705
00:38:59.360 --> 00:39:04.800
<v Speaker 3>each and right common. That's almost forcing you to do

706
00:39:04.920 --> 00:39:08.559
<v Speaker 3>a very naive, least common common denominator approach of I'm

707
00:39:08.559 --> 00:39:10.840
<v Speaker 3>going to go roll a one and load the second

708
00:39:11.000 --> 00:39:13.079
<v Speaker 3>and load the third. You may be doing it in

709
00:39:13.079 --> 00:39:13.519
<v Speaker 3>plus one.

710
00:39:13.559 --> 00:39:16.880
<v Speaker 1>Yeah, absolutely, Yeah, there's there's a lot of there's a

711
00:39:16.880 --> 00:39:21.000
<v Speaker 1>lot of queries that just don't that doesn't fit. Yeah.

712
00:39:21.079 --> 00:39:23.440
<v Speaker 1>I mean that that's why we have STAR procedures, isn't it.

713
00:39:23.719 --> 00:39:26.519
<v Speaker 1>You know, we have a procedure that gets Okay, he's

714
00:39:26.559 --> 00:39:30.039
<v Speaker 1>just wincing. Now, he's wincing. He's he's got his fingers

715
00:39:30.079 --> 00:39:30.840
<v Speaker 1>over his eyes.

716
00:39:30.880 --> 00:39:33.159
<v Speaker 2>It's a polighter way to say that, which is there

717
00:39:33.239 --> 00:39:36.559
<v Speaker 2>is an opportunity for DBAs to provide optimizations to you.

718
00:39:36.719 --> 00:39:39.239
<v Speaker 1>Yes, yes, yes, of course, I mean that this is

719
00:39:39.280 --> 00:39:42.960
<v Speaker 1>one of the reasons why STAR procedures exist, right besides

720
00:39:43.000 --> 00:39:46.920
<v Speaker 1>the exist you know, came into being, shall I say,

721
00:39:47.239 --> 00:39:50.840
<v Speaker 1>because of the abstraction one, but also because we could

722
00:39:50.880 --> 00:39:55.199
<v Speaker 1>do complex queries in return complex result sets.

723
00:39:55.679 --> 00:39:59.960
<v Speaker 3>So technically yes, but to our point about trying to

724
00:40:00.079 --> 00:40:03.679
<v Speaker 3>prefer tools that give you easier and easier time in

725
00:40:03.719 --> 00:40:07.199
<v Speaker 3>integration testing. Sure, if you're depending on stored procedures and

726
00:40:07.360 --> 00:40:10.679
<v Speaker 3>for procedures with logic, you have made your code as

727
00:40:10.719 --> 00:40:12.119
<v Speaker 3>hard to test as I possibly can.

728
00:40:12.320 --> 00:40:15.719
<v Speaker 1>I totally agree, and I have since sworn them off. Jeremy,

729
00:40:17.280 --> 00:40:18.760
<v Speaker 1>I have I swear to God.

730
00:40:19.639 --> 00:40:22.320
<v Speaker 2>Now and start procedure should be the exception, like, we

731
00:40:22.360 --> 00:40:25.480
<v Speaker 2>can't seem to make this go any faster. What do

732
00:40:25.519 --> 00:40:27.800
<v Speaker 2>we got to do? And the DBA can help.

733
00:40:28.960 --> 00:40:31.599
<v Speaker 3>Yes, But the point, the point I was getting at

734
00:40:31.800 --> 00:40:34.840
<v Speaker 3>is but I also say, you're using a no SQL

735
00:40:34.880 --> 00:40:39.119
<v Speaker 3>database yep. Or you know, for me, Mark, most of

736
00:40:39.159 --> 00:40:41.920
<v Speaker 3>my clients are using events store. One where using an

737
00:40:41.920 --> 00:40:45.199
<v Speaker 3>event store tool, so you're dealing with projections and all

738
00:40:45.280 --> 00:40:45.920
<v Speaker 3>kinds of things.

739
00:40:46.280 --> 00:40:46.480
<v Speaker 1>Yeah.

740
00:40:46.519 --> 00:40:51.519
<v Speaker 3>The point is your underlying tool has probably has some

741
00:40:51.599 --> 00:40:55.800
<v Speaker 3>kind of special sauce power to do batch Quarry Martin,

742
00:40:55.840 --> 00:40:57.599
<v Speaker 3>for example, will let you line up I want to

743
00:40:57.639 --> 00:41:00.800
<v Speaker 3>run this link, quarry this link, query, load this entity,

744
00:41:00.880 --> 00:41:04.559
<v Speaker 3>load that entity, or and go do it in one batch.

745
00:41:04.880 --> 00:41:07.760
<v Speaker 3>But I'll also say I want to load this entity,

746
00:41:07.800 --> 00:41:10.400
<v Speaker 3>but I want you to find its related thing here

747
00:41:10.519 --> 00:41:13.159
<v Speaker 3>and it's third related thing and do it in one

748
00:41:13.280 --> 00:41:17.519
<v Speaker 3>network round trip. That is a massive cost savings in

749
00:41:17.599 --> 00:41:23.159
<v Speaker 3>terms of performance. Sure, so being able to go right

750
00:41:23.199 --> 00:41:26.280
<v Speaker 3>to the metal, you're not really going that close but

751
00:41:26.800 --> 00:41:30.679
<v Speaker 3>using all the power that you're underlying infrastructure has and

752
00:41:30.719 --> 00:41:32.760
<v Speaker 3>then putting it in one vertical slice where you can

753
00:41:32.760 --> 00:41:37.280
<v Speaker 3>actually reason about what are the database queries I'm actually

754
00:41:37.360 --> 00:41:40.719
<v Speaker 3>making from this system input to get my data out.

755
00:41:41.199 --> 00:41:43.679
<v Speaker 3>That's going to be the best possible chance of getting

756
00:41:43.719 --> 00:41:46.159
<v Speaker 3>something that's very performant.

757
00:41:47.119 --> 00:41:49.320
<v Speaker 2>Can we talk about the second vertical slice you're going

758
00:41:49.400 --> 00:41:53.199
<v Speaker 2>to take like you talk about the vertical slice approach

759
00:41:53.239 --> 00:41:56.840
<v Speaker 2>to get started. Essentially, let's get something running a particular

760
00:41:56.880 --> 00:42:00.960
<v Speaker 2>feature set and and you know, one time, even an

761
00:42:00.960 --> 00:42:02.679
<v Speaker 2>agile we want to call that a spike, like we're

762
00:42:02.679 --> 00:42:06.719
<v Speaker 2>gonna test this thing. My concern with this approach is

763
00:42:06.760 --> 00:42:10.159
<v Speaker 2>always then more teams start working on their slices and

764
00:42:10.199 --> 00:42:13.559
<v Speaker 2>we're duplicating work, or we're coming with different styles, or

765
00:42:14.159 --> 00:42:16.719
<v Speaker 2>you know, they don't ever play with each other very well.

766
00:42:16.960 --> 00:42:19.360
<v Speaker 3>So a lot that's going to boil down to communication.

767
00:42:21.199 --> 00:42:23.400
<v Speaker 3>But that also gets into a conversation I did want

768
00:42:23.400 --> 00:42:25.480
<v Speaker 3>to I did want to have with you guys. You know,

769
00:42:25.719 --> 00:42:29.960
<v Speaker 3>the folks that really like to have those prescriptive architectures.

770
00:42:31.480 --> 00:42:36.119
<v Speaker 3>Some of it is about standardization and take away. People

771
00:42:36.320 --> 00:42:39.239
<v Speaker 3>need to be creative or think kind of kind of

772
00:42:39.239 --> 00:42:42.239
<v Speaker 3>straight jacket in into doing a one one wayfect.

773
00:42:42.400 --> 00:42:45.199
<v Speaker 2>Right that there is one right way for this app.

774
00:42:45.119 --> 00:42:47.159
<v Speaker 3>Yeah, so I'm gonna give you a sports fan, right,

775
00:42:47.480 --> 00:42:50.239
<v Speaker 3>and if you follow your team long enough, you're gonna

776
00:42:50.239 --> 00:42:52.800
<v Speaker 3>hear the phrase a lot of this player is a

777
00:42:52.920 --> 00:42:57.239
<v Speaker 3>high I four player or this other player could raise

778
00:42:57.280 --> 00:43:01.159
<v Speaker 3>the ceiling of the team. And all is when we

779
00:43:01.320 --> 00:43:04.760
<v Speaker 3>talk about a player's floor ceiling, you kind of say

780
00:43:04.920 --> 00:43:07.639
<v Speaker 3>we expect to be at least this good. That's the floor.

781
00:43:08.039 --> 00:43:10.679
<v Speaker 3>When you say raising the ceiling, we could potentially be

782
00:43:10.760 --> 00:43:15.119
<v Speaker 3>even this much better. Folks that really care about standardization

783
00:43:15.280 --> 00:43:19.159
<v Speaker 3>across teams, they're trying to raise the floor. They're trying

784
00:43:19.159 --> 00:43:22.400
<v Speaker 3>to say I want a minimum quality by saying everybody

785
00:43:22.440 --> 00:43:25.159
<v Speaker 3>just do it the exact same way. Theoretically you can

786
00:43:25.199 --> 00:43:28.519
<v Speaker 3>move around. People don't have to think so much. They

787
00:43:28.519 --> 00:43:32.880
<v Speaker 3>can just go. There's obvious value, there's obvious attraction. The

788
00:43:32.920 --> 00:43:36.519
<v Speaker 3>only problem is that it doesn't work very well. Righthew,

789
00:43:36.960 --> 00:43:41.000
<v Speaker 3>you get these these one size fits all templates, what

790
00:43:41.159 --> 00:43:44.199
<v Speaker 3>happens is you get use cases that are vastly more

791
00:43:44.280 --> 00:43:49.480
<v Speaker 3>complicated than your clean architecture approach. Shows if you make

792
00:43:49.519 --> 00:43:53.280
<v Speaker 3>people stop thinking like I'm straight jacket into this approach,

793
00:43:53.360 --> 00:43:57.519
<v Speaker 3>they stop thinking and they start writing just those massive,

794
00:43:57.599 --> 00:44:02.280
<v Speaker 3>bloated NBC controllers which to mediator pulling it out, and

795
00:44:02.320 --> 00:44:06.440
<v Speaker 3>now you have bloaded mediator handlers. People forget to do

796
00:44:06.559 --> 00:44:09.039
<v Speaker 3>things like I'm just going to extract a helper method

797
00:44:09.039 --> 00:44:14.519
<v Speaker 3>out and compose my method. Or you on the other

798
00:44:14.599 --> 00:44:19.400
<v Speaker 3>side of things, your prescriptive template may be more complicated

799
00:44:19.440 --> 00:44:21.840
<v Speaker 3>than it should be, and you get a lot of

800
00:44:21.880 --> 00:44:25.000
<v Speaker 3>straight pastors. I've seen that as well.

801
00:44:25.519 --> 00:44:27.599
<v Speaker 2>So now this is always a challenge. If it's simple

802
00:44:27.679 --> 00:44:29.480
<v Speaker 2>enough to use, it's not sophisticated enough to do what

803
00:44:29.480 --> 00:44:31.320
<v Speaker 2>you need to do. And if it's sophisticated enough to use,

804
00:44:31.320 --> 00:44:32.719
<v Speaker 2>it's too complicated to understand.

805
00:44:33.280 --> 00:44:35.639
<v Speaker 3>So you know, the duplication, I mean, that's a real problem.

806
00:44:35.760 --> 00:44:39.719
<v Speaker 3>That's absolutely a legitimate, legimate concern. What I would say

807
00:44:39.880 --> 00:44:44.960
<v Speaker 3>is communication between teams. Hopefully your team is still working

808
00:44:44.960 --> 00:44:47.400
<v Speaker 3>in a you know, it's kind of a DIT style

809
00:44:47.480 --> 00:44:52.000
<v Speaker 3>bounded context where they have an isolated PURBUW to some degree,

810
00:44:52.079 --> 00:44:55.880
<v Speaker 3>and then there's not much natural duplication except in infrastructure,

811
00:44:56.480 --> 00:44:58.840
<v Speaker 3>you know, being able to rotate around teams. You know,

812
00:44:58.920 --> 00:45:03.920
<v Speaker 3>this is this is orthogonal to architectural style in places

813
00:45:03.960 --> 00:45:08.719
<v Speaker 3>where you do see duplication in code, you start to

814
00:45:08.760 --> 00:45:12.599
<v Speaker 3>do some refactorings to gather up the duplication, just like

815
00:45:12.639 --> 00:45:13.519
<v Speaker 3>we've always done.

816
00:45:13.719 --> 00:45:15.320
<v Speaker 2>In some ways, I can almost see you describing this

817
00:45:15.400 --> 00:45:17.239
<v Speaker 2>as a good problem. You've gotten to a place where

818
00:45:17.280 --> 00:45:19.719
<v Speaker 2>you've built enough that they can see the duplication, and

819
00:45:19.800 --> 00:45:21.960
<v Speaker 2>now you can put an initiative to try and consolidate

820
00:45:21.960 --> 00:45:25.159
<v Speaker 2>that and make things a bit more Yes, I would

821
00:45:25.159 --> 00:45:27.639
<v Speaker 2>also think the first slice you pick in a green

822
00:45:27.719 --> 00:45:31.800
<v Speaker 2>field app is going to set the tone, so pick carefully.

823
00:45:31.840 --> 00:45:35.960
<v Speaker 3>Maybe maybe yeah, But taking this, you know, down the

824
00:45:36.000 --> 00:45:39.559
<v Speaker 3>people side of things, you know, rather than saying, here's

825
00:45:39.639 --> 00:45:42.280
<v Speaker 3>this very limited straight jacket rule of you know, we

826
00:45:42.400 --> 00:45:47.119
<v Speaker 3>downloaded somebody's GitHub repository that lays out a clean architecture

827
00:45:47.199 --> 00:45:50.639
<v Speaker 3>or something or other. Right, having a constant learning environment

828
00:45:50.719 --> 00:45:54.039
<v Speaker 3>where your people are empowered to learn an experiment a

829
00:45:54.079 --> 00:45:56.039
<v Speaker 3>little bit, as long as you can trust that they'll

830
00:45:56.079 --> 00:45:58.760
<v Speaker 3>communicate with each other, so that that's what I would

831
00:45:58.760 --> 00:46:03.079
<v Speaker 3>describe as raising the ceiling of your your shop. You know,

832
00:46:03.159 --> 00:46:04.920
<v Speaker 3>you have a chance to do things much better.

833
00:46:05.440 --> 00:46:08.000
<v Speaker 2>I mean, I think it's reasonable set minimums, but don't

834
00:46:08.400 --> 00:46:10.719
<v Speaker 2>don't require where people stay at the minimums like I

835
00:46:10.719 --> 00:46:12.760
<v Speaker 2>think I have to enough smart enough to go when

836
00:46:12.920 --> 00:46:15.079
<v Speaker 2>to know when they're going below it, but not be

837
00:46:15.159 --> 00:46:17.320
<v Speaker 2>concerned when they go above it, because that's ultimately a.

838
00:46:17.280 --> 00:46:20.679
<v Speaker 3>Good thing, definitely that. And then all of us learn.

839
00:46:20.840 --> 00:46:23.400
<v Speaker 3>If you're ever a technical lead, so here later you're

840
00:46:23.400 --> 00:46:25.880
<v Speaker 3>going to learn a hard rough lesson that. The more

841
00:46:25.920 --> 00:46:30.000
<v Speaker 3>specific direction you give to somebody working with you, the

842
00:46:30.000 --> 00:46:32.679
<v Speaker 3>worse the results are coming back. Sure, because if you

843
00:46:32.719 --> 00:46:35.559
<v Speaker 3>turn off the brain, you make them just.

844
00:46:35.719 --> 00:46:37.960
<v Speaker 2>You know, I've seen Carl do this with music, where

845
00:46:37.960 --> 00:46:40.159
<v Speaker 2>he pointed the bass player and said, just be awesome.

846
00:46:40.320 --> 00:46:44.400
<v Speaker 1>Just be awesome. That's a true story, the true story.

847
00:46:44.760 --> 00:46:46.360
<v Speaker 1>He says, what do you want me to play here?

848
00:46:46.519 --> 00:46:47.199
<v Speaker 2>He was awesome?

849
00:46:47.320 --> 00:46:49.719
<v Speaker 1>Said I said, just be awesome, and he.

850
00:46:49.920 --> 00:46:51.239
<v Speaker 3>Was, yeah, that's awesome.

851
00:46:51.960 --> 00:46:54.039
<v Speaker 2>But you know, I can think of some devs where

852
00:46:54.079 --> 00:46:56.000
<v Speaker 2>he's that's all you need to tell him is, hey,

853
00:46:56.400 --> 00:46:57.360
<v Speaker 2>just be awesome.

854
00:46:57.239 --> 00:46:59.239
<v Speaker 1>Just be awesome. Don't write bugs.

855
00:46:59.280 --> 00:47:02.719
<v Speaker 3>Well, yeah, and then then let me let me rain

856
00:47:02.840 --> 00:47:05.639
<v Speaker 3>some of that in of you know. Also, folks, don't

857
00:47:05.639 --> 00:47:08.599
<v Speaker 3>don't get too creative, don't get too crazy. No matter

858
00:47:08.639 --> 00:47:12.079
<v Speaker 3>what tool you use, use it in the idiomatic way.

859
00:47:12.280 --> 00:47:14.400
<v Speaker 3>Don't write your own special frameworks, that kind of thing.

860
00:47:14.440 --> 00:47:17.800
<v Speaker 1>I remember the Onion article Apple employee fired for thinking

861
00:47:17.920 --> 00:47:18.559
<v Speaker 1>too different.

862
00:47:20.320 --> 00:47:22.400
<v Speaker 2>The way I always pitched it to my devs was,

863
00:47:22.480 --> 00:47:24.400
<v Speaker 2>I want you to be able to take a vacation,

864
00:47:24.599 --> 00:47:26.920
<v Speaker 2>so somebody else needs to be able to read this code. Yeah,

865
00:47:27.039 --> 00:47:30.280
<v Speaker 2>that's right. Motivation just you know, give yourself, be able

866
00:47:30.320 --> 00:47:31.239
<v Speaker 2>to give yourself a break.

867
00:47:31.599 --> 00:47:35.800
<v Speaker 3>So running right back to our vertical slice architecture idea,

868
00:47:36.320 --> 00:47:39.880
<v Speaker 3>we are trying very hard, you know, and again I'm

869
00:47:39.920 --> 00:47:43.880
<v Speaker 3>so plugging it. The approach we're taking with Wolverine, especially,

870
00:47:44.360 --> 00:47:47.679
<v Speaker 3>shrink your code down, take out so much code ceremony

871
00:47:47.760 --> 00:47:51.519
<v Speaker 3>that you can hopefully very easily reason about your system

872
00:47:51.960 --> 00:47:55.599
<v Speaker 3>follow one place. There's less code period, there's less hoops

873
00:47:55.599 --> 00:47:58.840
<v Speaker 3>to jump through, and even a strange person could come

874
00:47:58.840 --> 00:48:01.960
<v Speaker 3>in as as they are a developer, they can see, yeah, right,

875
00:48:02.199 --> 00:48:03.800
<v Speaker 3>understand how it's working top to bottom.

876
00:48:03.880 --> 00:48:05.960
<v Speaker 2>I get this. Yeah, and so maybe you can actually

877
00:48:06.000 --> 00:48:08.199
<v Speaker 2>take two weeks off and the world doesn't hold still

878
00:48:08.320 --> 00:48:09.320
<v Speaker 2>or burn to the ground.

879
00:48:09.559 --> 00:48:10.719
<v Speaker 3>I'll let you know if I ever do.

880
00:48:14.719 --> 00:48:16.960
<v Speaker 2>I always thought it was a good milestone, right, was like,

881
00:48:17.119 --> 00:48:19.159
<v Speaker 2>are we functioning enough of the team that somebody can

882
00:48:19.199 --> 00:48:21.559
<v Speaker 2>go away for a while, and not that we don't

883
00:48:21.599 --> 00:48:23.079
<v Speaker 2>burn to the ground, or even that we can hold

884
00:48:23.079 --> 00:48:25.679
<v Speaker 2>everything still, but that we still made progress without them. Yeah,

885
00:48:25.760 --> 00:48:28.320
<v Speaker 2>they came back to not an inbox that killed them,

886
00:48:28.320 --> 00:48:30.000
<v Speaker 2>that punished them for taking their time off.

887
00:48:30.199 --> 00:48:33.199
<v Speaker 3>I I think I've told this story before. The first

888
00:48:33.199 --> 00:48:36.719
<v Speaker 3>project where I was a technical lead on a project

889
00:48:36.719 --> 00:48:40.760
<v Speaker 3>that was actually important, all of my managers, two or

890
00:48:40.760 --> 00:48:42.800
<v Speaker 3>three times a day would ask me, well, what are

891
00:48:42.840 --> 00:48:44.400
<v Speaker 3>we going to do if you get hit by a bus?

892
00:48:44.760 --> 00:48:44.960
<v Speaker 2>Right?

893
00:48:45.320 --> 00:48:46.320
<v Speaker 1>That's the very real thing.

894
00:48:46.440 --> 00:48:50.239
<v Speaker 3>And I heard that so often that I started seriously

895
00:48:50.280 --> 00:48:51.679
<v Speaker 3>pondering my own mortality.

896
00:48:51.840 --> 00:48:54.159
<v Speaker 2>Yeah, and it got it. You want to hit the

897
00:48:54.199 --> 00:48:54.960
<v Speaker 2>bus so bad?

898
00:48:56.679 --> 00:49:00.800
<v Speaker 1>Isn't that one of Steve Smith's anti padd or whenever?

899
00:49:01.079 --> 00:49:03.599
<v Speaker 2>The bus being hit by bus is definitely an anti pattern.

900
00:49:03.760 --> 00:49:06.320
<v Speaker 3>No, no, no, but you know the one bus, the

901
00:49:06.320 --> 00:49:07.880
<v Speaker 3>one bus, low bus factor.

902
00:49:08.280 --> 00:49:10.880
<v Speaker 2>Yeah, that's it, Yeah, low bus factor. But that's why

903
00:49:10.880 --> 00:49:13.559
<v Speaker 2>I went with the vacation scenario, because it seems less

904
00:49:13.760 --> 00:49:15.599
<v Speaker 2>you know, mortally threatened.

905
00:49:15.280 --> 00:49:20.400
<v Speaker 1>It's less morbid. It's a very Canadian approach to that metaphor.

906
00:49:20.760 --> 00:49:22.480
<v Speaker 3>I was just gonna say, I'm an American. I don't

907
00:49:22.519 --> 00:49:24.480
<v Speaker 3>know what a two week vacation would be. Yeah, I

908
00:49:24.519 --> 00:49:25.679
<v Speaker 3>mean I've had one once.

909
00:49:25.760 --> 00:49:34.239
<v Speaker 1>Maybe right, better software through politeness, just.

910
00:49:34.159 --> 00:49:37.960
<v Speaker 2>Trying to keep people healthy and happy. You know, the

911
00:49:38.840 --> 00:49:41.199
<v Speaker 2>death We took over a team that had been death

912
00:49:41.239 --> 00:49:44.280
<v Speaker 2>marching for like six months and they and the boss

913
00:49:44.360 --> 00:49:46.199
<v Speaker 2>is like, what do you suggest this is? I'm thinking

914
00:49:46.239 --> 00:49:49.760
<v Speaker 2>a three week I think a three day weekend first, like,

915
00:49:49.960 --> 00:49:53.440
<v Speaker 2>just send everybody home for three days, take a breath,

916
00:49:53.920 --> 00:49:59.960
<v Speaker 2>will We'll reorganize next week. Absolutely, you know, you can't

917
00:50:00.239 --> 00:50:04.719
<v Speaker 2>just keep beating people. We're not making progress anymore and

918
00:50:04.760 --> 00:50:07.639
<v Speaker 2>everyone's miserable. Got to get up and take a walk

919
00:50:07.679 --> 00:50:08.280
<v Speaker 2>once in a while.

920
00:50:08.480 --> 00:50:10.639
<v Speaker 3>I really say, I haven't been on a death march

921
00:50:10.679 --> 00:50:13.960
<v Speaker 3>in a few years, but I certainly did my share

922
00:50:13.960 --> 00:50:15.519
<v Speaker 3>of them back in the Waterfall doos.

923
00:50:16.480 --> 00:50:21.840
<v Speaker 2>Yeah. Well, and it's one of those things where everybody's

924
00:50:21.840 --> 00:50:24.760
<v Speaker 2>built their parts and you've tested in various bits and

925
00:50:24.800 --> 00:50:26.719
<v Speaker 2>now you're trying to really get to a deployment and

926
00:50:26.800 --> 00:50:29.119
<v Speaker 2>does it actually scale away it's supposed to behave and

927
00:50:29.280 --> 00:50:31.559
<v Speaker 2>are the people happy with it? And then it's patch

928
00:50:31.639 --> 00:50:34.360
<v Speaker 2>patge patch, like what are we missing trying to get

929
00:50:34.360 --> 00:50:36.719
<v Speaker 2>to that magic V one that somebody promised on an

930
00:50:36.760 --> 00:50:38.239
<v Speaker 2>arbitrary date. They didn't understand.

931
00:50:38.480 --> 00:50:41.559
<v Speaker 3>Yeah, yeah, or the day as a tech lead, the

932
00:50:41.760 --> 00:50:45.559
<v Speaker 3>tester asked me, what about the reports from the requirements?

933
00:50:45.599 --> 00:50:48.800
<v Speaker 3>And I don't know what you're talking about. And there

934
00:50:48.880 --> 00:50:51.480
<v Speaker 3>was a second requirements document I had never been shown

935
00:50:51.599 --> 00:50:54.239
<v Speaker 3>until then. Yeah, and we were already in the official

936
00:50:54.360 --> 00:50:55.119
<v Speaker 3>testing phase.

937
00:50:56.239 --> 00:50:59.199
<v Speaker 2>Yeah, surprise. Yeah, I should have known about this a

938
00:50:59.280 --> 00:50:59.639
<v Speaker 2>year ago.

939
00:51:00.159 --> 00:51:01.280
<v Speaker 3>Waterfall for the win.

940
00:51:04.039 --> 00:51:13.880
<v Speaker 1>Abbreviated WTF waterfall? What's in your inbox? Jeremy, what are

941
00:51:13.880 --> 00:51:14.719
<v Speaker 1>you going to do next?

942
00:51:15.480 --> 00:51:19.400
<v Speaker 3>So probably won't show up in a conference until till

943
00:51:19.480 --> 00:51:22.079
<v Speaker 3>later next year. I did so many late last year

944
00:51:22.079 --> 00:51:25.760
<v Speaker 3>that I'm didn't get get submissions off. But the big

945
00:51:25.800 --> 00:51:28.239
<v Speaker 3>thing I'm working on right now in my company, jazzper

946
00:51:28.239 --> 00:51:32.239
<v Speaker 3>Effects Software, working on a tool called critter Watch that

947
00:51:32.400 --> 00:51:40.000
<v Speaker 3>is a commercial management console monitoring tools specifically for the

948
00:51:40.119 --> 00:51:43.320
<v Speaker 3>entire Critter stack, So everything you would need to not

949
00:51:43.519 --> 00:51:45.840
<v Speaker 3>just watch what's going on your system, but also be

950
00:51:45.840 --> 00:51:48.360
<v Speaker 3>able to help heal the system, deal with did letter

951
00:51:48.440 --> 00:51:54.199
<v Speaker 3>Q messages. Eventsourcing creates all kinds of extra stuff, problems

952
00:51:54.239 --> 00:51:59.679
<v Speaker 3>of being able to kick off projection, rebuilds, rewind subscriptions,

953
00:52:00.280 --> 00:52:05.199
<v Speaker 3>turn things on, change how change what servers things are

954
00:52:05.280 --> 00:52:09.360
<v Speaker 3>running on? Maybe to deal with privacy concerns, be able

955
00:52:09.360 --> 00:52:14.159
<v Speaker 3>to retroactively say we're going to do something called crypto shredding.

956
00:52:14.440 --> 00:52:16.239
<v Speaker 3>We're just going to throw away the key so we

957
00:52:16.280 --> 00:52:19.480
<v Speaker 3>can't read this client data anyway. You know, all kinds

958
00:52:19.480 --> 00:52:22.000
<v Speaker 3>of good stuff like that. So trying to make the

959
00:52:22.079 --> 00:52:25.920
<v Speaker 3>jump from you know, we're a services company around open

960
00:52:25.920 --> 00:52:27.800
<v Speaker 3>source tooling right now, but we want to make the

961
00:52:27.920 --> 00:52:31.559
<v Speaker 3>jump to also having that paid commercial add on that.

962
00:52:31.840 --> 00:52:34.280
<v Speaker 1>That's very cool, cool. Well, hope you come back and

963
00:52:34.320 --> 00:52:37.320
<v Speaker 1>talk to us when that's in play, you know, or

964
00:52:37.360 --> 00:52:39.480
<v Speaker 1>if you have any other things that are new, just

965
00:52:39.599 --> 00:52:42.119
<v Speaker 1>feel free to reach out and come back on the show.

966
00:52:42.320 --> 00:52:43.880
<v Speaker 3>All right, we'll certainly do that, guys.

967
00:52:43.880 --> 00:52:44.800
<v Speaker 1>It's always a pleasure.

968
00:52:44.880 --> 00:52:45.880
<v Speaker 3>Thanks thanks for having me.

969
00:52:46.199 --> 00:52:48.679
<v Speaker 1>That's been a pleasure for us too, And we'll talk

970
00:52:48.719 --> 00:53:12.679
<v Speaker 1>to you next time on dot net rocks. Dot net

971
00:53:12.800 --> 00:53:15.719
<v Speaker 1>Rocks is brought to you by Franklin's Net and produced

972
00:53:15.719 --> 00:53:19.559
<v Speaker 1>by Pop Studios, a full service audio, video and post

973
00:53:19.559 --> 00:53:23.719
<v Speaker 1>production facility located physically in New London, Connecticut, and of

974
00:53:23.760 --> 00:53:28.679
<v Speaker 1>course in the cloud online at pwop dot com. Visit

975
00:53:28.719 --> 00:53:30.840
<v Speaker 1>our website at d O T N E t R

976
00:53:30.920 --> 00:53:34.840
<v Speaker 1>O c K S dot com for RSS feeds, downloads,

977
00:53:35.000 --> 00:53:38.679
<v Speaker 1>mobile apps, comments, and access to the full archives going

978
00:53:38.719 --> 00:53:42.119
<v Speaker 1>back to show number one, recorded in September two thousand

979
00:53:42.119 --> 00:53:44.760
<v Speaker 1>and two. And make sure you check out our sponsors.

980
00:53:44.920 --> 00:53:47.920
<v Speaker 1>They keep us in business. Now go write some code.

981
00:53:48.280 --> 00:53:49.079
<v Speaker 1>See you next time.

982
00:53:49.960 --> 00:53:51.800
<v Speaker 3>You got javans

983
00:53:53.880 --> 00:54:01.039
<v Speaker 2>And no
