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.040 --> 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.479
<v Speaker 1>dot com. Hey guess what, it's dot need rocks. I'm

8
00:00:37.600 --> 00:00:38.880
<v Speaker 1>Carl Franklin.

9
00:00:38.479 --> 00:00:39.399
<v Speaker 2>And I'm Richard Gamble.

10
00:00:39.560 --> 00:00:42.159
<v Speaker 1>Steve Smith is with us. We'll be joining him in

11
00:00:42.200 --> 00:00:46.000
<v Speaker 1>a minute, but first, you got doggy duty today, Richard.

12
00:00:46.000 --> 00:00:49.759
<v Speaker 2>Eh, yeah, yeah, you know, just timing. I'm about to

13
00:00:49.759 --> 00:00:55.280
<v Speaker 2>go away for several weeks to Australia and we and she,

14
00:00:55.359 --> 00:00:57.880
<v Speaker 2>who must be obeyed, wants to see the granddaughter, so

15
00:00:58.079 --> 00:01:00.640
<v Speaker 2>she's off for the day, which means I'm taking care

16
00:01:00.679 --> 00:01:03.759
<v Speaker 2>of the puppy, although I have run the puppy out

17
00:01:03.799 --> 00:01:05.959
<v Speaker 2>and she is crashed out in the in the kennel

18
00:01:05.959 --> 00:01:08.560
<v Speaker 2>at the moment. So hopefully no interruptions during recording. Well,

19
00:01:08.760 --> 00:01:11.280
<v Speaker 2>not that anybody will hear them, because editing.

20
00:01:11.239 --> 00:01:14.239
<v Speaker 1>He well, or if it's cute, we leave it in.

21
00:01:16.519 --> 00:01:18.560
<v Speaker 2>There's nothing cute about p on the floor.

22
00:01:18.799 --> 00:01:22.519
<v Speaker 1>No, okay, all right, well let's get started with better

23
00:01:22.519 --> 00:01:23.120
<v Speaker 1>no framework.

24
00:01:23.159 --> 00:01:32.159
<v Speaker 2>Awesome, man, what do you got?

25
00:01:32.280 --> 00:01:36.159
<v Speaker 1>This came from Simon Cropp, our good friend, in the

26
00:01:36.439 --> 00:01:37.640
<v Speaker 1>app Phoenix Slack channel.

27
00:01:37.680 --> 00:01:38.480
<v Speaker 2>What are the appears?

28
00:01:38.560 --> 00:01:43.200
<v Speaker 1>Yeah, and this is a learn article at Microsoft. Wow,

29
00:01:43.480 --> 00:01:45.719
<v Speaker 1>Jason serializer options.

30
00:01:45.879 --> 00:01:49.159
<v Speaker 2>Wait wait wait wait wait are you talking about framework stuff? Yes,

31
00:01:49.599 --> 00:01:54.959
<v Speaker 2>on a better no framework. Absolutely, I am shocked. It's

32
00:01:55.000 --> 00:01:56.719
<v Speaker 2>been a while. Huh, it's been a while.

33
00:01:58.000 --> 00:02:03.799
<v Speaker 1>So this is Jason's serializers dot respect nullible annotations.

34
00:02:04.040 --> 00:02:04.640
<v Speaker 2>Oh my god.

35
00:02:04.920 --> 00:02:08.280
<v Speaker 1>So use that in your serializer settings. Turn it, set

36
00:02:08.280 --> 00:02:09.840
<v Speaker 1>it to true, and it helps find bugs when the

37
00:02:09.879 --> 00:02:14.599
<v Speaker 1>nullibility annotations in dot net serialization contracts don't match what's

38
00:02:14.680 --> 00:02:17.800
<v Speaker 1>on the wire, as in, we will get a failure

39
00:02:18.319 --> 00:02:22.719
<v Speaker 1>during serialization and de serialization instead of a null refight

40
00:02:22.840 --> 00:02:26.280
<v Speaker 1>after serialization or de serialization.

41
00:02:25.759 --> 00:02:28.360
<v Speaker 2>Which is better in every way, right, so much better.

42
00:02:28.479 --> 00:02:31.960
<v Speaker 2>Oh my goodness, that's just the longest name ever. Except

43
00:02:32.000 --> 00:02:35.639
<v Speaker 2>that is exactly what you want, thank goodness for till

44
00:02:35.719 --> 00:02:36.919
<v Speaker 2>it says.

45
00:02:36.599 --> 00:02:41.240
<v Speaker 1>Yeah, And it doesn't look like it's true by default,

46
00:02:41.319 --> 00:02:44.319
<v Speaker 1>but it says in the doc it is recommended that

47
00:02:44.439 --> 00:02:48.560
<v Speaker 1>new applications always set this property to true, right, but

48
00:02:48.680 --> 00:02:52.039
<v Speaker 1>it's not true by default in combination with a closely

49
00:02:52.120 --> 00:02:55.360
<v Speaker 1>related respect required constructor parameters property.

50
00:02:55.439 --> 00:02:55.680
<v Speaker 3>Nice.

51
00:02:55.800 --> 00:02:58.560
<v Speaker 2>Look, it's a new option explicit in twenty twenty five.

52
00:02:58.719 --> 00:03:00.439
<v Speaker 2>What's that about.

53
00:03:02.759 --> 00:03:04.719
<v Speaker 1>Respect, my authority.

54
00:03:04.840 --> 00:03:11.280
<v Speaker 2>Respect my nobilitybility. No, that totally makes sense. I want

55
00:03:11.280 --> 00:03:13.159
<v Speaker 2>this on all the time. You said I have to

56
00:03:13.199 --> 00:03:13.680
<v Speaker 2>remember it.

57
00:03:14.120 --> 00:03:16.479
<v Speaker 1>I am sad that I have to remember it too, but.

58
00:03:16.479 --> 00:03:19.080
<v Speaker 2>Have also you know what, They're also got an app

59
00:03:19.120 --> 00:03:21.639
<v Speaker 2>or two out there that jump through great hoops to

60
00:03:21.719 --> 00:03:25.560
<v Speaker 2>deal with nulls when I didn't have this capability and

61
00:03:25.960 --> 00:03:26.879
<v Speaker 2>now I don't want to fix them.

62
00:03:27.000 --> 00:03:29.560
<v Speaker 1>Yeah, it's a noble world. We're just living in it.

63
00:03:30.000 --> 00:03:35.159
<v Speaker 1>We're just trying to ever. Oh man, that's great. So

64
00:03:35.199 --> 00:03:36.280
<v Speaker 1>who's talking to us today?

65
00:03:36.360 --> 00:03:39.520
<v Speaker 2>Richard Campbell grab to comment off of a show nineteen

66
00:03:39.639 --> 00:03:41.560
<v Speaker 2>thirty nine, which we did back in February with our

67
00:03:41.560 --> 00:03:43.719
<v Speaker 2>friend Jerry M. Miller talking a bit about vertical slice

68
00:03:43.759 --> 00:03:47.039
<v Speaker 2>architecture No and hanging with Steve Smith means we're probably

69
00:03:47.039 --> 00:03:48.599
<v Speaker 2>going to go down the architecture pop. There's a bunch

70
00:03:48.599 --> 00:03:50.319
<v Speaker 2>of good comments on that show, by the way, a

71
00:03:50.360 --> 00:03:52.439
<v Speaker 2>lot of them talking about the bus factor, as in

72
00:03:52.479 --> 00:03:54.159
<v Speaker 2>what happens when your developer gets hit by a bus.

73
00:03:54.199 --> 00:03:56.159
<v Speaker 2>But I'm not going to go there, right, I'm going

74
00:03:56.240 --> 00:04:00.400
<v Speaker 2>to talk about the comment from an NDDCC, but let's

75
00:04:00.400 --> 00:04:04.319
<v Speaker 2>just call him ND Regarding Richard's concern about code duplication

76
00:04:04.360 --> 00:04:07.759
<v Speaker 2>in the vertical slice, Yeah, in my opinion, preemptively preventing

77
00:04:07.800 --> 00:04:12.759
<v Speaker 2>cod duplication is prevented premature optimization. I thought about this

78
00:04:12.800 --> 00:04:16.199
<v Speaker 2>one for a while, and I'm like, you know, okay, yeah, fine,

79
00:04:17.120 --> 00:04:20.079
<v Speaker 2>And as the saying goes, with all premature optimization, it

80
00:04:20.160 --> 00:04:20.959
<v Speaker 2>is the root of all.

81
00:04:20.839 --> 00:04:22.360
<v Speaker 1>Evil if you don't need it.

82
00:04:22.240 --> 00:04:24.959
<v Speaker 2>And then goes on to say, also with vertical slice

83
00:04:24.959 --> 00:04:27.759
<v Speaker 2>and functional style, who knew that transaction script was gaining

84
00:04:27.759 --> 00:04:31.720
<v Speaker 2>popularity over the main model? Like what goes around comes

85
00:04:31.759 --> 00:04:34.680
<v Speaker 2>around in d right, like just writing the procedures for

86
00:04:34.759 --> 00:04:37.639
<v Speaker 2>the things we need also hip, But I think part

87
00:04:37.680 --> 00:04:40.160
<v Speaker 2>of that is because our tooling's gotten so better to refractor.

88
00:04:40.199 --> 00:04:42.160
<v Speaker 2>Like even the code duplication part, I'm willing to give

89
00:04:42.199 --> 00:04:45.600
<v Speaker 2>on because it's just not that hard to day to recognize, Hey,

90
00:04:45.600 --> 00:04:47.639
<v Speaker 2>this is duplicated code in a few spots, and maybe

91
00:04:47.680 --> 00:04:50.439
<v Speaker 2>I do need to optimize it now. But he finishes

92
00:04:50.519 --> 00:04:53.040
<v Speaker 2>up by saying, simplicity over chasing dependencies and trying to

93
00:04:53.040 --> 00:04:55.959
<v Speaker 2>cramb it, all of it, all of it in your head. Legit.

94
00:04:56.279 --> 00:04:59.120
<v Speaker 2>Keep it as simple as you need to, but change

95
00:04:59.120 --> 00:05:00.879
<v Speaker 2>it when you have to. Boy, that seems like a

96
00:05:00.920 --> 00:05:03.040
<v Speaker 2>setup for a show. I think it's I think I

97
00:05:03.079 --> 00:05:06.240
<v Speaker 2>can Steve see Steve's wheels durning right now.

98
00:05:06.480 --> 00:05:07.680
<v Speaker 1>I thought I smelled smoke.

99
00:05:08.000 --> 00:05:10.519
<v Speaker 2>There you go, so Indy, thank you so much for

100
00:05:10.560 --> 00:05:12.160
<v Speaker 2>your commented. A copy of music Go Buy is on

101
00:05:12.199 --> 00:05:13.439
<v Speaker 2>its way to you. And if you'd like a copy

102
00:05:13.439 --> 00:05:15.199
<v Speaker 2>of music code I read a comment on the website

103
00:05:15.240 --> 00:05:17.079
<v Speaker 2>at dot NetRocks dot com or on the facebooks. We

104
00:05:17.079 --> 00:05:19.160
<v Speaker 2>publish every show there, and if you comment there and

105
00:05:19.160 --> 00:05:20.439
<v Speaker 2>e reading the show, we'll send you a copy of

106
00:05:20.480 --> 00:05:21.040
<v Speaker 2>music Go Buy.

107
00:05:21.160 --> 00:05:23.000
<v Speaker 1>And you can get music to code by any time

108
00:05:23.040 --> 00:05:25.439
<v Speaker 1>you want by going to music too code buy dot net.

109
00:05:25.600 --> 00:05:31.879
<v Speaker 1>That's a URL trick, so don't put an hdtps on it.

110
00:05:33.879 --> 00:05:34.839
<v Speaker 2>Nineteen forty nine.

111
00:05:34.959 --> 00:05:36.560
<v Speaker 1>Nineteen forty nine, let's talk about it.

112
00:05:36.600 --> 00:05:36.680
<v Speaker 3>So.

113
00:05:36.800 --> 00:05:40.480
<v Speaker 1>Major events included the establishment of the People's Republic of China.

114
00:05:40.680 --> 00:05:43.439
<v Speaker 2>Yeah, at the end of the Cino War, Yeah.

115
00:05:43.800 --> 00:05:46.680
<v Speaker 1>Signing of the North Atlantic Treaty in NATO, and the

116
00:05:46.879 --> 00:05:50.519
<v Speaker 1>Soviet Union's first atomic bomb tests, all contributing to the

117
00:05:50.680 --> 00:05:52.120
<v Speaker 1>escalation of the Cold War.

118
00:05:52.399 --> 00:05:52.600
<v Speaker 3>Ah.

119
00:05:52.720 --> 00:05:58.720
<v Speaker 2>Yes, Klaus Fuchs leaking, you know, part of the Manhattan Project.

120
00:05:58.959 --> 00:06:02.360
<v Speaker 2>You know, was a phenomenal physicist, did all these great things.

121
00:06:02.399 --> 00:06:04.959
<v Speaker 2>Only remember for one thing, leaking the information on the

122
00:06:04.959 --> 00:06:08.160
<v Speaker 2>plutonium bomb to the Soviet Yeah.

123
00:06:08.240 --> 00:06:14.560
<v Speaker 1>Well, anyway, the Berlin Airlift concluded. The first televised presidential

124
00:06:14.600 --> 00:06:19.199
<v Speaker 1>inauguration took place here in the US. We experienced a

125
00:06:19.319 --> 00:06:23.839
<v Speaker 1>recession in nineteen forty nine, with the unemployment rate reaching

126
00:06:23.839 --> 00:06:28.720
<v Speaker 1>a peak of seven point nine percent. Also, nineteen eighty four,

127
00:06:29.199 --> 00:06:33.879
<v Speaker 1>Georgia Orwell's dystopian novel was published. And anything you want

128
00:06:33.879 --> 00:06:34.480
<v Speaker 1>to add to that.

129
00:06:35.040 --> 00:06:39.759
<v Speaker 2>Richard IBM ships their first punch card computer. Wow, the

130
00:06:39.800 --> 00:06:44.079
<v Speaker 2>IBMCPC so along with punch card controllers and all this

131
00:06:44.160 --> 00:06:46.439
<v Speaker 2>other good stuff. It was a big machine. It's called

132
00:06:46.439 --> 00:06:50.560
<v Speaker 2>the IBM, Well called the CBC, but it was actually

133
00:06:50.639 --> 00:06:51.319
<v Speaker 2>the sixth.

134
00:06:51.800 --> 00:06:55.600
<v Speaker 1>Or I love talking to boomers about programming with punch cards.

135
00:06:56.040 --> 00:06:57.480
<v Speaker 1>We had to use punch kin.

136
00:06:57.560 --> 00:07:03.360
<v Speaker 2>You had a stack like this, yep, and Heaven help

137
00:07:03.399 --> 00:07:06.279
<v Speaker 2>you if you drop it. Yeah, you sort all those

138
00:07:06.319 --> 00:07:09.240
<v Speaker 2>cards out again, like, oh, you had a bug, you know,

139
00:07:09.399 --> 00:07:11.920
<v Speaker 2>but it was you know, we also talked about the

140
00:07:11.920 --> 00:07:14.000
<v Speaker 2>Manchester Baby, and of course of mind sition mark one

141
00:07:14.040 --> 00:07:19.040
<v Speaker 2>comes out around there, which was the stored programming model

142
00:07:19.120 --> 00:07:21.279
<v Speaker 2>as opposed to the punch card program model, where literally

143
00:07:21.439 --> 00:07:24.199
<v Speaker 2>just reading the code and executing it, you know, essentially

144
00:07:24.199 --> 00:07:26.560
<v Speaker 2>the storage is in the card. So these were the

145
00:07:26.600 --> 00:07:29.480
<v Speaker 2>competing some of the competing designs before we get to

146
00:07:29.519 --> 00:07:32.519
<v Speaker 2>a place where we actually have dense storage, because we

147
00:07:32.560 --> 00:07:34.920
<v Speaker 2>still don't, every bit of memory is super important.

148
00:07:35.000 --> 00:07:37.480
<v Speaker 1>I have never seen punch cards, but I would hope

149
00:07:37.519 --> 00:07:40.079
<v Speaker 1>that they were numbered sequentially.

150
00:07:40.480 --> 00:07:42.439
<v Speaker 2>They are, but you have to number them. And they

151
00:07:42.439 --> 00:07:45.040
<v Speaker 2>also say do not fold, spindle or mutilate, right.

152
00:07:45.120 --> 00:07:48.759
<v Speaker 1>I remember that. I actually do remember taking tests in

153
00:07:49.360 --> 00:07:52.600
<v Speaker 1>grammar school that were not so much punch cards, but

154
00:07:52.839 --> 00:07:55.560
<v Speaker 1>they were you know, filling the ovals, right, and that

155
00:07:55.680 --> 00:07:58.279
<v Speaker 1>was definitely do not fold, spindle or mutilate.

156
00:07:58.000 --> 00:08:01.000
<v Speaker 2>You know, fold spindle or mutilate. One more science piece.

157
00:08:01.040 --> 00:08:04.120
<v Speaker 2>Will of Libby publishes his paper in forty nine on

158
00:08:04.360 --> 00:08:08.600
<v Speaker 2>radio carbon dating WOW, which is the method of measuring

159
00:08:09.240 --> 00:08:12.639
<v Speaker 2>the age of typically biological things that have carbon fourteen.

160
00:08:12.720 --> 00:08:16.839
<v Speaker 2>While while a plant is living, it actually maintains a

161
00:08:16.839 --> 00:08:18.639
<v Speaker 2>certain level of carbon fourteen, and at the moment that

162
00:08:18.680 --> 00:08:20.759
<v Speaker 2>plant dies because it gets eaten or anything like that,

163
00:08:20.759 --> 00:08:23.279
<v Speaker 2>that carbon and fourteen starts to decay away.

164
00:08:23.040 --> 00:08:23.959
<v Speaker 1>At a constant rate.

165
00:08:24.040 --> 00:08:26.759
<v Speaker 2>And you can measure the ratio of twelve to fourteen

166
00:08:27.360 --> 00:08:31.600
<v Speaker 2>to praiirly accurately estimated an age up to about fifty

167
00:08:31.600 --> 00:08:32.080
<v Speaker 2>thousand year.

168
00:08:32.120 --> 00:08:32.799
<v Speaker 1>Yeah, very good.

169
00:08:32.919 --> 00:08:34.799
<v Speaker 2>He won the Nobel Prize in nineteen sixty four.

170
00:08:34.840 --> 00:08:36.879
<v Speaker 1>It's very cool. Yeah, all right, Well with that, let's

171
00:08:36.879 --> 00:08:39.639
<v Speaker 1>bring Steve on again for the how many time.

172
00:08:39.600 --> 00:08:41.879
<v Speaker 2>I got to count because it's a lot.

173
00:08:42.159 --> 00:08:44.600
<v Speaker 3>It's close to twenty. I think it's like nineteen or something.

174
00:08:44.600 --> 00:08:45.759
<v Speaker 2>I think you think you're up there?

175
00:08:45.840 --> 00:08:51.080
<v Speaker 1>Yeah, wow, I got them all here, one, two, three, seventy.

176
00:08:51.919 --> 00:08:54.120
<v Speaker 2>Yeah, if you include the panels, it's I think this

177
00:08:54.200 --> 00:08:54.960
<v Speaker 2>is number nineteen.

178
00:08:55.279 --> 00:08:56.240
<v Speaker 1>Yeah, she's a.

179
00:08:56.240 --> 00:08:59.120
<v Speaker 2>Though, going back to two thousand and seven, so you know,

180
00:09:00.080 --> 00:09:00.879
<v Speaker 2>twenty years worth.

181
00:09:00.919 --> 00:09:05.159
<v Speaker 1>Wow. Well, let me read his bio here. Our Dallas

182
00:09:05.360 --> 00:09:09.679
<v Speaker 1>is his handle Everywhere is an entrepreneur and software developer

183
00:09:09.679 --> 00:09:13.320
<v Speaker 1>with a passion for building quality software as effectively as possible.

184
00:09:13.879 --> 00:09:17.519
<v Speaker 1>He's published several courses on plural site in dome Train

185
00:09:18.240 --> 00:09:22.840
<v Speaker 1>covering DDD solid design patterns and software architecture. He's a

186
00:09:22.879 --> 00:09:28.639
<v Speaker 1>microsoftsp Net MVP and insider, frequent speaker developer conferences, an author,

187
00:09:28.720 --> 00:09:33.200
<v Speaker 1>and a trainer. Steve works with companies through his company,

188
00:09:33.279 --> 00:09:35.919
<v Speaker 1>Nimble Pros, and they help teams who want to avoid

189
00:09:35.960 --> 00:09:39.960
<v Speaker 1>the trap of technical debt to deliver better software faster.

190
00:09:40.919 --> 00:09:43.559
<v Speaker 1>Our Dallas and his team have been described by clients

191
00:09:43.600 --> 00:09:48.159
<v Speaker 1>as a force multiplier amplifying the value of existing development teams.

192
00:09:48.679 --> 00:09:52.720
<v Speaker 1>His client list includes Microsoft Quick and Loans, WWF and

193
00:09:52.840 --> 00:09:57.279
<v Speaker 1>many other satisfied customers. Now is that the World Wildlife

194
00:09:57.279 --> 00:10:01.879
<v Speaker 1>Fund or the wrestling It's the WWF. Okay, the World

195
00:10:01.919 --> 00:10:02.679
<v Speaker 1>Wildlife Fund.

196
00:10:02.840 --> 00:10:04.879
<v Speaker 2>I think Worldwidelife Fund won that one, and now the

197
00:10:04.919 --> 00:10:07.159
<v Speaker 2>wrestling guys are wwe Yeah.

198
00:10:07.240 --> 00:10:15.159
<v Speaker 3>The Windows Workflow Framework also lost that. Our foundation sorry worklow.

199
00:10:14.879 --> 00:10:17.480
<v Speaker 2>Foundation workflow floudation. Yeah, you don't want to you don't

200
00:10:17.480 --> 00:10:19.200
<v Speaker 2>want to dip into that fight. You're not even close.

201
00:10:21.039 --> 00:10:22.559
<v Speaker 1>So what's up? What have you been doing?

202
00:10:23.200 --> 00:10:27.039
<v Speaker 3>Just still working on helping clients write better code. A

203
00:10:27.039 --> 00:10:29.879
<v Speaker 3>lot of a lot of architecture stuff these days. Working

204
00:10:29.919 --> 00:10:32.279
<v Speaker 3>with clients have legacy code they're trying to bring forward

205
00:10:32.360 --> 00:10:36.679
<v Speaker 3>from legacy MVC, some even web forms, but seeing less

206
00:10:36.720 --> 00:10:39.080
<v Speaker 3>of that these days most folks are either in the

207
00:10:39.080 --> 00:10:40.759
<v Speaker 3>cloud or still trying to get to the cloud and

208
00:10:40.840 --> 00:10:44.159
<v Speaker 3>using that effectively. And that's a lot of who our

209
00:10:44.200 --> 00:10:46.679
<v Speaker 3>clients are and who we're helping. Starting to see some

210
00:10:46.720 --> 00:10:50.519
<v Speaker 3>more greenfield application requests too, and that that's been fun,

211
00:10:50.600 --> 00:10:53.879
<v Speaker 3>so you know, it's keeping us busy.

212
00:10:54.919 --> 00:10:58.519
<v Speaker 2>Do you buy my conversation with ND on that comment,

213
00:10:58.559 --> 00:11:01.559
<v Speaker 2>basically saying, hey, no, I totally get it that you

214
00:11:01.559 --> 00:11:04.159
<v Speaker 2>can swing back towards that sort of transactional mindset to

215
00:11:04.200 --> 00:11:06.679
<v Speaker 2>build pieces of an app, don't you don't you know,

216
00:11:07.519 --> 00:11:11.200
<v Speaker 2>definitely can overplan a domain model here, like getting tow

217
00:11:11.240 --> 00:11:13.759
<v Speaker 2>functionals useful. At some point you're going to end up

218
00:11:13.759 --> 00:11:16.159
<v Speaker 2>with a bunch of code you may want to consolidate

219
00:11:16.200 --> 00:11:17.200
<v Speaker 2>into a domain model.

220
00:11:17.360 --> 00:11:20.440
<v Speaker 3>I think the key point there that I would drill

221
00:11:20.480 --> 00:11:24.200
<v Speaker 3>into isn't so much domain model versus transactional script as

222
00:11:24.679 --> 00:11:28.639
<v Speaker 3>don't repeat yourself or duplication is fine, because I think

223
00:11:28.679 --> 00:11:32.200
<v Speaker 3>that's that's a balance, right, And most developers have heard

224
00:11:32.639 --> 00:11:35.559
<v Speaker 3>don't repeat yourself or once and only once you know

225
00:11:35.559 --> 00:11:39.759
<v Speaker 3>the dry principle, and they don't necessarily also realize that

226
00:11:39.879 --> 00:11:44.840
<v Speaker 3>every time you eliminate duplication, you introduce coupling, sure, and

227
00:11:44.919 --> 00:11:48.039
<v Speaker 3>so you should be careful of that. I was reminded

228
00:11:48.080 --> 00:11:51.120
<v Speaker 3>of a book that I contributed to along with the

229
00:11:51.159 --> 00:11:53.360
<v Speaker 3>whole bunch of other authors called ninety seven Things Every

230
00:11:53.360 --> 00:11:56.360
<v Speaker 3>Programmer Should Know from I don't know, ten years ago.

231
00:11:57.159 --> 00:11:58.440
<v Speaker 2>I love that it's ninety seven.

232
00:11:58.799 --> 00:12:01.240
<v Speaker 3>Yeah, there were a few of that series of ninety

233
00:12:01.240 --> 00:12:03.399
<v Speaker 3>seven things books, right, But Kevilyn Henny put this one

234
00:12:03.399 --> 00:12:07.759
<v Speaker 3>together and I contributed one thing, which was don't repeat yourself.

235
00:12:08.480 --> 00:12:11.240
<v Speaker 3>And in the same book, Udi de Haan whom you

236
00:12:11.240 --> 00:12:15.919
<v Speaker 3>guys know, also submitted one called Beware the Share and

237
00:12:16.240 --> 00:12:18.919
<v Speaker 3>had a little, you know, cautionary tale about what happens

238
00:12:18.960 --> 00:12:24.159
<v Speaker 3>if you just eliminate duplication wholeheartedly and without understanding the context, right,

239
00:12:24.200 --> 00:12:25.960
<v Speaker 3>and some of the problems you get there. So like

240
00:12:26.240 --> 00:12:29.320
<v Speaker 3>in the same book there there's both both sides of

241
00:12:29.360 --> 00:12:32.320
<v Speaker 3>the argument of why should you or shouldn't you repeat

242
00:12:32.320 --> 00:12:32.720
<v Speaker 3>your code?

243
00:12:32.799 --> 00:12:32.960
<v Speaker 2>Right?

244
00:12:33.039 --> 00:12:35.919
<v Speaker 1>Yeah, you know, And I always if I was going

245
00:12:35.960 --> 00:12:37.559
<v Speaker 1>to put one thing in that book, I would say,

246
00:12:37.919 --> 00:12:43.519
<v Speaker 1>consider having the lowest ccf ever that you can possibly have,

247
00:12:43.559 --> 00:12:47.120
<v Speaker 1>that is commented code factor. How long do you keep

248
00:12:47.159 --> 00:12:51.720
<v Speaker 1>commented code in your code base before you should just

249
00:12:51.919 --> 00:12:55.919
<v Speaker 1>remove it because you commented it, because probably you replaced

250
00:12:55.919 --> 00:12:59.639
<v Speaker 1>it with something that something works, but you keep the

251
00:12:59.639 --> 00:13:01.120
<v Speaker 1>comment did code in there.

252
00:13:01.639 --> 00:13:03.480
<v Speaker 3>You're saying, you're saying you want that to be as

253
00:13:03.519 --> 00:13:05.159
<v Speaker 3>long as possible or as short as possible.

254
00:13:05.200 --> 00:13:07.759
<v Speaker 1>No, no, no, the factor as low as possible. In other words,

255
00:13:08.279 --> 00:13:11.799
<v Speaker 1>don't litter. You know, once you've got the other code working,

256
00:13:11.960 --> 00:13:14.559
<v Speaker 1>just get it, get it out. We have you know,

257
00:13:14.720 --> 00:13:16.519
<v Speaker 1>we have version control for it. If you want to

258
00:13:16.559 --> 00:13:17.440
<v Speaker 1>go back and see.

259
00:13:17.240 --> 00:13:18.279
<v Speaker 3>It, we have version control.

260
00:13:18.279 --> 00:13:19.600
<v Speaker 1>That's right, Yeah, just get it out.

261
00:13:19.679 --> 00:13:24.159
<v Speaker 3>Yeah. So on the duplication thing, like, you definitely can

262
00:13:24.679 --> 00:13:27.879
<v Speaker 3>use duplication. Let's say you're doing vertical slice architecture and

263
00:13:27.919 --> 00:13:31.200
<v Speaker 3>you want each slice to be independent and not have

264
00:13:31.399 --> 00:13:34.360
<v Speaker 3>a lot of shared logic in between them, so that

265
00:13:34.480 --> 00:13:37.639
<v Speaker 3>you don't accidentally break slice A while you're working on

266
00:13:37.720 --> 00:13:40.600
<v Speaker 3>slice B and you change that bit of commonality and

267
00:13:41.080 --> 00:13:43.480
<v Speaker 3>you know it breaks the other one. And so by

268
00:13:43.519 --> 00:13:46.360
<v Speaker 3>duplicating it, you know, yay, they're independent from one another.

269
00:13:46.399 --> 00:13:49.000
<v Speaker 3>You can change them independently and they don't impact one another.

270
00:13:49.960 --> 00:13:52.559
<v Speaker 3>But that's a trade off, and it depends, and everything

271
00:13:52.639 --> 00:13:55.600
<v Speaker 3>has a trade off, and architecture and so the trade

272
00:13:55.600 --> 00:13:57.080
<v Speaker 3>off that you're making is that, well, what if I

273
00:13:57.120 --> 00:14:00.200
<v Speaker 3>really do need to change that everywhere? Right? You know,

274
00:14:00.240 --> 00:14:02.200
<v Speaker 3>what if there really is just one rule for how

275
00:14:02.279 --> 00:14:05.320
<v Speaker 3>we want to do this for this system, for this application,

276
00:14:05.440 --> 00:14:08.159
<v Speaker 3>for our business. Uh And and now I've got to

277
00:14:08.159 --> 00:14:11.440
<v Speaker 3>make sure that if that that that rule changes that

278
00:14:11.559 --> 00:14:13.879
<v Speaker 3>I have to go and touch everywhere that I've made

279
00:14:13.879 --> 00:14:16.080
<v Speaker 3>that duplication and fix it everywhere.

280
00:14:16.279 --> 00:14:19.240
<v Speaker 2>Well, and when you break A because you modified for B,

281
00:14:19.679 --> 00:14:24.000
<v Speaker 2>then you fix it by abstracting that shared method a

282
00:14:24.039 --> 00:14:28.200
<v Speaker 2>little bit more, which makes it less clear for both users. Yes, yes,

283
00:14:28.440 --> 00:14:31.320
<v Speaker 2>of it, you know, like it's it's this is iteration

284
00:14:31.399 --> 00:14:33.720
<v Speaker 2>you get into. It's like maybe we should have split these.

285
00:14:33.919 --> 00:14:36.080
<v Speaker 3>Right, yeah, you have you have to be care and

286
00:14:36.120 --> 00:14:38.559
<v Speaker 3>this is you know, fundamental software engineering, not even so

287
00:14:38.639 --> 00:14:42.000
<v Speaker 3>much architecture is like code complete, you know level. How

288
00:14:42.000 --> 00:14:44.799
<v Speaker 3>do you design a function? Right? If you have some

289
00:14:44.919 --> 00:14:47.320
<v Speaker 3>common code and you and you extract it into a function,

290
00:14:47.679 --> 00:14:50.120
<v Speaker 3>and let's say it's on you know, two different pages

291
00:14:50.200 --> 00:14:52.639
<v Speaker 3>or API end points or whatever, and then later on,

292
00:14:53.120 --> 00:14:56.120
<v Speaker 3>you know, the first one needs a little bit more, right, like, well,

293
00:14:56.159 --> 00:14:58.480
<v Speaker 3>in this case, we need one more field, right, So

294
00:14:58.679 --> 00:15:00.279
<v Speaker 3>what do you do? Well, you just pass in a

295
00:15:00.399 --> 00:15:03.799
<v Speaker 3>variable that says include extra data a bullion, and then

296
00:15:03.840 --> 00:15:05.440
<v Speaker 3>you go into the function and you add an if

297
00:15:05.519 --> 00:15:07.639
<v Speaker 3>check and say, well, if this bullion, then include the

298
00:15:07.679 --> 00:15:11.080
<v Speaker 3>extra stuff that that one needs. Right, And that persists

299
00:15:11.080 --> 00:15:13.799
<v Speaker 3>and iterates a few times, and now that shared method

300
00:15:13.879 --> 00:15:16.159
<v Speaker 3>is just a huge mess with all kinds of logic

301
00:15:16.200 --> 00:15:18.919
<v Speaker 3>in it for trying to be everything for everyone, when

302
00:15:19.120 --> 00:15:21.720
<v Speaker 3>in that type of scenario, there are a host of

303
00:15:21.759 --> 00:15:24.559
<v Speaker 3>other ways you could have attacked that problem that wouldn't

304
00:15:24.559 --> 00:15:27.480
<v Speaker 3>have resulted in that huge amount of complexity and dependency

305
00:15:27.519 --> 00:15:30.080
<v Speaker 3>on that one shared function that you pulled out because

306
00:15:30.279 --> 00:15:31.000
<v Speaker 3>duplication was.

307
00:15:31.000 --> 00:15:33.240
<v Speaker 2>Evil, right, m It's a great trap.

308
00:15:33.639 --> 00:15:36.679
<v Speaker 3>Yeah, And I mean refactoring is just a skill that

309
00:15:36.720 --> 00:15:39.759
<v Speaker 3>we have to use constantly. I think in our profession

310
00:15:41.080 --> 00:15:43.080
<v Speaker 3>an ideal you have tests to ensure you're not breaking

311
00:15:43.120 --> 00:15:46.000
<v Speaker 3>things while you're refactoring. But you know, you should be

312
00:15:46.039 --> 00:15:49.960
<v Speaker 3>prepared to be flexible, and you know, whatever decisions you

313
00:15:50.000 --> 00:15:52.120
<v Speaker 3>made last week or last month or last year about

314
00:15:52.440 --> 00:15:55.480
<v Speaker 3>what made sense, you know, be prepared to revisit those

315
00:15:55.559 --> 00:15:57.399
<v Speaker 3>if you see that they no longer apply, they no

316
00:15:57.480 --> 00:15:59.919
<v Speaker 3>longer make sense. And you know, in this case that thing,

317
00:16:00.120 --> 00:16:02.080
<v Speaker 3>you extract it out, maybe it's time to inline it

318
00:16:02.120 --> 00:16:05.559
<v Speaker 3>and you know, duplicate it again in this case, you know,

319
00:16:05.600 --> 00:16:06.679
<v Speaker 3>because things have changed.

320
00:16:07.039 --> 00:16:11.000
<v Speaker 2>Do we feel like the new tooling is getting and

321
00:16:11.039 --> 00:16:13.879
<v Speaker 2>I'm thinking about the co pilots are going to help

322
00:16:13.960 --> 00:16:17.200
<v Speaker 2>us with this, like I've yet to see it produce

323
00:16:17.240 --> 00:16:19.159
<v Speaker 2>something like, hey, do you know this code is effectively

324
00:16:19.200 --> 00:16:22.840
<v Speaker 2>duplicated a junior spatules. I don't think it's there yet.

325
00:16:22.919 --> 00:16:27.320
<v Speaker 3>I haven't seen that either. No. Probably if I if

326
00:16:27.320 --> 00:16:29.200
<v Speaker 3>I took a whole bunch of my source code, put

327
00:16:29.200 --> 00:16:31.720
<v Speaker 3>it into a single text file, passed it into a

328
00:16:31.759 --> 00:16:35.320
<v Speaker 3>GPT model or copilot, and said, please tell me about

329
00:16:35.320 --> 00:16:37.600
<v Speaker 3>where you see duplication, that might get it with the

330
00:16:37.639 --> 00:16:40.600
<v Speaker 3>right prompt and with the right tokens to do that.

331
00:16:40.639 --> 00:16:43.080
<v Speaker 3>But I don't see it volunteering that on its own,

332
00:16:43.639 --> 00:16:44.480
<v Speaker 3>not yet anyway.

333
00:16:44.759 --> 00:16:47.559
<v Speaker 2>No, No, we're not there. But it is interesting to

334
00:16:47.559 --> 00:16:50.200
<v Speaker 2>think in terms of is just less and less of

335
00:16:50.240 --> 00:16:51.960
<v Speaker 2>a big deal just because the tools are going to

336
00:16:52.000 --> 00:16:54.679
<v Speaker 2>help us deal with it either way.

337
00:16:54.519 --> 00:16:57.000
<v Speaker 3>I don't know. I think I think the issue is

338
00:16:57.039 --> 00:16:58.440
<v Speaker 3>going to be the other way. I think all the

339
00:16:58.799 --> 00:17:02.200
<v Speaker 3>quote unquote vibe code that's about to start happening, you

340
00:17:02.240 --> 00:17:06.319
<v Speaker 3>know where folks are just you know, asking whatever AI

341
00:17:06.440 --> 00:17:08.599
<v Speaker 3>tool to code them up whatever it is they need

342
00:17:09.480 --> 00:17:12.720
<v Speaker 3>and copy pasting it into their code and compiling it

343
00:17:12.799 --> 00:17:15.720
<v Speaker 3>until it works. I think that's going to result in

344
00:17:16.119 --> 00:17:21.279
<v Speaker 3>a faster proliferation of duplicate code that no one wrote

345
00:17:21.519 --> 00:17:22.440
<v Speaker 3>that came from.

346
00:17:23.200 --> 00:17:26.079
<v Speaker 2>Should we define vicoding just please? Because I don't think

347
00:17:26.119 --> 00:17:27.160
<v Speaker 2>we've mentioned on the show yet.

348
00:17:27.279 --> 00:17:28.920
<v Speaker 1>Right, Yeah, that's the first time I've heard of it.

349
00:17:28.960 --> 00:17:29.480
<v Speaker 1>But I get it.

350
00:17:29.519 --> 00:17:33.319
<v Speaker 2>Oh good, I'm glad you haven't because you're happier because

351
00:17:33.319 --> 00:17:33.599
<v Speaker 2>of it.

352
00:17:33.960 --> 00:17:35.359
<v Speaker 1>Vibe programming.

353
00:17:35.519 --> 00:17:41.039
<v Speaker 2>Okay, so get this now. Look, Andre Carparthy is an

354
00:17:41.039 --> 00:17:43.240
<v Speaker 2>important guy. This is the anthropic guy, like he's one

355
00:17:43.240 --> 00:17:44.960
<v Speaker 2>of the big thinkers in the space. He got to

356
00:17:45.000 --> 00:17:49.200
<v Speaker 2>kind of take him seriously. I think he really wanted

357
00:17:49.200 --> 00:17:52.240
<v Speaker 2>this to come into being because he tried several times

358
00:17:52.559 --> 00:17:54.359
<v Speaker 2>on different social media to come up different names. He

359
00:17:54.440 --> 00:17:56.960
<v Speaker 2>did a whole bit about I'm programming in English now,

360
00:17:57.000 --> 00:17:59.119
<v Speaker 2>like that sort of thing. But the vibe coding term

361
00:17:59.200 --> 00:18:02.759
<v Speaker 2>is the one that But it was this idea of, hey,

362
00:18:03.279 --> 00:18:06.480
<v Speaker 2>what if you sit with a copilot, describe what you want,

363
00:18:06.640 --> 00:18:09.960
<v Speaker 2>let it write the code, compile it, send it back

364
00:18:10.039 --> 00:18:13.400
<v Speaker 2>the errors. Don't write any code yourself, just keep iterating

365
00:18:13.559 --> 00:18:14.480
<v Speaker 2>where do you get to?

366
00:18:15.039 --> 00:18:17.519
<v Speaker 3>And don't even read the code. Don't even necessarily be

367
00:18:17.559 --> 00:18:20.400
<v Speaker 3>able to read the code, right, this is coding for anyone.

368
00:18:20.480 --> 00:18:25.079
<v Speaker 1>Yeah, well that violates every fiber of my what I

369
00:18:25.160 --> 00:18:26.039
<v Speaker 1>know to be true.

370
00:18:26.119 --> 00:18:28.000
<v Speaker 2>Yeah no, And I don't think he actually went that way,

371
00:18:28.039 --> 00:18:31.000
<v Speaker 2>like he was specifically talking about developer should experience this,

372
00:18:31.599 --> 00:18:33.920
<v Speaker 2>and it was like a weekend thing. Like I think

373
00:18:33.960 --> 00:18:37.279
<v Speaker 2>it's been blown out from beyond what he was thinking about.

374
00:18:37.559 --> 00:18:40.640
<v Speaker 2>It is an interesting exercise, say hey, on a Saturday,

375
00:18:40.759 --> 00:18:45.319
<v Speaker 2>experimenting with a new language, as experienced developer, do this

376
00:18:45.440 --> 00:18:48.559
<v Speaker 2>process and see where you get to. But it got

377
00:18:48.599 --> 00:18:51.960
<v Speaker 2>turned into programmers are obsolete. Anybody can do this, which

378
00:18:52.000 --> 00:18:56.599
<v Speaker 2>is clearly not true because you have no ability to

379
00:18:56.640 --> 00:18:58.160
<v Speaker 2>evaluate what you've created.

380
00:18:58.200 --> 00:19:00.799
<v Speaker 1>We were just talking with Vischwaz about this, and I've

381
00:19:00.839 --> 00:19:05.000
<v Speaker 1>seen this in the wild that somebody uses chat GPT

382
00:19:05.759 --> 00:19:09.319
<v Speaker 1>and says, can you show me how to write Oh,

383
00:19:09.400 --> 00:19:18.480
<v Speaker 1>let's just pick a thread safe list collection, right, and

384
00:19:18.519 --> 00:19:21.119
<v Speaker 1>it goes through all this you know, Oh, yes, well

385
00:19:21.160 --> 00:19:22.599
<v Speaker 1>you're going to have to do this and you have

386
00:19:22.720 --> 00:19:26.799
<v Speaker 1>to locks and this and that, and then at the

387
00:19:26.920 --> 00:19:30.279
<v Speaker 1>end of it, you know, I saw that, and I

388
00:19:30.359 --> 00:19:33.480
<v Speaker 1>just said, why don't why don't you just use a

389
00:19:33.519 --> 00:19:37.359
<v Speaker 1>thread safe collection because one exists in the framework. Oh,

390
00:19:37.480 --> 00:19:41.680
<v Speaker 1>I didn't know that, right. So he didn't say I

391
00:19:41.880 --> 00:19:45.920
<v Speaker 1>need to use a thread safe collection. What are the options?

392
00:19:46.039 --> 00:19:48.519
<v Speaker 1>That's not what he prompted. He said, how do I

393
00:19:48.599 --> 00:19:54.039
<v Speaker 1>write a thread safe collection object? So, yeah, there's a

394
00:19:54.519 --> 00:19:58.480
<v Speaker 1>situation right there where you have to be a program.

395
00:19:58.559 --> 00:20:02.839
<v Speaker 1>You have to be a program like that things out there. Yeah,

396
00:20:02.960 --> 00:20:04.559
<v Speaker 1>or at least search for it, you know, the path

397
00:20:04.640 --> 00:20:07.720
<v Speaker 1>go down. It takes experienced people to do this. You

398
00:20:07.759 --> 00:20:08.920
<v Speaker 1>don't know what you don't know.

399
00:20:09.240 --> 00:20:09.519
<v Speaker 3>Yeah.

400
00:20:09.559 --> 00:20:11.839
<v Speaker 2>I got quoted at a press piece recently when someone

401
00:20:11.839 --> 00:20:13.400
<v Speaker 2>asked me by this, where I said, you know, only

402
00:20:13.440 --> 00:20:15.680
<v Speaker 2>people who don't know enough about programming to think they

403
00:20:15.720 --> 00:20:18.119
<v Speaker 2>can use this would actually consider deploying that stuff. Yeah.

404
00:20:18.599 --> 00:20:20.759
<v Speaker 3>Looking at the definition of vibe coding, which is already

405
00:20:20.799 --> 00:20:23.599
<v Speaker 3>on Wikipedia, apparently it was just introduced in February of

406
00:20:23.599 --> 00:20:26.319
<v Speaker 3>twenty twenty five. Yeah, and it says a key part

407
00:20:26.359 --> 00:20:28.920
<v Speaker 3>of the definition is that the user accepts code without

408
00:20:28.920 --> 00:20:33.039
<v Speaker 3>full understanding, right. AI researcher Simon Wilson said, if an

409
00:20:33.160 --> 00:20:35.359
<v Speaker 3>LLM wrote every line of your code, but you reviewed

410
00:20:35.440 --> 00:20:38.160
<v Speaker 3>tested and understood it all. That's not vibe coding in

411
00:20:38.200 --> 00:20:40.440
<v Speaker 3>my book. That's using an LLLM as a typing assistant.

412
00:20:40.519 --> 00:20:42.319
<v Speaker 2>Yeah, there you go. Yeah, like I said, it was

413
00:20:42.359 --> 00:20:45.799
<v Speaker 2>taken from Andre's original idea and you turned into this

414
00:20:45.920 --> 00:20:48.440
<v Speaker 2>complete madness. Not that I think it was all that

415
00:20:48.480 --> 00:20:50.240
<v Speaker 2>good of an idea in the first place, but definitely

416
00:20:50.240 --> 00:20:52.200
<v Speaker 2>it's been turned into something fairly see.

417
00:20:52.440 --> 00:20:55.880
<v Speaker 3>Yeah, but I don't think it's going to stop being popular, No, oh,

418
00:20:55.920 --> 00:20:59.000
<v Speaker 3>without a doubt. And the trope of programmers are obsolete

419
00:20:59.160 --> 00:21:02.359
<v Speaker 3>never gets old. Sure, sure, well, And the holy grail

420
00:21:02.480 --> 00:21:06.400
<v Speaker 3>of you know, the fourth or fifth or NTHGL programming language,

421
00:21:06.400 --> 00:21:09.640
<v Speaker 3>that is your natural spoken language English or whatever your

422
00:21:09.680 --> 00:21:12.960
<v Speaker 3>language choice is. That's been you know, something we've been

423
00:21:12.960 --> 00:21:15.160
<v Speaker 3>striving for for years. I mean, that's what basic was

424
00:21:15.200 --> 00:21:15.799
<v Speaker 3>supposed to be.

425
00:21:15.960 --> 00:21:17.759
<v Speaker 2>I don't think we've ever been striving for. It just

426
00:21:17.839 --> 00:21:19.960
<v Speaker 2>keeps coming up, keeps.

427
00:21:20.880 --> 00:21:22.880
<v Speaker 3>It's like, well, yes, you can certainly do that. You

428
00:21:22.960 --> 00:21:26.119
<v Speaker 3>just have to, you know, describe in your natural language

429
00:21:26.160 --> 00:21:29.799
<v Speaker 3>everything completely unambiguously so the machine can understand it, right,

430
00:21:30.039 --> 00:21:31.920
<v Speaker 3>And you know, it turns out that starts to look

431
00:21:31.920 --> 00:21:33.279
<v Speaker 3>a lot like a programming language.

432
00:21:33.599 --> 00:21:37.279
<v Speaker 2>Oddly enough, English being somewhat ambiguous because I both cut

433
00:21:37.279 --> 00:21:39.240
<v Speaker 2>the tree down and cut it up.

434
00:21:41.960 --> 00:21:45.200
<v Speaker 1>Yeah, there's lots of those in the English language.

435
00:21:45.440 --> 00:21:47.839
<v Speaker 3>Yeah, I don't think the tools will save us from

436
00:21:48.160 --> 00:21:51.359
<v Speaker 3>copy paste coding. And I think vibe coding is like

437
00:21:51.400 --> 00:21:57.799
<v Speaker 3>a logical ancestor or ancestor logical child of copy paste coding,

438
00:21:57.839 --> 00:22:00.440
<v Speaker 3>but worse because it's just got, you know, auto complete

439
00:22:00.440 --> 00:22:03.000
<v Speaker 3>on steroids doing the copy pasting.

440
00:22:02.720 --> 00:22:05.960
<v Speaker 2>For you well, and remarkably language agnostics. So it's like,

441
00:22:06.000 --> 00:22:09.200
<v Speaker 2>not only did I understand what I meant to do,

442
00:22:09.240 --> 00:22:12.200
<v Speaker 2>but now doing the language I've never experienced, So what

443
00:22:12.559 --> 00:22:16.200
<v Speaker 2>could go wrong? But the vibes are good, they are

444
00:22:16.240 --> 00:22:17.880
<v Speaker 2>as long as you don't show it to anybody or

445
00:22:17.920 --> 00:22:22.279
<v Speaker 2>let anybody run it. But I do appreciate as an

446
00:22:22.279 --> 00:22:26.160
<v Speaker 2>experienced developer that I'm just feeling like my refractoring tools

447
00:22:26.200 --> 00:22:29.240
<v Speaker 2>have gotten dramatically better. And it brings up this idea

448
00:22:29.480 --> 00:22:32.400
<v Speaker 2>of going back to the comment here of yeah, let's

449
00:22:32.480 --> 00:22:37.279
<v Speaker 2>keep going down these transactional pathways for a while. As

450
00:22:37.279 --> 00:22:39.240
<v Speaker 2>we get to a feature set that people start to

451
00:22:39.279 --> 00:22:42.119
<v Speaker 2>care about, start to emerge the app that matters, knowing

452
00:22:42.160 --> 00:22:44.720
<v Speaker 2>that the effort to clean that up into a better

453
00:22:44.759 --> 00:22:47.839
<v Speaker 2>domain model has never been easier. That the tooling is

454
00:22:47.880 --> 00:22:50.960
<v Speaker 2>going to help me make a better, more organized version

455
00:22:50.960 --> 00:22:52.279
<v Speaker 2>of this application in less time.

456
00:22:52.640 --> 00:22:54.559
<v Speaker 3>It is true that the tooling has gotten better, for sure.

457
00:22:54.640 --> 00:22:56.680
<v Speaker 2>Yeah, I guess that's say, that's where I'm going with this,

458
00:22:56.880 --> 00:22:59.920
<v Speaker 2>but that we don't have because I think the overar

459
00:23:00.079 --> 00:23:02.240
<v Speaker 2>engineering of architecture is a problem.

460
00:23:02.319 --> 00:23:05.119
<v Speaker 3>It can be, It certainly can be. You know, I've

461
00:23:05.160 --> 00:23:07.319
<v Speaker 3>got a client that I was working with recently that

462
00:23:07.440 --> 00:23:11.640
<v Speaker 3>had a monolithic architecture and one hundred and twenty projects

463
00:23:11.680 --> 00:23:15.039
<v Speaker 3>in the solution and just building it took forever, and

464
00:23:15.079 --> 00:23:18.519
<v Speaker 3>trying to find anything in there. What just was was crazy.

465
00:23:19.119 --> 00:23:21.880
<v Speaker 3>And this was a you know, a ten plus year

466
00:23:21.920 --> 00:23:24.680
<v Speaker 3>old application, right, this didn't happen overnight. But like you know,

467
00:23:24.799 --> 00:23:27.039
<v Speaker 3>it was a lot and a lot of it was

468
00:23:27.359 --> 00:23:30.079
<v Speaker 3>abstractions and there were there were many, many, many projects

469
00:23:30.079 --> 00:23:32.200
<v Speaker 3>that had one interface in them. Wow, and then and

470
00:23:32.240 --> 00:23:35.119
<v Speaker 3>then a separate project per implementation of that interface. I'm like,

471
00:23:35.839 --> 00:23:38.440
<v Speaker 3>I like some abstraction. I like a little bit of

472
00:23:38.519 --> 00:23:41.720
<v Speaker 3>architectural you know, structure. But that was a little bit

473
00:23:41.799 --> 00:23:44.519
<v Speaker 3>much for me. Let me let me just say so, Yeah,

474
00:23:44.519 --> 00:23:47.279
<v Speaker 3>it's it's always possible to go too far in one

475
00:23:47.319 --> 00:23:48.920
<v Speaker 3>direction or the other. And I'm also not a big

476
00:23:49.000 --> 00:23:52.759
<v Speaker 3>fan of my entire application is one text file, you

477
00:23:52.759 --> 00:23:55.400
<v Speaker 3>know which it could be, right, but I don't.

478
00:23:55.279 --> 00:23:56.240
<v Speaker 1>Like any old days.

479
00:23:56.519 --> 00:23:59.200
<v Speaker 3>Yeah, I don't think just scrolling your mouse wheel is

480
00:23:59.200 --> 00:24:01.960
<v Speaker 3>the only way to find code, and I think we

481
00:24:02.039 --> 00:24:04.599
<v Speaker 3>have better IDs for that to be able to find things.

482
00:24:04.759 --> 00:24:09.359
<v Speaker 1>Speaking of IDEs Visual Studio versus Visual Studio Code, Fritz

483
00:24:09.440 --> 00:24:12.240
<v Speaker 1>keeps wanting me to move over to Visual Studio code,

484
00:24:12.599 --> 00:24:14.920
<v Speaker 1>and I just love Visual Studio, but I guess all

485
00:24:14.920 --> 00:24:18.440
<v Speaker 1>the kids are using code now so, and Microsoft certainly

486
00:24:18.839 --> 00:24:22.319
<v Speaker 1>seems like they're, you know, they're getting behind it a lot.

487
00:24:22.480 --> 00:24:25.240
<v Speaker 3>I still love Visual Studio. A bunch of folks on

488
00:24:25.279 --> 00:24:28.160
<v Speaker 3>my team use Rider, a couple do use vs code.

489
00:24:29.000 --> 00:24:33.079
<v Speaker 3>I like the fact that dot net coet Core allows

490
00:24:33.200 --> 00:24:36.640
<v Speaker 3>us to easily move around between whatever tools we want

491
00:24:36.759 --> 00:24:40.400
<v Speaker 3>and whatever os we want, So I think that competition

492
00:24:40.799 --> 00:24:44.279
<v Speaker 3>overall is a good thing. Yeah. VS Code is definitely

493
00:24:44.359 --> 00:24:46.279
<v Speaker 3>way faster, and it's still true that if I want

494
00:24:46.279 --> 00:24:48.119
<v Speaker 3>to just open up a dot CS file to edit

495
00:24:48.119 --> 00:24:49.880
<v Speaker 3>it real quick, yeah, I'm going to use Notepad or

496
00:24:49.960 --> 00:24:51.640
<v Speaker 3>vs code way before I'm going to open that With

497
00:24:51.720 --> 00:24:52.599
<v Speaker 3>Visual Studio.

498
00:24:52.319 --> 00:24:52.839
<v Speaker 1>Sure, yep.

499
00:24:53.119 --> 00:24:56.240
<v Speaker 2>Yeah, but it's sort of the acknowledgment that that software

500
00:24:56.240 --> 00:25:00.039
<v Speaker 2>development is also project management, and Visual Studio has the

501
00:25:00.240 --> 00:25:04.720
<v Speaker 2>project management. Although now with the do they call it

502
00:25:04.759 --> 00:25:08.319
<v Speaker 2>the dot net ad in for Visual Studio code, you

503
00:25:08.319 --> 00:25:11.000
<v Speaker 2>could at least see the project you have some concept.

504
00:25:10.599 --> 00:25:12.559
<v Speaker 3>Up, sure, yeah. And it has support for solutions and

505
00:25:12.559 --> 00:25:14.519
<v Speaker 3>stuff in there now, yes, which is a little bit

506
00:25:15.000 --> 00:25:16.920
<v Speaker 3>closer to what you get with Visual Studio. Yeah.

507
00:25:16.920 --> 00:25:18.920
<v Speaker 2>And I think that was necessary too, because there is

508
00:25:19.000 --> 00:25:22.319
<v Speaker 2>a group of younger developers who never lived in idd Land.

509
00:25:22.559 --> 00:25:24.759
<v Speaker 2>Like that was the biggest thing I saw, you know,

510
00:25:24.759 --> 00:25:27.519
<v Speaker 2>in this contrast, most organizations I'm seeing is like at

511
00:25:27.559 --> 00:25:30.240
<v Speaker 2>a certain age they've just never touched a visual studio

512
00:25:30.319 --> 00:25:33.119
<v Speaker 2>and they don't want to. But they're still participating in

513
00:25:33.200 --> 00:25:37.000
<v Speaker 2>a larger solution, and so code with the right ad

514
00:25:37.000 --> 00:25:39.559
<v Speaker 2>in is they got to participate it, right. I hate

515
00:25:39.559 --> 00:25:41.640
<v Speaker 2>to distract that by age, but it seems to be

516
00:25:41.680 --> 00:25:43.440
<v Speaker 2>the case. Like I just don't see any energy from

517
00:25:43.519 --> 00:25:47.599
<v Speaker 2>Microsoft in recruiting new developers into Visual Studio, Like what's

518
00:25:47.640 --> 00:25:49.799
<v Speaker 2>the path for a novice developer in a studio? Because

519
00:25:50.240 --> 00:25:52.599
<v Speaker 2>my instinct is that that would be the logical place

520
00:25:52.640 --> 00:25:55.079
<v Speaker 2>to go because all the bits are already there. Well,

521
00:25:55.440 --> 00:25:59.119
<v Speaker 2>unlike studio code, where you have to compose the various

522
00:25:59.119 --> 00:26:01.799
<v Speaker 2>bits into the environment you want. Yeah, the idea that

523
00:26:01.839 --> 00:26:04.599
<v Speaker 2>here's it ready to go seems should be compelling. I

524
00:26:04.640 --> 00:26:05.720
<v Speaker 2>just don't see any path forward.

525
00:26:05.880 --> 00:26:08.440
<v Speaker 1>Well, I love visual Studio, but then again, I have

526
00:26:08.480 --> 00:26:11.160
<v Speaker 1>an I nine, you know, on my guest stop with

527
00:26:11.240 --> 00:26:15.519
<v Speaker 1>about one hundred and twenty eight kicks of RAM, so

528
00:26:15.799 --> 00:26:19.920
<v Speaker 1>it's past me. But you know, loading it in a

529
00:26:20.000 --> 00:26:20.680
<v Speaker 1>vm H.

530
00:26:21.400 --> 00:26:24.799
<v Speaker 3>Well, in the visual part, I mean remember Visual Basic,

531
00:26:24.960 --> 00:26:29.519
<v Speaker 3>Like that was the tool for like hobbyists and novice

532
00:26:29.640 --> 00:26:33.279
<v Speaker 3>and people coming into programming to start, because it was

533
00:26:33.359 --> 00:26:35.160
<v Speaker 3>drag and drop and it was visual and you could

534
00:26:35.200 --> 00:26:37.519
<v Speaker 3>just double click on this button to make it do something.

535
00:26:38.599 --> 00:26:42.079
<v Speaker 3>Visual studio today is much less about that, you know,

536
00:26:42.119 --> 00:26:43.559
<v Speaker 3>depending on what you're building. I mean, you could still

537
00:26:43.599 --> 00:26:46.599
<v Speaker 3>the old wind forms up that way, right, but I

538
00:26:46.640 --> 00:26:49.559
<v Speaker 3>think that a vast majority of people using visual Studio

539
00:26:49.559 --> 00:26:52.480
<v Speaker 3>are not building wind forms, And the vast majority of

540
00:26:52.519 --> 00:26:56.160
<v Speaker 3>those web developers don't have anything like a visual experience.

541
00:26:56.240 --> 00:26:59.559
<v Speaker 3>They have a big editor and a bunch of other tools,

542
00:26:59.559 --> 00:27:02.720
<v Speaker 3>but but no drag and drop since web forms.

543
00:27:02.839 --> 00:27:05.640
<v Speaker 1>So speaking of that last year, I did a project

544
00:27:05.799 --> 00:27:09.599
<v Speaker 1>in vb net, a Windows forms project. Remember I was

545
00:27:09.640 --> 00:27:12.079
<v Speaker 1>telling you how fast it is on my I nine.

546
00:27:12.559 --> 00:27:16.920
<v Speaker 1>That thing managed to suck every CPU cycle out of

547
00:27:16.960 --> 00:27:21.400
<v Speaker 1>my computer and make me wait for minutes before rendering.

548
00:27:22.039 --> 00:27:25.240
<v Speaker 1>Minutes just making a ship, just doing a little thing,

549
00:27:25.279 --> 00:27:27.759
<v Speaker 1>and like wait a minute, wait a minute, I go

550
00:27:27.920 --> 00:27:28.400
<v Speaker 1>be right back.

551
00:27:28.640 --> 00:27:30.279
<v Speaker 2>I just like it when all the fans start to

552
00:27:30.359 --> 00:27:37.599
<v Speaker 2>wind up. I got all these heat sensitive fans. Oh

553
00:27:37.680 --> 00:27:39.680
<v Speaker 2>I clicked the wrong button because I can hear the

554
00:27:39.680 --> 00:27:42.400
<v Speaker 2>fans just going up and go and go up.

555
00:27:42.880 --> 00:27:45.279
<v Speaker 3>The nuclear power plant down the road spins up. It's

556
00:27:45.279 --> 00:27:47.480
<v Speaker 3>like the scene and the license.

557
00:27:48.359 --> 00:27:51.960
<v Speaker 1>Yeah, but certainly developing Blazer apps in visual studios just

558
00:27:52.000 --> 00:27:52.559
<v Speaker 1>a joy.

559
00:27:52.680 --> 00:27:53.720
<v Speaker 2>Yeah, it's a joy.

560
00:27:54.559 --> 00:27:56.880
<v Speaker 1>I did try a couple of things in visual studio

561
00:27:57.000 --> 00:28:00.480
<v Speaker 1>code recently. Fritz and I did a puzz in visual

562
00:28:00.480 --> 00:28:04.480
<v Speaker 1>studio code. It's great. It's very colorful. You know, it's

563
00:28:04.480 --> 00:28:05.720
<v Speaker 1>got lots of blinky lights.

564
00:28:05.880 --> 00:28:09.039
<v Speaker 2>It's more editor centric then yea. You know the problem

565
00:28:09.039 --> 00:28:11.279
<v Speaker 2>with visual studio is it looks like the cockpit of

566
00:28:11.279 --> 00:28:13.720
<v Speaker 2>a seven forty seven in there. Yeah, Like I wish

567
00:28:13.759 --> 00:28:15.599
<v Speaker 2>there was better tooling for it, like turn off the stuff.

568
00:28:15.599 --> 00:28:18.359
<v Speaker 2>I don't need to look at. I'm currently working on this,

569
00:28:19.079 --> 00:28:23.920
<v Speaker 2>you know, web centric yeah, Azure app right, Like, there's

570
00:28:23.920 --> 00:28:26.039
<v Speaker 2>a whole lot of buttons and toolbars and things that

571
00:28:26.119 --> 00:28:26.880
<v Speaker 2>don't need to be there.

572
00:28:26.920 --> 00:28:29.559
<v Speaker 1>Even the most popular Windows applications I'm thinking of, the

573
00:28:29.599 --> 00:28:35.279
<v Speaker 1>Adobe suite of applications has those modular windows that you

574
00:28:35.319 --> 00:28:37.519
<v Speaker 1>can just turn on and turn off, and so they

575
00:28:37.559 --> 00:28:40.960
<v Speaker 1>have the concept of workspaces where this window goes over here,

576
00:28:41.000 --> 00:28:42.640
<v Speaker 1>and then the editor window down here.

577
00:28:42.640 --> 00:28:46.519
<v Speaker 2>That started docking undocking MDI thing in front really from

578
00:28:46.559 --> 00:28:49.200
<v Speaker 2>Windows three for crying out loud, but it's never gone away.

579
00:28:49.319 --> 00:28:49.519
<v Speaker 1>Yeah.

580
00:28:49.559 --> 00:28:52.200
<v Speaker 3>Well Visual Studio has that capability too, But I see

581
00:28:52.240 --> 00:28:55.240
<v Speaker 3>more doves that accidentally move a window and then can't

582
00:28:55.240 --> 00:28:57.000
<v Speaker 3>figure out how to get it to redock, right. And

583
00:28:57.079 --> 00:29:00.119
<v Speaker 3>I see folks using it intentionally where they have like

584
00:29:00.160 --> 00:29:02.799
<v Speaker 3>a certain window layout while they're doing this task and

585
00:29:02.839 --> 00:29:05.079
<v Speaker 3>then a different window layout when they're doing a different task.

586
00:29:06.000 --> 00:29:09.759
<v Speaker 2>Yeah, and you really want to have an undo on

587
00:29:09.839 --> 00:29:11.920
<v Speaker 2>all of that. Again, I wonder if we could make

588
00:29:11.960 --> 00:29:15.160
<v Speaker 2>better tooling to make this easier. It just make people unafree,

589
00:29:15.200 --> 00:29:16.799
<v Speaker 2>because that's the thing is you get afraid to touch it.

590
00:29:17.160 --> 00:29:19.799
<v Speaker 3>Right, And we have templates for some things like project

591
00:29:19.839 --> 00:29:21.880
<v Speaker 3>templates and things, but they're you know, used once at

592
00:29:21.920 --> 00:29:24.319
<v Speaker 3>the start, and that's it. Imagine if you had some

593
00:29:24.359 --> 00:29:26.720
<v Speaker 3>templates that folks could share, and you know, you watch

594
00:29:26.759 --> 00:29:28.519
<v Speaker 3>some YouTuber and you see, oh, they're using that such

595
00:29:28.519 --> 00:29:29.960
<v Speaker 3>and such template for how they laid things out.

596
00:29:30.000 --> 00:29:30.359
<v Speaker 2>I like that.

597
00:29:30.440 --> 00:29:32.000
<v Speaker 3>Let me just go grab it, just like you do

598
00:29:32.039 --> 00:29:34.640
<v Speaker 3>with a visual studio code. Plug it today. You know,

599
00:29:34.759 --> 00:29:37.400
<v Speaker 3>like that that layout could be something that was shared

600
00:29:37.440 --> 00:29:39.039
<v Speaker 3>and used by the community.

601
00:29:39.279 --> 00:29:41.319
<v Speaker 1>Perhaps it seems like a good time take a break.

602
00:29:41.359 --> 00:29:44.079
<v Speaker 1>We're about halfway in, so sit tight and we'll be

603
00:29:44.160 --> 00:29:48.720
<v Speaker 1>back after these very important messages. Did you know you

604
00:29:48.720 --> 00:29:52.599
<v Speaker 1>can easily migrate asp net web apps to Windows containers

605
00:29:52.680 --> 00:29:57.440
<v Speaker 1>on Aws. Use the app to Container tool to containerize

606
00:29:57.480 --> 00:30:02.079
<v Speaker 1>your iis websites and deploy to AWA managed container services

607
00:30:02.559 --> 00:30:06.240
<v Speaker 1>with or without Kubernetes. Find out more about app to

608
00:30:06.279 --> 00:30:10.839
<v Speaker 1>container at aws, dot Amazon dot Com, slash dot net,

609
00:30:11.039 --> 00:30:18.640
<v Speaker 1>slash Modernize. And we're back at dot NetRocks. I'm Carl Franklin.

610
00:30:18.680 --> 00:30:22.599
<v Speaker 1>That's Richard Campbell either and that's Steve Smith, otherwise known

611
00:30:22.640 --> 00:30:26.920
<v Speaker 1>as our Dallas Hey, and we're just keeping out over

612
00:30:27.039 --> 00:30:30.799
<v Speaker 1>tooling Visual studio architecture. You know, whatever Steve wants to

613
00:30:30.839 --> 00:30:31.279
<v Speaker 1>talk about.

614
00:30:31.559 --> 00:30:34.559
<v Speaker 2>Well, plus, I mean part of this is I want

615
00:30:35.759 --> 00:30:38.039
<v Speaker 2>I'm always playing the act. I spent more time as

616
00:30:38.039 --> 00:30:40.359
<v Speaker 2>an architect as developer anyway, right, I'm always playing the

617
00:30:40.440 --> 00:30:44.400
<v Speaker 2>act of is my architecture impairing my developers? And so

618
00:30:44.680 --> 00:30:46.160
<v Speaker 2>some ways I want to let him write code and

619
00:30:46.160 --> 00:30:48.319
<v Speaker 2>then reel or reel it in. And so this whole

620
00:30:48.319 --> 00:30:50.880
<v Speaker 2>conversation you have about touling is about maybe this is

621
00:30:50.920 --> 00:30:53.680
<v Speaker 2>easier now that I don't need to be so strict

622
00:30:54.200 --> 00:30:57.160
<v Speaker 2>with what my how my developers have workflows work. They

623
00:30:57.200 --> 00:31:00.759
<v Speaker 2>can give them more freedom knowing the consequences of a

624
00:31:00.839 --> 00:31:02.079
<v Speaker 2>refactor or just smaller.

625
00:31:02.559 --> 00:31:04.000
<v Speaker 3>Yeah, I mean a lot of it. Like I'm going

626
00:31:04.039 --> 00:31:06.599
<v Speaker 3>to say it depends. We made up t shirts for

627
00:31:06.680 --> 00:31:08.799
<v Speaker 3>Nimble Pros that say it depends because that's the answert

628
00:31:08.799 --> 00:31:11.279
<v Speaker 3>of everything, and it's a cop out answer.

629
00:31:11.440 --> 00:31:13.920
<v Speaker 1>It's going to need it. It's going to mean another

630
00:31:14.000 --> 00:31:16.319
<v Speaker 1>thing in about forty years, you know that, right?

631
00:31:16.480 --> 00:31:19.000
<v Speaker 2>Nice? Yeah, I don't think it's that long, but yes,

632
00:31:19.319 --> 00:31:26.440
<v Speaker 2>all right, maybe thirty Like what depends on who the

633
00:31:26.480 --> 00:31:27.960
<v Speaker 2>young one on this show is today.

634
00:31:30.000 --> 00:31:31.480
<v Speaker 3>Okay, I think I know where you're going, But yeah,

635
00:31:31.480 --> 00:31:32.079
<v Speaker 3>I'm a young one.

636
00:31:33.240 --> 00:31:36.079
<v Speaker 1>Yeah, okay, adult diapers.

637
00:31:36.119 --> 00:31:37.640
<v Speaker 2>Okay, adult diapers.

638
00:31:38.559 --> 00:31:39.559
<v Speaker 1>Explain my chad.

639
00:31:40.039 --> 00:31:43.480
<v Speaker 3>Explain it to me at least, but your audience appreciates it.

640
00:31:43.519 --> 00:31:43.920
<v Speaker 3>There you go.

641
00:31:43.960 --> 00:31:47.319
<v Speaker 1>If you've got to explain it, it's not funny.

642
00:31:47.480 --> 00:31:50.279
<v Speaker 3>The thing about that, that answer that every consultant, every

643
00:31:50.359 --> 00:31:53.160
<v Speaker 3>architect gives when when the customer asks them, you know,

644
00:31:53.240 --> 00:31:55.839
<v Speaker 3>any question like how should we do this? How long

645
00:31:55.880 --> 00:31:58.880
<v Speaker 3>will this take? Is that it's a cop out answer

646
00:31:59.079 --> 00:32:02.359
<v Speaker 3>unless you immediately follow it up with what it depends

647
00:32:02.400 --> 00:32:05.440
<v Speaker 3>on and what the levers are that the customer can

648
00:32:05.640 --> 00:32:09.240
<v Speaker 3>can pull to adjust the outcome that they're looking for, right, uh,

649
00:32:09.319 --> 00:32:13.039
<v Speaker 3>and and so in the case of the software architecture

650
00:32:13.079 --> 00:32:17.480
<v Speaker 3>and the tooling, I think in many cases, yes, if

651
00:32:17.480 --> 00:32:19.680
<v Speaker 3>the developers know what they're doing, you don't have to

652
00:32:19.720 --> 00:32:23.960
<v Speaker 3>have as many guardrails for them to do what they

653
00:32:23.960 --> 00:32:25.960
<v Speaker 3>need to do. And if the team is small or

654
00:32:25.960 --> 00:32:28.279
<v Speaker 3>if the project is small, all those things are factors

655
00:32:28.319 --> 00:32:31.759
<v Speaker 3>that matter. I think in this case, the bigger the team,

656
00:32:31.880 --> 00:32:34.559
<v Speaker 3>the longer term the project, the more complex the domain,

657
00:32:34.920 --> 00:32:38.240
<v Speaker 3>the more important it is that folks have a unified

658
00:32:38.279 --> 00:32:42.640
<v Speaker 3>direction in mind that you know, everybody understands what the

659
00:32:42.720 --> 00:32:45.720
<v Speaker 3>architecture is and why they should work with it not

660
00:32:45.799 --> 00:32:48.720
<v Speaker 3>against it, and why they might they might be benefits

661
00:32:48.759 --> 00:32:51.519
<v Speaker 3>of having some consistency in the codebase of how things

662
00:32:51.559 --> 00:32:53.440
<v Speaker 3>are done, so that if you, let's say, have a

663
00:32:53.440 --> 00:32:55.759
<v Speaker 3>web API and you look at you know, five different

664
00:32:55.839 --> 00:32:59.519
<v Speaker 3>endpoints that all do posts to create something, they don't

665
00:32:59.519 --> 00:33:02.359
<v Speaker 3>do it five different ways, like because then later on

666
00:33:02.440 --> 00:33:04.799
<v Speaker 3>when you decide, hey, every time we post something, you know,

667
00:33:04.839 --> 00:33:06.920
<v Speaker 3>we want to have some open telemetry that you know,

668
00:33:07.039 --> 00:33:09.400
<v Speaker 3>drops off a metric that says we created this thing. Well,

669
00:33:09.400 --> 00:33:11.000
<v Speaker 3>now you got to do that in five different places

670
00:33:11.039 --> 00:33:13.359
<v Speaker 3>in five different ways. Like that's that's not efficient and

671
00:33:13.400 --> 00:33:14.160
<v Speaker 3>it's error prone.

672
00:33:14.319 --> 00:33:17.720
<v Speaker 2>Yeah, yeah, and absolutely the biggest thing is you're going

673
00:33:17.759 --> 00:33:19.400
<v Speaker 2>to miss one. You're going to fix four of them.

674
00:33:19.279 --> 00:33:22.240
<v Speaker 3>Right right, yep, there's a law for that. I forget

675
00:33:22.240 --> 00:33:25.400
<v Speaker 3>whose law is. But the law is that so and

676
00:33:25.440 --> 00:33:28.599
<v Speaker 3>so's law and so and so's law says that if

677
00:33:28.599 --> 00:33:30.960
<v Speaker 3>there are things that need to be changed, I will

678
00:33:31.000 --> 00:33:32.640
<v Speaker 3>fix at most N minus one of them.

679
00:33:32.880 --> 00:33:36.839
<v Speaker 1>Yes, well, you can lean on the compiler for a

680
00:33:36.880 --> 00:33:41.319
<v Speaker 1>lot of that too, like I had to do that today. Actually,

681
00:33:41.359 --> 00:33:46.359
<v Speaker 1>we were working on moving connection strings out of configuration

682
00:33:47.079 --> 00:33:50.160
<v Speaker 1>and into a database that because there's a lot of

683
00:33:50.160 --> 00:33:54.000
<v Speaker 1>different databases depending on the client right s multi tenant situation,

684
00:33:54.960 --> 00:34:00.400
<v Speaker 1>and so instead of everywhere where I'm reading configure, now

685
00:34:00.440 --> 00:34:03.880
<v Speaker 1>I have to read this class that's in our state bag.

686
00:34:05.640 --> 00:34:08.360
<v Speaker 1>But the easiest way to do that is just remove

687
00:34:08.400 --> 00:34:13.519
<v Speaker 1>where the configuration gets injected. Just remove it. Compiler says

688
00:34:13.519 --> 00:34:15.400
<v Speaker 1>you got to hit fix this, this, this, this, and this,

689
00:34:15.480 --> 00:34:18.119
<v Speaker 1>and I say, okay, yeah.

690
00:34:17.880 --> 00:34:18.400
<v Speaker 2>Get rid of it.

691
00:34:18.480 --> 00:34:20.159
<v Speaker 3>Yeah, just lean in the compiler.

692
00:34:20.639 --> 00:34:21.679
<v Speaker 1>Lean on the compiler.

693
00:34:22.000 --> 00:34:25.199
<v Speaker 2>Yeah. No, compiler is your friend. It is ultimately the

694
00:34:25.239 --> 00:34:28.800
<v Speaker 2>source of truth because it's what's got You're going to run.

695
00:34:28.960 --> 00:34:32.239
<v Speaker 2>Everything else's secondary or not run. Yeah, we're not run.

696
00:34:32.280 --> 00:34:35.679
<v Speaker 2>As the case. Maybe I think it's one of the

697
00:34:35.679 --> 00:34:37.480
<v Speaker 2>reasons that get hep copiloted as well as it did,

698
00:34:37.519 --> 00:34:40.000
<v Speaker 2>is because compiler gets to say, yeah, you know, that's

699
00:34:40.039 --> 00:34:42.280
<v Speaker 2>the nice thing about a compiler. It is ultimately them

700
00:34:42.360 --> 00:34:48.199
<v Speaker 2>the arbiter. Nope, I can't compile this, so thanks for playing.

701
00:34:48.519 --> 00:34:51.679
<v Speaker 1>What I don't want is copilot telling me that I

702
00:34:51.920 --> 00:34:54.280
<v Speaker 1>that I'm stupid and I shouldn't do what I just did.

703
00:34:54.599 --> 00:34:54.760
<v Speaker 3>Right.

704
00:34:55.280 --> 00:34:59.679
<v Speaker 1>I like that co pilot offers positive suggestions, like something

705
00:34:59.719 --> 00:35:00.400
<v Speaker 1>that works.

706
00:35:00.559 --> 00:35:02.800
<v Speaker 2>It is a very positive tool. You know, if you

707
00:35:02.840 --> 00:35:04.840
<v Speaker 2>work on the prompts, you can make it to sarcastic

708
00:35:04.880 --> 00:35:05.440
<v Speaker 2>and nasty.

709
00:35:05.719 --> 00:35:06.679
<v Speaker 1>Yeah you probably can.

710
00:35:06.800 --> 00:35:11.119
<v Speaker 3>Yeah you want to, but yeah, you definitely can. I've

711
00:35:11.159 --> 00:35:13.719
<v Speaker 3>asked it to respond as if it was the nastiest

712
00:35:13.719 --> 00:35:17.039
<v Speaker 3>stack overflow person, and it'll happily do that.

713
00:35:17.039 --> 00:35:18.159
<v Speaker 1>That's interesting.

714
00:35:19.159 --> 00:35:19.559
<v Speaker 3>Wow.

715
00:35:20.039 --> 00:35:21.800
<v Speaker 2>Is that an emotional thing there, Steve? Is that where

716
00:35:21.840 --> 00:35:22.119
<v Speaker 2>you are?

717
00:35:24.000 --> 00:35:25.920
<v Speaker 3>I was just seeing how it could do as a

718
00:35:25.960 --> 00:35:29.079
<v Speaker 3>substitute for stack overflow with the full experience.

719
00:35:30.079 --> 00:35:33.079
<v Speaker 1>Yeah, okay, so this would be funny. This will be

720
00:35:33.079 --> 00:35:36.599
<v Speaker 1>funny if you took a poorly written method just that

721
00:35:36.760 --> 00:35:38.960
<v Speaker 1>stands on its own right, returns a string or something,

722
00:35:39.000 --> 00:35:45.639
<v Speaker 1>doesn't take any dependencies, and poorly written, poorly commented, give

723
00:35:45.679 --> 00:35:48.360
<v Speaker 1>it to chat, GPT or copyl or whatever, and say,

724
00:35:49.159 --> 00:35:55.440
<v Speaker 1>write an angry, nasty email to the person that wrote this,

725
00:35:56.280 --> 00:35:59.360
<v Speaker 1>lambasting them for being stupid, and just see when.

726
00:35:59.199 --> 00:36:02.400
<v Speaker 2>It comes up. Then we have enough in the other

727
00:36:02.440 --> 00:36:03.239
<v Speaker 2>world already.

728
00:36:03.760 --> 00:36:06.239
<v Speaker 1>Yeah, that'd be I think it would be hilarious.

729
00:36:06.400 --> 00:36:07.079
<v Speaker 2>I gotta say, I.

730
00:36:07.800 --> 00:36:12.000
<v Speaker 3>You just wire it up to the Daily WTFA, which

731
00:36:12.039 --> 00:36:14.119
<v Speaker 3>which has all kinds of examples of code that you

732
00:36:14.159 --> 00:36:15.280
<v Speaker 3>wouldn't want to see.

733
00:36:15.639 --> 00:36:19.159
<v Speaker 2>I find myself ghosting or you know, co co coding

734
00:36:19.159 --> 00:36:21.760
<v Speaker 2>with folks that are using tools like Copilot, and the

735
00:36:21.760 --> 00:36:24.440
<v Speaker 2>way some of them interact with that tool is shocking.

736
00:36:24.960 --> 00:36:26.760
<v Speaker 2>Like if you ever spoke to another person this way,

737
00:36:26.800 --> 00:36:30.039
<v Speaker 2>it would be an HR violation. I don't I don't

738
00:36:30.039 --> 00:36:32.760
<v Speaker 2>know why, but it's it seems seems to bring up

739
00:36:32.880 --> 00:36:34.199
<v Speaker 2>things in people. M hm.

740
00:36:34.400 --> 00:36:38.159
<v Speaker 3>I did find it. It's called Shalloway's law. When en

741
00:36:38.239 --> 00:36:40.519
<v Speaker 3>things need to change and N is greater than one,

742
00:36:40.599 --> 00:36:43.159
<v Speaker 3>Shalloway will find at most N minus one of these

743
00:36:43.199 --> 00:36:49.039
<v Speaker 3>things at most but l Shalloway. Okay, that is certainly,

744
00:36:49.159 --> 00:36:51.800
<v Speaker 3>certainly a problem when you have too much repetition, right right,

745
00:36:52.679 --> 00:36:54.519
<v Speaker 3>jumping back to architecture.

746
00:36:54.639 --> 00:36:56.519
<v Speaker 2>But you know, and you're putting a shape around this

747
00:36:56.559 --> 00:36:58.400
<v Speaker 2>to you, Steve that I really appreciate that. It's like,

748
00:36:58.599 --> 00:37:00.199
<v Speaker 2>I want to give you some freedom to get going,

749
00:37:00.280 --> 00:37:02.440
<v Speaker 2>get it, you know, maybe get to an MVP or

750
00:37:02.519 --> 00:37:04.559
<v Speaker 2>something like that, and then I'm going to bring in

751
00:37:04.679 --> 00:37:07.599
<v Speaker 2>architecture because once I get to an end of a

752
00:37:07.599 --> 00:37:10.400
<v Speaker 2>certain number, we're gonna have a tough time fixing it.

753
00:37:10.440 --> 00:37:13.519
<v Speaker 2>So it's like, where is that number in that freedom,

754
00:37:13.719 --> 00:37:17.679
<v Speaker 2>Like it's obviously not one maybe at ten it's too many,

755
00:37:17.920 --> 00:37:21.599
<v Speaker 2>like somewhere in there is a balancing act to reel

756
00:37:21.599 --> 00:37:22.559
<v Speaker 2>it in for sure.

757
00:37:22.639 --> 00:37:26.719
<v Speaker 3>Yeah, and there's there's some literature on what end should

758
00:37:26.760 --> 00:37:29.800
<v Speaker 3>be when it comes to don't repeat yourself, and usually

759
00:37:29.800 --> 00:37:31.760
<v Speaker 3>it's a three strikes you're out rule is the one

760
00:37:31.800 --> 00:37:35.360
<v Speaker 3>that I'm most familiar with, where you know, the first duplicate,

761
00:37:35.440 --> 00:37:37.360
<v Speaker 3>it's fine, don't worry about it, you know, the second

762
00:37:37.360 --> 00:37:39.760
<v Speaker 3>one same. You know, maybe take note by the time

763
00:37:39.760 --> 00:37:41.800
<v Speaker 3>there's three of them, Okay, this is something that we

764
00:37:41.880 --> 00:37:44.639
<v Speaker 3>need to do something about. H and ten would be

765
00:37:44.679 --> 00:37:48.239
<v Speaker 3>I think, way way too You've waited too long. Yeah,

766
00:37:48.320 --> 00:37:51.719
<v Speaker 3>but I think it's important that you also always realize

767
00:37:51.800 --> 00:37:56.280
<v Speaker 3>that they need to be something that is logically exactly

768
00:37:56.320 --> 00:37:59.760
<v Speaker 3>the same and not just coincidentally duplicate. What I mean

769
00:37:59.800 --> 00:38:04.320
<v Speaker 3>by that is, let's say you have some UI that

770
00:38:04.400 --> 00:38:08.800
<v Speaker 3>you're componentizing, and in three different components they happen to

771
00:38:08.920 --> 00:38:12.480
<v Speaker 3>use the same DIV structure. You don't necessarily want to

772
00:38:12.519 --> 00:38:14.519
<v Speaker 3>pull that div structure out and say this is the

773
00:38:14.519 --> 00:38:17.840
<v Speaker 3>one and only way that components will ever look, because

774
00:38:17.840 --> 00:38:19.719
<v Speaker 3>now that means if you suddenly come up with a

775
00:38:19.719 --> 00:38:22.559
<v Speaker 3>fourth component and it needs a different structure of divs

776
00:38:22.559 --> 00:38:25.360
<v Speaker 3>to display what it wants to do. You've totally hamstrung yourself.

777
00:38:26.000 --> 00:38:28.840
<v Speaker 3>It was just a coincidence that your first three components

778
00:38:28.840 --> 00:38:30.920
<v Speaker 3>happened to look like that, right that you know, the

779
00:38:31.119 --> 00:38:34.079
<v Speaker 3>CSS classes and the layout and other things. Maybe those

780
00:38:34.159 --> 00:38:37.360
<v Speaker 3>are structures that you want to repeat and constrain, but

781
00:38:38.400 --> 00:38:40.519
<v Speaker 3>don't take it too far, right, And the same is

782
00:38:40.559 --> 00:38:42.400
<v Speaker 3>true in the programming logic, just as it would be

783
00:38:42.400 --> 00:38:42.800
<v Speaker 3>in the UI.

784
00:38:43.119 --> 00:38:46.000
<v Speaker 2>Yeah. Yeah, and I appreciate that, like that's the shape

785
00:38:46.039 --> 00:38:49.840
<v Speaker 2>around this now is somewhere you can get to that number.

786
00:38:51.440 --> 00:38:54.360
<v Speaker 2>I think it's a great act because we've all been

787
00:38:54.360 --> 00:38:56.840
<v Speaker 2>in environments where folks were so strict nobody could get

788
00:38:56.840 --> 00:38:59.840
<v Speaker 2>going right, So I want to give them freeom.

789
00:39:00.039 --> 00:39:03.400
<v Speaker 3>One of the things I've been doing recently in my software,

790
00:39:03.400 --> 00:39:06.079
<v Speaker 3>in my architectures that I'm a part of that I

791
00:39:06.119 --> 00:39:08.679
<v Speaker 3>really like, is just trying to focus as much of

792
00:39:08.719 --> 00:39:12.599
<v Speaker 3>the work down to use cases. And a given use

793
00:39:12.639 --> 00:39:17.119
<v Speaker 3>case usually maps to one command that is initiated by

794
00:39:17.119 --> 00:39:19.679
<v Speaker 3>the UI, you know, one button click or one API

795
00:39:19.840 --> 00:39:23.719
<v Speaker 3>endpoint or something like that. And so because it's so small,

796
00:39:23.760 --> 00:39:28.000
<v Speaker 3>it's so simple putting all that logic in one place

797
00:39:28.119 --> 00:39:31.360
<v Speaker 3>in one handler or service. But I'm a big fan

798
00:39:31.400 --> 00:39:35.239
<v Speaker 3>of handlers now for a variety of reasons. Makes it

799
00:39:35.280 --> 00:39:38.159
<v Speaker 3>so that even a new developer can usually track how

800
00:39:38.199 --> 00:39:42.519
<v Speaker 3>things work fairly quickly. And so, you know, whatever patterns,

801
00:39:42.519 --> 00:39:45.400
<v Speaker 3>whether you're using vertical slices or clean architecture, demain divertive

802
00:39:45.440 --> 00:39:49.159
<v Speaker 3>development doesn't matter. If you've got a use case per

803
00:39:49.280 --> 00:39:52.440
<v Speaker 3>action that the user can invoke and you have one

804
00:39:52.440 --> 00:39:55.639
<v Speaker 3>handler for that use case, it makes it so's it's

805
00:39:55.679 --> 00:39:58.960
<v Speaker 3>a fairly easy mapping for a developer to know where

806
00:39:59.000 --> 00:40:01.639
<v Speaker 3>to go to fix bug or what to do to

807
00:40:01.719 --> 00:40:04.480
<v Speaker 3>create a new function a new vertical slice, a new

808
00:40:04.519 --> 00:40:05.480
<v Speaker 3>piece of functionality.

809
00:40:05.960 --> 00:40:06.679
<v Speaker 2>Yep, I'm by it.

810
00:40:06.760 --> 00:40:07.679
<v Speaker 1>Yeah, I'll take that.

811
00:40:07.920 --> 00:40:10.280
<v Speaker 3>And so the reason I mentioned that I prefer to

812
00:40:10.320 --> 00:40:13.320
<v Speaker 3>have these be handlers as opposed to a service, right

813
00:40:13.320 --> 00:40:17.119
<v Speaker 3>because you could have, you know, an XYZ service that

814
00:40:17.159 --> 00:40:19.599
<v Speaker 3>has a bunch of methods on it like create the thing,

815
00:40:19.880 --> 00:40:24.800
<v Speaker 3>update the thing, delete the thing, et cetera. Those don't

816
00:40:24.800 --> 00:40:30.519
<v Speaker 3>compose well into a pipeline. And so lately I've been

817
00:40:30.760 --> 00:40:35.440
<v Speaker 3>a huge fan of removing cross cutting concerns by using

818
00:40:35.559 --> 00:40:38.519
<v Speaker 3>a design pattern called chiine of responsibility, which is the

819
00:40:38.559 --> 00:40:41.039
<v Speaker 3>exact same pattern that asp dot net core uses with

820
00:40:41.079 --> 00:40:44.079
<v Speaker 3>its middleware. So any asp net dov you already know

821
00:40:44.119 --> 00:40:48.039
<v Speaker 3>this pattern. It's it's how middleware works. But most developers

822
00:40:48.079 --> 00:40:51.800
<v Speaker 3>aren't using it in their own solutions and their own software.

823
00:40:52.519 --> 00:40:54.239
<v Speaker 3>And I'm not suggesting that you take all your business

824
00:40:54.239 --> 00:40:56.280
<v Speaker 3>logic and implement it as asp net core middleware. That

825
00:40:56.320 --> 00:40:59.760
<v Speaker 3>would be terrible. But if you create your own middleware

826
00:40:59.800 --> 00:41:02.320
<v Speaker 3>pipe line, which you can easily do with a tool

827
00:41:02.320 --> 00:41:05.280
<v Speaker 3>like mediator, or you can roll your own or there's

828
00:41:05.320 --> 00:41:08.039
<v Speaker 3>other tools out there that support this type of behaviors

829
00:41:08.079 --> 00:41:12.840
<v Speaker 3>and commands and handlers, what that enables is a use

830
00:41:12.960 --> 00:41:17.760
<v Speaker 3>of polymorphism and other patterns like decorators at a huge scale.

831
00:41:18.559 --> 00:41:23.000
<v Speaker 3>Because now instead of having you know, umpteen different services

832
00:41:23.039 --> 00:41:25.280
<v Speaker 3>for every different entity you might have in your system,

833
00:41:25.679 --> 00:41:29.280
<v Speaker 3>every one of which has a custom, unique interface, or maybe,

834
00:41:29.320 --> 00:41:31.840
<v Speaker 3>if you're lucky, a generic interface. Right, if you want

835
00:41:31.880 --> 00:41:34.679
<v Speaker 3>to add some functionality, like say some logging to every

836
00:41:34.719 --> 00:41:36.920
<v Speaker 3>one of those methods, right, that's a lot of code

837
00:41:36.960 --> 00:41:38.639
<v Speaker 3>you're going to have to write. It's a lot of decorators,

838
00:41:38.719 --> 00:41:41.280
<v Speaker 3>a lot of methods you have to wrap. As soon

839
00:41:41.280 --> 00:41:44.239
<v Speaker 3>as you say that I'm using the handler model, every

840
00:41:44.280 --> 00:41:47.000
<v Speaker 3>single one of your methods looks the same. They all

841
00:41:47.039 --> 00:41:51.199
<v Speaker 3>say I handle some type and I return some other type, right,

842
00:41:51.519 --> 00:41:53.920
<v Speaker 3>And now you can wrap those in a behavior or

843
00:41:53.920 --> 00:41:58.400
<v Speaker 3>a decorator trivially, and you can write one behavior for

844
00:41:58.480 --> 00:42:01.400
<v Speaker 3>doing logging, one behavior for doing exception handling, one behavior

845
00:42:01.400 --> 00:42:04.920
<v Speaker 3>for doing validation, and it applies everywhere. And the amount

846
00:42:04.920 --> 00:42:07.519
<v Speaker 3>of code that that cuts out of your system is

847
00:42:07.679 --> 00:42:11.239
<v Speaker 3>just massive. Like I've seen fifty percent or more reductions

848
00:42:11.280 --> 00:42:14.760
<v Speaker 3>in total code base by getting rid of repeated try

849
00:42:14.800 --> 00:42:18.199
<v Speaker 3>catch blocks and validation blox and logging blocks and everything else.

850
00:42:19.360 --> 00:42:22.119
<v Speaker 2>But it is also something you don't decide upfront to

851
00:42:22.159 --> 00:42:24.440
<v Speaker 2>go change a responsibility, but to say, hey, we've reached

852
00:42:24.440 --> 00:42:27.679
<v Speaker 2>this level of complexity, let's go retro this and then

853
00:42:27.719 --> 00:42:29.239
<v Speaker 2>going forward we're going to use it.

854
00:42:29.840 --> 00:42:31.480
<v Speaker 3>I mean, you can, but this is one of the

855
00:42:31.519 --> 00:42:35.360
<v Speaker 3>things where I've seen so much gain in productivity and

856
00:42:35.840 --> 00:42:38.920
<v Speaker 3>design that I'm I'm just that's how I'm writing software now. Yeah, Okay,

857
00:42:39.320 --> 00:42:41.400
<v Speaker 3>everything has a use case and a handler, and.

858
00:42:41.320 --> 00:42:43.440
<v Speaker 2>I mean I'm always chilled by the one right way here,

859
00:42:43.480 --> 00:42:45.360
<v Speaker 2>Steve right, Oh, sure it's at.

860
00:42:46.039 --> 00:42:47.960
<v Speaker 3>And there's there's some complexity there. I'll tell you what

861
00:42:48.000 --> 00:42:50.800
<v Speaker 3>when I'm writing a proof of concept when I'm you know, saying, hey,

862
00:42:50.840 --> 00:42:53.800
<v Speaker 3>I want to evaluate three different ways to do this

863
00:42:53.920 --> 00:42:57.280
<v Speaker 3>messaging over Azure, right, because Azure has seventy two different

864
00:42:57.280 --> 00:43:00.159
<v Speaker 3>ways that you can pass messages around. I'm an to

865
00:43:00.400 --> 00:43:02.280
<v Speaker 3>just write that code in some console apps and there's

866
00:43:02.280 --> 00:43:04.320
<v Speaker 3>not gonna be use cases or any other structure. But

867
00:43:04.360 --> 00:43:06.360
<v Speaker 3>that's just a proof of concept. I'm gonna throw it away,

868
00:43:06.840 --> 00:43:09.039
<v Speaker 3>and I'm probably gonna ask chatch ept to generate most

869
00:43:09.039 --> 00:43:10.880
<v Speaker 3>of the code for me, because it's just a proof

870
00:43:10.920 --> 00:43:13.599
<v Speaker 3>of concept. I'm gonna throw it away. But once I'm

871
00:43:13.599 --> 00:43:16.559
<v Speaker 3>building the real solution and i'm gonna have tests, i'm

872
00:43:16.559 --> 00:43:18.599
<v Speaker 3>gonna have version control, and i'm gonna have all the

873
00:43:18.639 --> 00:43:22.639
<v Speaker 3>proper rigor of software engineering. Then I'm also going to

874
00:43:22.679 --> 00:43:24.760
<v Speaker 3>want to pull all those cross cutting concerns that I

875
00:43:24.840 --> 00:43:28.039
<v Speaker 3>know I'm going to need, right like validation and logging

876
00:43:28.039 --> 00:43:30.920
<v Speaker 3>and error handling, et cetera, And I'm gonna pull those

877
00:43:30.920 --> 00:43:33.239
<v Speaker 3>out into behavior so I only have to have them

878
00:43:33.239 --> 00:43:35.920
<v Speaker 3>in one place in the code from the very beginning,

879
00:43:35.920 --> 00:43:37.519
<v Speaker 3>because I don't want to have to write that code

880
00:43:37.559 --> 00:43:39.719
<v Speaker 3>over and over and over again on every single endpoint

881
00:43:39.760 --> 00:43:41.079
<v Speaker 3>or every single service.

882
00:43:41.079 --> 00:43:43.599
<v Speaker 2>And the obligation of even in the prototype to say,

883
00:43:43.679 --> 00:43:45.679
<v Speaker 2>let's just do this all in handlers in case we

884
00:43:45.719 --> 00:43:48.280
<v Speaker 2>need to go this way doesn't seem that high, like

885
00:43:48.400 --> 00:43:52.000
<v Speaker 2>you got to pick away anyway, right, I appreciate much

886
00:43:52.039 --> 00:43:54.159
<v Speaker 2>what you're saying here is like, this is not a

887
00:43:54.199 --> 00:43:58.079
<v Speaker 2>big ask early in a project, and then it does

888
00:43:58.159 --> 00:43:59.639
<v Speaker 2>open the door so much of other choices.

889
00:44:00.079 --> 00:44:01.400
<v Speaker 3>Yeah, I mean, the only thing that you have to

890
00:44:01.400 --> 00:44:05.320
<v Speaker 3>do differently to decide to go this route is that

891
00:44:05.440 --> 00:44:09.280
<v Speaker 3>wherever it is that the UI enters your application, instead

892
00:44:09.280 --> 00:44:13.320
<v Speaker 3>of injecting an eye whatever service and calling some bespoke

893
00:44:13.400 --> 00:44:15.800
<v Speaker 3>method on that service to do the work, assuming you're

894
00:44:15.840 --> 00:44:17.760
<v Speaker 3>not just doing it all inline in your UI, which

895
00:44:17.880 --> 00:44:21.960
<v Speaker 3>hopefully you're not for anything, you know, non trivial, instead

896
00:44:22.000 --> 00:44:25.519
<v Speaker 3>of that service, Instead, you're creating a command or a

897
00:44:25.559 --> 00:44:27.960
<v Speaker 3>message or a query or whatever, and then you're using

898
00:44:28.000 --> 00:44:31.599
<v Speaker 3>something to dispatch that command and that dispatch process, whether

899
00:44:31.599 --> 00:44:37.000
<v Speaker 3>that's Mediator, Jimmy Boguard's library or Wolverine or mass transit.

900
00:44:37.079 --> 00:44:39.320
<v Speaker 3>You know, there's a bunch of these different messaging libraries

901
00:44:39.320 --> 00:44:42.199
<v Speaker 3>that will do this for you. You know, that is

902
00:44:42.599 --> 00:44:46.039
<v Speaker 3>the change, that's the difference. And then from there you're

903
00:44:46.039 --> 00:44:48.519
<v Speaker 3>going to get that behavior pipeline and then you're going

904
00:44:48.599 --> 00:44:51.400
<v Speaker 3>to have some handler somewhere that handles that message. Yeah.

905
00:44:51.480 --> 00:44:55.119
<v Speaker 2>No, I appreciate that. It's it's compelling, it sounds wonderful.

906
00:44:55.360 --> 00:44:57.519
<v Speaker 1>Yeah, I've It's not the way I work at all,

907
00:44:57.519 --> 00:45:00.280
<v Speaker 1>but it does sound great, and I'd like to be

908
00:45:00.320 --> 00:45:01.880
<v Speaker 1>in the habit of writing code like that.

909
00:45:01.920 --> 00:45:03.960
<v Speaker 2>But I mean the big thing here is you tend

910
00:45:04.000 --> 00:45:07.719
<v Speaker 2>to walk on your own too, Carl. Where this approach

911
00:45:07.800 --> 00:45:09.159
<v Speaker 2>is very team friendly.

912
00:45:09.519 --> 00:45:14.079
<v Speaker 3>Yes, yeah, it is. Yeah, true, because you're not going

913
00:45:14.119 --> 00:45:16.280
<v Speaker 3>to have too many merge conflicts because everything comes down

914
00:45:16.320 --> 00:45:20.039
<v Speaker 3>to one handler, which literally has one method and it's

915
00:45:20.079 --> 00:45:23.320
<v Speaker 3>not really you know, it's not conducive to have three

916
00:45:23.360 --> 00:45:25.559
<v Speaker 3>different developers all touching that handler at the same time

917
00:45:25.599 --> 00:45:28.079
<v Speaker 3>to fix you know, three different bugs or whatever. So

918
00:45:28.639 --> 00:45:30.719
<v Speaker 3>most of the time you're going to be working on

919
00:45:30.800 --> 00:45:33.280
<v Speaker 3>separate pieces of the code based so your likelihood of

920
00:45:33.320 --> 00:45:34.599
<v Speaker 3>merge conflicts goes way down.

921
00:45:34.960 --> 00:45:37.320
<v Speaker 2>Yeah, this is you know a lot of architectural decisions

922
00:45:37.320 --> 00:45:39.320
<v Speaker 2>come down to the sort of Conway's law part of

923
00:45:40.199 --> 00:45:41.760
<v Speaker 2>the you know, this is going to look like the

924
00:45:41.760 --> 00:45:43.760
<v Speaker 2>team that built it, and as soon as there's you know,

925
00:45:44.360 --> 00:45:46.920
<v Speaker 2>I think His original statement was, if we have if

926
00:45:46.960 --> 00:45:48.920
<v Speaker 2>we're building a compiler and there's four teams working on it,

927
00:45:48.920 --> 00:45:50.079
<v Speaker 2>it'll be a four pass compiler.

928
00:45:50.079 --> 00:45:50.440
<v Speaker 3>That's right.

929
00:45:51.360 --> 00:45:53.800
<v Speaker 2>Funny that you bring up like mass transit and mediator

930
00:45:53.800 --> 00:45:55.639
<v Speaker 2>who heard you know, in the midst while we're recording

931
00:45:55.639 --> 00:45:57.960
<v Speaker 2>this of this whole controversy about going to from a

932
00:45:58.199 --> 00:46:02.360
<v Speaker 2>traditional open source, totally completely free model to a commercial

933
00:46:02.480 --> 00:46:06.000
<v Speaker 2>variant as well, because they ye are all working on sustainability.

934
00:46:06.360 --> 00:46:07.960
<v Speaker 3>Yeah, well, I mean there's no such thing as a

935
00:46:07.960 --> 00:46:13.639
<v Speaker 3>free lunch. And eventually these solo uh maintainer open source

936
00:46:13.679 --> 00:46:17.079
<v Speaker 3>projects that are you know, hugely popular and being used

937
00:46:17.119 --> 00:46:21.360
<v Speaker 3>by tons of fortune five hundred and for profit companies

938
00:46:21.440 --> 00:46:24.159
<v Speaker 3>for for nothing, which is which is a contract that

939
00:46:24.199 --> 00:46:27.199
<v Speaker 3>they make. Yeah, you know, sometimes they're going to get

940
00:46:27.199 --> 00:46:29.159
<v Speaker 3>burned out. I mean there's only so much free support

941
00:46:29.239 --> 00:46:31.880
<v Speaker 3>and maintenance and new updates and everything that a person

942
00:46:31.880 --> 00:46:32.920
<v Speaker 3>can do in their free.

943
00:46:32.679 --> 00:46:35.840
<v Speaker 2>Time and abuse you can take before.

944
00:46:35.800 --> 00:46:38.639
<v Speaker 3>Any abuse that they take. And I have a ton

945
00:46:38.639 --> 00:46:42.440
<v Speaker 3>of open source projects too, I get it. You can't

946
00:46:42.480 --> 00:46:45.360
<v Speaker 3>always prioritize that over you know, the stuff that puts

947
00:46:45.400 --> 00:46:48.400
<v Speaker 3>food on the table. And if you feel and I

948
00:46:48.440 --> 00:46:54.119
<v Speaker 3>know I feel a responsibility or or you know, something

949
00:46:54.119 --> 00:46:57.119
<v Speaker 3>to your audience, to your users, Like you know, new

950
00:46:57.199 --> 00:46:58.880
<v Speaker 3>version of dot net comes out, I want to have

951
00:46:58.920 --> 00:47:02.000
<v Speaker 3>this ready to go for folks that are leveraging my packages.

952
00:47:02.679 --> 00:47:04.760
<v Speaker 3>Some security flaw is found, I want to fix that

953
00:47:04.880 --> 00:47:06.920
<v Speaker 3>right away, because you know, that's it's got my name

954
00:47:06.960 --> 00:47:08.519
<v Speaker 3>on this thing. I want to make sure it's working.

955
00:47:09.679 --> 00:47:12.400
<v Speaker 3>But at the same time, I have paying customers, and

956
00:47:13.079 --> 00:47:15.039
<v Speaker 3>you know, I have more of an obligation to them

957
00:47:15.599 --> 00:47:18.000
<v Speaker 3>than the folks that are using my MIT license stuff

958
00:47:18.039 --> 00:47:18.719
<v Speaker 3>on GitHub for free.

959
00:47:18.760 --> 00:47:20.800
<v Speaker 1>You should listen to last week's show we did with

960
00:47:20.880 --> 00:47:25.679
<v Speaker 1>Rob mensching on He has a thing called open source

961
00:47:25.760 --> 00:47:30.400
<v Speaker 1>maintenance fee. Yeah, I've heard of that, which is yeah, yeah,

962
00:47:30.679 --> 00:47:31.800
<v Speaker 1>very very interesting.

963
00:47:32.039 --> 00:47:34.400
<v Speaker 3>Yeah, And there's been a lot of talk on Reddit

964
00:47:34.480 --> 00:47:37.840
<v Speaker 3>and all the thought leaders have chimed in on this.

965
00:47:38.400 --> 00:47:40.360
<v Speaker 3>As far as you know, folks wanting to get paid

966
00:47:40.360 --> 00:47:44.360
<v Speaker 3>for their work, I think most large organizations that have

967
00:47:44.440 --> 00:47:47.880
<v Speaker 3>been using and profiting from mass transit or mediator or

968
00:47:47.920 --> 00:47:51.280
<v Speaker 3>automapper or any of these tools, before they decide that

969
00:47:51.320 --> 00:47:52.679
<v Speaker 3>they want to just rip it out and find some

970
00:47:52.719 --> 00:47:54.960
<v Speaker 3>other free thing, they should think long and hard about.

971
00:47:55.239 --> 00:47:57.840
<v Speaker 3>You know, maybe it's worth you know, a thousand dollars

972
00:47:57.880 --> 00:47:59.960
<v Speaker 3>a year, right for as much value as it provides.

973
00:48:00.119 --> 00:48:02.400
<v Speaker 2>Yeah, but it almost certainly is.

974
00:48:02.719 --> 00:48:04.960
<v Speaker 3>And guess what how much work do you have to

975
00:48:05.000 --> 00:48:07.599
<v Speaker 3>do at that point? How much developer effort is that

976
00:48:07.639 --> 00:48:10.239
<v Speaker 3>going to take from you? You know? None? Right, you

977
00:48:10.519 --> 00:48:13.480
<v Speaker 3>write that check once. Maybe maybe it's a subscription thing,

978
00:48:13.519 --> 00:48:16.679
<v Speaker 3>but you can move on. All your code still works

979
00:48:16.840 --> 00:48:18.760
<v Speaker 3>and you're still going to get you know, the updates

980
00:48:18.760 --> 00:48:21.599
<v Speaker 3>and support that you've been getting. But now maybe it's

981
00:48:22.159 --> 00:48:24.159
<v Speaker 3>a better value proposition.

982
00:48:24.079 --> 00:48:26.280
<v Speaker 2>Or fork it and take care of it yourself, right, Like,

983
00:48:26.320 --> 00:48:28.000
<v Speaker 2>that's right, This is exactly the argument.

984
00:48:28.039 --> 00:48:30.440
<v Speaker 3>But I'm with you because because surely that will be

985
00:48:30.480 --> 00:48:31.159
<v Speaker 3>cheaper than that.

986
00:48:32.360 --> 00:48:34.199
<v Speaker 2>Without a doubt. Now, and I think the thing that

987
00:48:34.320 --> 00:48:36.559
<v Speaker 2>Rob hit on battle means you haven't listened last week's

988
00:48:36.559 --> 00:48:38.920
<v Speaker 2>show listened to it is how do we make the

989
00:48:39.000 --> 00:48:42.440
<v Speaker 2>path for the developer who's using the free tool to

990
00:48:42.599 --> 00:48:46.199
<v Speaker 2>convince leadership? We need to pay our share of this

991
00:48:46.719 --> 00:48:48.599
<v Speaker 2>and make that as easy as possible.

992
00:48:48.679 --> 00:48:51.280
<v Speaker 3>Well, here's the thing that I think is still crazy

993
00:48:51.599 --> 00:48:54.719
<v Speaker 3>is developers today, at least in the United States, almost

994
00:48:54.840 --> 00:48:58.239
<v Speaker 3>are all making six figure salaries for full time positions,

995
00:48:58.360 --> 00:49:01.960
<v Speaker 3>let's say, right at Facebooks, and Googles. They're making some

996
00:49:02.119 --> 00:49:06.679
<v Speaker 3>multiple of one hundred k probably, and yet how many

997
00:49:06.679 --> 00:49:10.480
<v Speaker 3>of them have the authority to spend one hundred dollars

998
00:49:10.519 --> 00:49:13.519
<v Speaker 3>a year on a tool that will make their application faster?

999
00:49:14.199 --> 00:49:18.159
<v Speaker 3>Almost none of them, right, for most organizations, none, and

1000
00:49:18.280 --> 00:49:21.039
<v Speaker 3>are terrified to go get it. Oh yeah, yeah, yeah,

1001
00:49:21.119 --> 00:49:23.159
<v Speaker 3>like the hoops you have to jump through to get

1002
00:49:23.199 --> 00:49:26.840
<v Speaker 3>authorization to purchase a component or a dev tool in

1003
00:49:26.920 --> 00:49:30.039
<v Speaker 3>many of these organizations, not even huge enterprises, but even

1004
00:49:30.079 --> 00:49:33.119
<v Speaker 3>just medium sized companies. Right, it might be director level

1005
00:49:33.199 --> 00:49:37.880
<v Speaker 3>to approve a five hundred dollars purchase and' that's just insane, right, Like,

1006
00:49:38.000 --> 00:49:42.480
<v Speaker 3>this is why companies are creating and maintaining their own

1007
00:49:42.599 --> 00:49:47.480
<v Speaker 3>messaging frameworks and email senders and everything else, sometimes not

1008
00:49:47.519 --> 00:49:51.320
<v Speaker 3>even knowing it, right, you know, like the director level

1009
00:49:51.360 --> 00:49:52.639
<v Speaker 3>has no idea that they're doing.

1010
00:49:52.480 --> 00:49:55.360
<v Speaker 2>It because the prospect of buying software is so terrifying.

1011
00:49:55.480 --> 00:49:58.360
<v Speaker 3>Yeah, because buying it is harder, right, So sure, if

1012
00:49:58.400 --> 00:50:00.280
<v Speaker 3>it's available on new getting it looks like it as

1013
00:50:00.360 --> 00:50:02.480
<v Speaker 3>you know, a bunch of downloads, then then they'll go

1014
00:50:02.559 --> 00:50:05.800
<v Speaker 3>that route and maybe unless they've been bitten by that

1015
00:50:05.840 --> 00:50:08.239
<v Speaker 3>in the past. Otherwise, you know, a lot of developers

1016
00:50:08.239 --> 00:50:11.280
<v Speaker 3>would rather say how hard could it be? And just

1017
00:50:11.320 --> 00:50:14.639
<v Speaker 3>code it up themselves and tell their boss that they're

1018
00:50:14.639 --> 00:50:16.519
<v Speaker 3>just working on issue one two three, you know, for

1019
00:50:16.559 --> 00:50:18.920
<v Speaker 3>the for the software, but they're not really working on that.

1020
00:50:18.920 --> 00:50:21.480
<v Speaker 3>They're working on the component that they need. Yeah, for

1021
00:50:21.719 --> 00:50:23.679
<v Speaker 3>issue one two three that they could have made hundreds

1022
00:50:23.719 --> 00:50:25.639
<v Speaker 3>for it have been done in an hour, but now

1023
00:50:25.639 --> 00:50:26.880
<v Speaker 3>they're going to spend a week on it.

1024
00:50:27.079 --> 00:50:30.159
<v Speaker 2>Yeah, and and forever, like it's always going to absorb

1025
00:50:30.239 --> 00:50:33.760
<v Speaker 2>everything some part of time from now on. Totally with you.

1026
00:50:34.119 --> 00:50:35.960
<v Speaker 2>I think we need to change the show name. I'm

1027
00:50:36.000 --> 00:50:38.599
<v Speaker 2>not used to RANTI Steve Smith, and that's one I

1028
00:50:38.679 --> 00:50:41.719
<v Speaker 2>like it. I'm enthusiastic he's back and he's pissed Steve Smith.

1029
00:50:41.800 --> 00:50:46.000
<v Speaker 2>Rants are awesome. Yeah, he's feisty. Normally he's our calm

1030
00:50:46.079 --> 00:50:49.119
<v Speaker 2>trainer guy who just delivers, you know, here's the right

1031
00:50:49.159 --> 00:50:51.079
<v Speaker 2>way to do things and so forth. That might get

1032
00:50:51.119 --> 00:50:55.360
<v Speaker 2>him some opinion today, and he's feisty. I always have opinions,

1033
00:50:55.880 --> 00:50:58.320
<v Speaker 2>it's true, it's true, and you deliver them eloquently. But yeah,

1034
00:50:58.360 --> 00:51:00.239
<v Speaker 2>you're a little reved up to day. I appreciate that

1035
00:51:00.280 --> 00:51:03.400
<v Speaker 2>because these are good thoughts. Absolutely, like you really get

1036
00:51:03.440 --> 00:51:06.880
<v Speaker 2>to the core of the thing, which is a good

1037
00:51:06.960 --> 00:51:11.039
<v Speaker 2>director of it, or that the lead tech person in

1038
00:51:11.039 --> 00:51:14.639
<v Speaker 2>this space should be the advocate for buy versus build,

1039
00:51:15.119 --> 00:51:18.079
<v Speaker 2>should be the advocate for a budget protection, and should

1040
00:51:18.119 --> 00:51:19.639
<v Speaker 2>be willing to go with those things like the fact

1041
00:51:19.679 --> 00:51:21.920
<v Speaker 2>that we've made it as difficult as it is a problematic,

1042
00:51:22.000 --> 00:51:24.519
<v Speaker 2>and part of the side effect of that is this

1043
00:51:24.599 --> 00:51:25.679
<v Speaker 2>crisis in open source.

1044
00:51:25.960 --> 00:51:27.800
<v Speaker 1>On that happy note, are we ready wrap up? Or

1045
00:51:27.840 --> 00:51:29.159
<v Speaker 1>you got something else you want to rant about?

1046
00:51:29.199 --> 00:51:30.440
<v Speaker 2>Steve? Did we miss something here?

1047
00:51:30.480 --> 00:51:32.920
<v Speaker 3>Steve? Well, I don't think we talked quite as much

1048
00:51:32.920 --> 00:51:35.199
<v Speaker 3>about different types of architecture as I had thought, But

1049
00:51:35.239 --> 00:51:36.800
<v Speaker 3>that is totally fine because I think we hit a

1050
00:51:36.840 --> 00:51:37.679
<v Speaker 3>lot of cool topics.

1051
00:51:37.760 --> 00:51:40.159
<v Speaker 2>Now, it's fine. I like this. This bounced back and

1052
00:51:40.159 --> 00:51:42.599
<v Speaker 2>forth between the coding side and the architecture side is

1053
00:51:42.599 --> 00:51:44.239
<v Speaker 2>a debate we don't have often enough, so I'm glad

1054
00:51:44.239 --> 00:51:46.559
<v Speaker 2>we did it, just because I think both those elements

1055
00:51:46.599 --> 00:51:48.719
<v Speaker 2>are important and there is a balance there. Yeah.

1056
00:51:49.239 --> 00:51:53.119
<v Speaker 1>Very good, Well, Steve. Thanks, It's always pleasure talking to you,

1057
00:51:53.199 --> 00:51:55.800
<v Speaker 1>and I'm sure the next time will be just as pleasurable.

1058
00:51:55.920 --> 00:51:57.840
<v Speaker 3>Thank you, awesome, Always a good time. Thanks guys.

1059
00:51:57.880 --> 00:52:02.719
<v Speaker 2>Number twenty twenty I think you get the subway sandwich.

1060
00:52:04.719 --> 00:52:06.559
<v Speaker 3>You got to punch the card and I get a

1061
00:52:06.559 --> 00:52:09.000
<v Speaker 3>free dot net Rocks episode.

1062
00:52:12.079 --> 00:52:15.280
<v Speaker 1>Thanks again, Stave, and we'll talk to you next time

1063
00:52:15.360 --> 00:52:39.159
<v Speaker 1>on dot net rocks. Dot net Rocks is brought to

1064
00:52:39.199 --> 00:52:42.960
<v Speaker 1>you by Franklin's Net and produced by Pop Studios, a

1065
00:52:43.079 --> 00:52:47.480
<v Speaker 1>full service audio, video and post production facility located physically

1066
00:52:47.519 --> 00:52:50.280
<v Speaker 1>in New London, Connecticut, and of course in the cloud

1067
00:52:50.920 --> 00:52:55.159
<v Speaker 1>online at pwop dot com. Visit our website at d

1068
00:52:55.239 --> 00:52:57.239
<v Speaker 1>O T N E t R O c k s

1069
00:52:57.320 --> 00:53:01.960
<v Speaker 1>dot com for RSS feeds, down modes, mobile apps, comments,

1070
00:53:02.280 --> 00:53:04.840
<v Speaker 1>and access to the full archives going back to show

1071
00:53:04.880 --> 00:53:07.519
<v Speaker 1>number one, recorded in September two.

1072
00:53:07.360 --> 00:53:07.960
<v Speaker 3>Thousand and two.

1073
00:53:08.599 --> 00:53:10.920
<v Speaker 1>And make sure you check out our sponsors. They keep

1074
00:53:11.000 --> 00:53:14.159
<v Speaker 1>us in business. Now go write some code, See you

1075
00:53:14.199 --> 00:53:27.679
<v Speaker 1>next time. You got JAD Middle Vans
