1
00:00:01,080 --> 00:00:03,000
Speaker 1: How'd you like to listen to dot net rocks with

2
00:00:03,040 --> 00:00:07,879
no ads? Easy? Become a patron for just five dollars

3
00:00:07,919 --> 00:00:10,800
a month. You get access to a private RSS feed

4
00:00:10,839 --> 00:00:14,240
where all the shows have no ads. Twenty dollars a month,

5
00:00:14,279 --> 00:00:16,879
we'll get you that and a special dot net rocks

6
00:00:16,960 --> 00:00:21,000
patron mug. Sign up now at Patreon dot dot NetRocks

7
00:00:21,120 --> 00:00:37,479
dot com. Hey guess what, it's dot need rocks. I'm

8
00:00:37,600 --> 00:00:38,880
Carl Franklin.

9
00:00:38,479 --> 00:00:39,399
Speaker 2: And I'm Richard Gamble.

10
00:00:39,560 --> 00:00:42,159
Speaker 1: Steve Smith is with us. We'll be joining him in

11
00:00:42,200 --> 00:00:46,000
a minute, but first, you got doggy duty today, Richard.

12
00:00:46,000 --> 00:00:49,759
Speaker 2: Eh, yeah, yeah, you know, just timing. I'm about to

13
00:00:49,759 --> 00:00:55,280
go away for several weeks to Australia and we and she,

14
00:00:55,359 --> 00:00:57,880
who must be obeyed, wants to see the granddaughter, so

15
00:00:58,079 --> 00:01:00,640
she's off for the day, which means I'm taking care

16
00:01:00,679 --> 00:01:03,759
of the puppy, although I have run the puppy out

17
00:01:03,799 --> 00:01:05,959
and she is crashed out in the in the kennel

18
00:01:05,959 --> 00:01:08,560
at the moment. So hopefully no interruptions during recording. Well,

19
00:01:08,760 --> 00:01:11,280
not that anybody will hear them, because editing.

20
00:01:11,239 --> 00:01:14,239
Speaker 1: He well, or if it's cute, we leave it in.

21
00:01:16,519 --> 00:01:18,560
Speaker 2: There's nothing cute about p on the floor.

22
00:01:18,799 --> 00:01:22,519
Speaker 1: No, okay, all right, well let's get started with better

23
00:01:22,519 --> 00:01:23,120
no framework.

24
00:01:23,159 --> 00:01:32,159
Speaker 2: Awesome, man, what do you got?

25
00:01:32,280 --> 00:01:36,159
Speaker 1: This came from Simon Cropp, our good friend, in the

26
00:01:36,439 --> 00:01:37,640
app Phoenix Slack channel.

27
00:01:37,680 --> 00:01:38,480
Speaker 2: What are the appears?

28
00:01:38,560 --> 00:01:43,200
Speaker 1: Yeah, and this is a learn article at Microsoft. Wow,

29
00:01:43,480 --> 00:01:45,719
Jason serializer options.

30
00:01:45,879 --> 00:01:49,159
Speaker 2: Wait wait wait wait wait are you talking about framework stuff? Yes,

31
00:01:49,599 --> 00:01:54,959
on a better no framework. Absolutely, I am shocked. It's

32
00:01:55,000 --> 00:01:56,719
been a while. Huh, it's been a while.

33
00:01:58,000 --> 00:02:03,799
Speaker 1: So this is Jason's serializers dot respect nullible annotations.

34
00:02:04,040 --> 00:02:04,640
Speaker 2: Oh my god.

35
00:02:04,920 --> 00:02:08,280
Speaker 1: So use that in your serializer settings. Turn it, set

36
00:02:08,280 --> 00:02:09,840
it to true, and it helps find bugs when the

37
00:02:09,879 --> 00:02:14,599
nullibility annotations in dot net serialization contracts don't match what's

38
00:02:14,680 --> 00:02:17,800
on the wire, as in, we will get a failure

39
00:02:18,319 --> 00:02:22,719
during serialization and de serialization instead of a null refight

40
00:02:22,840 --> 00:02:26,280
after serialization or de serialization.

41
00:02:25,759 --> 00:02:28,360
Speaker 2: Which is better in every way, right, so much better.

42
00:02:28,479 --> 00:02:31,960
Oh my goodness, that's just the longest name ever. Except

43
00:02:32,000 --> 00:02:35,639
that is exactly what you want, thank goodness for till

44
00:02:35,719 --> 00:02:36,919
it says.

45
00:02:36,599 --> 00:02:41,240
Speaker 1: Yeah, And it doesn't look like it's true by default,

46
00:02:41,319 --> 00:02:44,319
but it says in the doc it is recommended that

47
00:02:44,439 --> 00:02:48,560
new applications always set this property to true, right, but

48
00:02:48,680 --> 00:02:52,039
it's not true by default in combination with a closely

49
00:02:52,120 --> 00:02:55,360
related respect required constructor parameters property.

50
00:02:55,439 --> 00:02:55,680
Speaker 3: Nice.

51
00:02:55,800 --> 00:02:58,560
Speaker 2: Look, it's a new option explicit in twenty twenty five.

52
00:02:58,719 --> 00:03:00,439
What's that about.

53
00:03:02,759 --> 00:03:04,719
Speaker 1: Respect, my authority.

54
00:03:04,840 --> 00:03:11,280
Speaker 2: Respect my nobilitybility. No, that totally makes sense. I want

55
00:03:11,280 --> 00:03:13,159
this on all the time. You said I have to

56
00:03:13,199 --> 00:03:13,680
remember it.

57
00:03:14,120 --> 00:03:16,479
Speaker 1: I am sad that I have to remember it too, but.

58
00:03:16,479 --> 00:03:19,080
Speaker 2: Have also you know what, They're also got an app

59
00:03:19,120 --> 00:03:21,639
or two out there that jump through great hoops to

60
00:03:21,719 --> 00:03:25,560
deal with nulls when I didn't have this capability and

61
00:03:25,960 --> 00:03:26,879
now I don't want to fix them.

62
00:03:27,000 --> 00:03:29,560
Speaker 1: Yeah, it's a noble world. We're just living in it.

63
00:03:30,000 --> 00:03:35,159
We're just trying to ever. Oh man, that's great. So

64
00:03:35,199 --> 00:03:36,280
who's talking to us today?

65
00:03:36,360 --> 00:03:39,520
Speaker 2: Richard Campbell grab to comment off of a show nineteen

66
00:03:39,639 --> 00:03:41,560
thirty nine, which we did back in February with our

67
00:03:41,560 --> 00:03:43,719
friend Jerry M. Miller talking a bit about vertical slice

68
00:03:43,759 --> 00:03:47,039
architecture No and hanging with Steve Smith means we're probably

69
00:03:47,039 --> 00:03:48,599
going to go down the architecture pop. There's a bunch

70
00:03:48,599 --> 00:03:50,319
of good comments on that show, by the way, a

71
00:03:50,360 --> 00:03:52,439
lot of them talking about the bus factor, as in

72
00:03:52,479 --> 00:03:54,159
what happens when your developer gets hit by a bus.

73
00:03:54,199 --> 00:03:56,159
But I'm not going to go there, right, I'm going

74
00:03:56,240 --> 00:04:00,400
to talk about the comment from an NDDCC, but let's

75
00:04:00,400 --> 00:04:04,319
just call him ND Regarding Richard's concern about code duplication

76
00:04:04,360 --> 00:04:07,759
in the vertical slice, Yeah, in my opinion, preemptively preventing

77
00:04:07,800 --> 00:04:12,759
cod duplication is prevented premature optimization. I thought about this

78
00:04:12,800 --> 00:04:16,199
one for a while, and I'm like, you know, okay, yeah, fine,

79
00:04:17,120 --> 00:04:20,079
And as the saying goes, with all premature optimization, it

80
00:04:20,160 --> 00:04:20,959
is the root of all.

81
00:04:20,839 --> 00:04:22,360
Speaker 1: Evil if you don't need it.

82
00:04:22,240 --> 00:04:24,959
Speaker 2: And then goes on to say, also with vertical slice

83
00:04:24,959 --> 00:04:27,759
and functional style, who knew that transaction script was gaining

84
00:04:27,759 --> 00:04:31,720
popularity over the main model? Like what goes around comes

85
00:04:31,759 --> 00:04:34,680
around in d right, like just writing the procedures for

86
00:04:34,759 --> 00:04:37,639
the things we need also hip, But I think part

87
00:04:37,680 --> 00:04:40,160
of that is because our tooling's gotten so better to refractor.

88
00:04:40,199 --> 00:04:42,160
Like even the code duplication part, I'm willing to give

89
00:04:42,199 --> 00:04:45,600
on because it's just not that hard to day to recognize, Hey,

90
00:04:45,600 --> 00:04:47,639
this is duplicated code in a few spots, and maybe

91
00:04:47,680 --> 00:04:50,439
I do need to optimize it now. But he finishes

92
00:04:50,519 --> 00:04:53,040
up by saying, simplicity over chasing dependencies and trying to

93
00:04:53,040 --> 00:04:55,959
cramb it, all of it, all of it in your head. Legit.

94
00:04:56,279 --> 00:04:59,120
Keep it as simple as you need to, but change

95
00:04:59,120 --> 00:05:00,879
it when you have to. Boy, that seems like a

96
00:05:00,920 --> 00:05:03,040
setup for a show. I think it's I think I

97
00:05:03,079 --> 00:05:06,240
can Steve see Steve's wheels durning right now.

98
00:05:06,480 --> 00:05:07,680
Speaker 1: I thought I smelled smoke.

99
00:05:08,000 --> 00:05:10,519
Speaker 2: There you go, so Indy, thank you so much for

100
00:05:10,560 --> 00:05:12,160
your commented. A copy of music Go Buy is on

101
00:05:12,199 --> 00:05:13,439
its way to you. And if you'd like a copy

102
00:05:13,439 --> 00:05:15,199
of music code I read a comment on the website

103
00:05:15,240 --> 00:05:17,079
at dot NetRocks dot com or on the facebooks. We

104
00:05:17,079 --> 00:05:19,160
publish every show there, and if you comment there and

105
00:05:19,160 --> 00:05:20,439
e reading the show, we'll send you a copy of

106
00:05:20,480 --> 00:05:21,040
music Go Buy.

107
00:05:21,160 --> 00:05:23,000
Speaker 1: And you can get music to code by any time

108
00:05:23,040 --> 00:05:25,439
you want by going to music too code buy dot net.

109
00:05:25,600 --> 00:05:31,879
That's a URL trick, so don't put an hdtps on it.

110
00:05:33,879 --> 00:05:34,839
Speaker 2: Nineteen forty nine.

111
00:05:34,959 --> 00:05:36,560
Speaker 1: Nineteen forty nine, let's talk about it.

112
00:05:36,600 --> 00:05:36,680
Speaker 3: So.

113
00:05:36,800 --> 00:05:40,480
Speaker 1: Major events included the establishment of the People's Republic of China.

114
00:05:40,680 --> 00:05:43,439
Speaker 2: Yeah, at the end of the Cino War, Yeah.

115
00:05:43,800 --> 00:05:46,680
Speaker 1: Signing of the North Atlantic Treaty in NATO, and the

116
00:05:46,879 --> 00:05:50,519
Soviet Union's first atomic bomb tests, all contributing to the

117
00:05:50,680 --> 00:05:52,120
escalation of the Cold War.

118
00:05:52,399 --> 00:05:52,600
Speaker 3: Ah.

119
00:05:52,720 --> 00:05:58,720
Speaker 2: Yes, Klaus Fuchs leaking, you know, part of the Manhattan Project.

120
00:05:58,959 --> 00:06:02,360
You know, was a phenomenal physicist, did all these great things.

121
00:06:02,399 --> 00:06:04,959
Only remember for one thing, leaking the information on the

122
00:06:04,959 --> 00:06:08,160
plutonium bomb to the Soviet Yeah.

123
00:06:08,240 --> 00:06:14,560
Speaker 1: Well, anyway, the Berlin Airlift concluded. The first televised presidential

124
00:06:14,600 --> 00:06:19,199
inauguration took place here in the US. We experienced a

125
00:06:19,319 --> 00:06:23,839
recession in nineteen forty nine, with the unemployment rate reaching

126
00:06:23,839 --> 00:06:28,720
a peak of seven point nine percent. Also, nineteen eighty four,

127
00:06:29,199 --> 00:06:33,879
Georgia Orwell's dystopian novel was published. And anything you want

128
00:06:33,879 --> 00:06:34,480
to add to that.

129
00:06:35,040 --> 00:06:39,759
Speaker 2: Richard IBM ships their first punch card computer. Wow, the

130
00:06:39,800 --> 00:06:44,079
IBMCPC so along with punch card controllers and all this

131
00:06:44,160 --> 00:06:46,439
other good stuff. It was a big machine. It's called

132
00:06:46,439 --> 00:06:50,560
the IBM, Well called the CBC, but it was actually

133
00:06:50,639 --> 00:06:51,319
the sixth.

134
00:06:51,800 --> 00:06:55,600
Speaker 1: Or I love talking to boomers about programming with punch cards.

135
00:06:56,040 --> 00:06:57,480
We had to use punch kin.

136
00:06:57,560 --> 00:07:03,360
Speaker 2: You had a stack like this, yep, and Heaven help

137
00:07:03,399 --> 00:07:06,279
you if you drop it. Yeah, you sort all those

138
00:07:06,319 --> 00:07:09,240
cards out again, like, oh, you had a bug, you know,

139
00:07:09,399 --> 00:07:11,920
but it was you know, we also talked about the

140
00:07:11,920 --> 00:07:14,000
Manchester Baby, and of course of mind sition mark one

141
00:07:14,040 --> 00:07:19,040
comes out around there, which was the stored programming model

142
00:07:19,120 --> 00:07:21,279
as opposed to the punch card program model, where literally

143
00:07:21,439 --> 00:07:24,199
just reading the code and executing it, you know, essentially

144
00:07:24,199 --> 00:07:26,560
the storage is in the card. So these were the

145
00:07:26,600 --> 00:07:29,480
competing some of the competing designs before we get to

146
00:07:29,519 --> 00:07:32,519
a place where we actually have dense storage, because we

147
00:07:32,560 --> 00:07:34,920
still don't, every bit of memory is super important.

148
00:07:35,000 --> 00:07:37,480
Speaker 1: I have never seen punch cards, but I would hope

149
00:07:37,519 --> 00:07:40,079
that they were numbered sequentially.

150
00:07:40,480 --> 00:07:42,439
Speaker 2: They are, but you have to number them. And they

151
00:07:42,439 --> 00:07:45,040
also say do not fold, spindle or mutilate, right.

152
00:07:45,120 --> 00:07:48,759
Speaker 1: I remember that. I actually do remember taking tests in

153
00:07:49,360 --> 00:07:52,600
grammar school that were not so much punch cards, but

154
00:07:52,839 --> 00:07:55,560
they were you know, filling the ovals, right, and that

155
00:07:55,680 --> 00:07:58,279
was definitely do not fold, spindle or mutilate.

156
00:07:58,000 --> 00:08:01,000
Speaker 2: You know, fold spindle or mutilate. One more science piece.

157
00:08:01,040 --> 00:08:04,120
Will of Libby publishes his paper in forty nine on

158
00:08:04,360 --> 00:08:08,600
radio carbon dating WOW, which is the method of measuring

159
00:08:09,240 --> 00:08:12,639
the age of typically biological things that have carbon fourteen.

160
00:08:12,720 --> 00:08:16,839
While while a plant is living, it actually maintains a

161
00:08:16,839 --> 00:08:18,639
certain level of carbon fourteen, and at the moment that

162
00:08:18,680 --> 00:08:20,759
plant dies because it gets eaten or anything like that,

163
00:08:20,759 --> 00:08:23,279
that carbon and fourteen starts to decay away.

164
00:08:23,040 --> 00:08:23,959
Speaker 1: At a constant rate.

165
00:08:24,040 --> 00:08:26,759
Speaker 2: And you can measure the ratio of twelve to fourteen

166
00:08:27,360 --> 00:08:31,600
to praiirly accurately estimated an age up to about fifty

167
00:08:31,600 --> 00:08:32,080
thousand year.

168
00:08:32,120 --> 00:08:32,799
Speaker 1: Yeah, very good.

169
00:08:32,919 --> 00:08:34,799
Speaker 2: He won the Nobel Prize in nineteen sixty four.

170
00:08:34,840 --> 00:08:36,879
Speaker 1: It's very cool. Yeah, all right, Well with that, let's

171
00:08:36,879 --> 00:08:39,639
bring Steve on again for the how many time.

172
00:08:39,600 --> 00:08:41,879
Speaker 2: I got to count because it's a lot.

173
00:08:42,159 --> 00:08:44,600
Speaker 3: It's close to twenty. I think it's like nineteen or something.

174
00:08:44,600 --> 00:08:45,759
Speaker 2: I think you think you're up there?

175
00:08:45,840 --> 00:08:51,080
Speaker 1: Yeah, wow, I got them all here, one, two, three, seventy.

176
00:08:51,919 --> 00:08:54,120
Speaker 2: Yeah, if you include the panels, it's I think this

177
00:08:54,200 --> 00:08:54,960
is number nineteen.

178
00:08:55,279 --> 00:08:56,240
Speaker 1: Yeah, she's a.

179
00:08:56,240 --> 00:08:59,120
Speaker 2: Though, going back to two thousand and seven, so you know,

180
00:09:00,080 --> 00:09:00,879
twenty years worth.

181
00:09:00,919 --> 00:09:05,159
Speaker 1: Wow. Well, let me read his bio here. Our Dallas

182
00:09:05,360 --> 00:09:09,679
is his handle Everywhere is an entrepreneur and software developer

183
00:09:09,679 --> 00:09:13,320
with a passion for building quality software as effectively as possible.

184
00:09:13,879 --> 00:09:17,519
He's published several courses on plural site in dome Train

185
00:09:18,240 --> 00:09:22,840
covering DDD solid design patterns and software architecture. He's a

186
00:09:22,879 --> 00:09:28,639
microsoftsp Net MVP and insider, frequent speaker developer conferences, an author,

187
00:09:28,720 --> 00:09:33,200
and a trainer. Steve works with companies through his company,

188
00:09:33,279 --> 00:09:35,919
Nimble Pros, and they help teams who want to avoid

189
00:09:35,960 --> 00:09:39,960
the trap of technical debt to deliver better software faster.

190
00:09:40,919 --> 00:09:43,559
Our Dallas and his team have been described by clients

191
00:09:43,600 --> 00:09:48,159
as a force multiplier amplifying the value of existing development teams.

192
00:09:48,679 --> 00:09:52,720
His client list includes Microsoft Quick and Loans, WWF and

193
00:09:52,840 --> 00:09:57,279
many other satisfied customers. Now is that the World Wildlife

194
00:09:57,279 --> 00:10:01,879
Fund or the wrestling It's the WWF. Okay, the World

195
00:10:01,919 --> 00:10:02,679
Wildlife Fund.

196
00:10:02,840 --> 00:10:04,879
Speaker 2: I think Worldwidelife Fund won that one, and now the

197
00:10:04,919 --> 00:10:07,159
wrestling guys are wwe Yeah.

198
00:10:07,240 --> 00:10:15,159
Speaker 3: The Windows Workflow Framework also lost that. Our foundation sorry worklow.

199
00:10:14,879 --> 00:10:17,480
Speaker 2: Foundation workflow floudation. Yeah, you don't want to you don't

200
00:10:17,480 --> 00:10:19,200
want to dip into that fight. You're not even close.

201
00:10:21,039 --> 00:10:22,559
Speaker 1: So what's up? What have you been doing?

202
00:10:23,200 --> 00:10:27,039
Speaker 3: Just still working on helping clients write better code. A

203
00:10:27,039 --> 00:10:29,879
lot of a lot of architecture stuff these days. Working

204
00:10:29,919 --> 00:10:32,279
with clients have legacy code they're trying to bring forward

205
00:10:32,360 --> 00:10:36,679
from legacy MVC, some even web forms, but seeing less

206
00:10:36,720 --> 00:10:39,080
of that these days most folks are either in the

207
00:10:39,080 --> 00:10:40,759
cloud or still trying to get to the cloud and

208
00:10:40,840 --> 00:10:44,159
using that effectively. And that's a lot of who our

209
00:10:44,200 --> 00:10:46,679
clients are and who we're helping. Starting to see some

210
00:10:46,720 --> 00:10:50,519
more greenfield application requests too, and that that's been fun,

211
00:10:50,600 --> 00:10:53,879
so you know, it's keeping us busy.

212
00:10:54,919 --> 00:10:58,519
Speaker 2: Do you buy my conversation with ND on that comment,

213
00:10:58,559 --> 00:11:01,559
basically saying, hey, no, I totally get it that you

214
00:11:01,559 --> 00:11:04,159
can swing back towards that sort of transactional mindset to

215
00:11:04,200 --> 00:11:06,679
build pieces of an app, don't you don't you know,

216
00:11:07,519 --> 00:11:11,200
definitely can overplan a domain model here, like getting tow

217
00:11:11,240 --> 00:11:13,759
functionals useful. At some point you're going to end up

218
00:11:13,759 --> 00:11:16,159
with a bunch of code you may want to consolidate

219
00:11:16,200 --> 00:11:17,200
into a domain model.

220
00:11:17,360 --> 00:11:20,440
Speaker 3: I think the key point there that I would drill

221
00:11:20,480 --> 00:11:24,200
into isn't so much domain model versus transactional script as

222
00:11:24,679 --> 00:11:28,639
don't repeat yourself or duplication is fine, because I think

223
00:11:28,679 --> 00:11:32,200
that's that's a balance, right, And most developers have heard

224
00:11:32,639 --> 00:11:35,559
don't repeat yourself or once and only once you know

225
00:11:35,559 --> 00:11:39,759
the dry principle, and they don't necessarily also realize that

226
00:11:39,879 --> 00:11:44,840
every time you eliminate duplication, you introduce coupling, sure, and

227
00:11:44,919 --> 00:11:48,039
so you should be careful of that. I was reminded

228
00:11:48,080 --> 00:11:51,120
of a book that I contributed to along with the

229
00:11:51,159 --> 00:11:53,360
whole bunch of other authors called ninety seven Things Every

230
00:11:53,360 --> 00:11:56,360
Programmer Should Know from I don't know, ten years ago.

231
00:11:57,159 --> 00:11:58,440
Speaker 2: I love that it's ninety seven.

232
00:11:58,799 --> 00:12:01,240
Speaker 3: Yeah, there were a few of that series of ninety

233
00:12:01,240 --> 00:12:03,399
seven things books, right, But Kevilyn Henny put this one

234
00:12:03,399 --> 00:12:07,759
together and I contributed one thing, which was don't repeat yourself.

235
00:12:08,480 --> 00:12:11,240
And in the same book, Udi de Haan whom you

236
00:12:11,240 --> 00:12:15,919
guys know, also submitted one called Beware the Share and

237
00:12:16,240 --> 00:12:18,919
had a little, you know, cautionary tale about what happens

238
00:12:18,960 --> 00:12:24,159
if you just eliminate duplication wholeheartedly and without understanding the context, right,

239
00:12:24,200 --> 00:12:25,960
and some of the problems you get there. So like

240
00:12:26,240 --> 00:12:29,320
in the same book there there's both both sides of

241
00:12:29,360 --> 00:12:32,320
the argument of why should you or shouldn't you repeat

242
00:12:32,320 --> 00:12:32,720
your code?

243
00:12:32,799 --> 00:12:32,960
Speaker 2: Right?

244
00:12:33,039 --> 00:12:35,919
Speaker 1: Yeah, you know, And I always if I was going

245
00:12:35,960 --> 00:12:37,559
to put one thing in that book, I would say,

246
00:12:37,919 --> 00:12:43,519
consider having the lowest ccf ever that you can possibly have,

247
00:12:43,559 --> 00:12:47,120
that is commented code factor. How long do you keep

248
00:12:47,159 --> 00:12:51,720
commented code in your code base before you should just

249
00:12:51,919 --> 00:12:55,919
remove it because you commented it, because probably you replaced

250
00:12:55,919 --> 00:12:59,639
it with something that something works, but you keep the

251
00:12:59,639 --> 00:13:01,120
comment did code in there.

252
00:13:01,639 --> 00:13:03,480
Speaker 3: You're saying, you're saying you want that to be as

253
00:13:03,519 --> 00:13:05,159
long as possible or as short as possible.

254
00:13:05,200 --> 00:13:07,759
Speaker 1: No, no, no, the factor as low as possible. In other words,

255
00:13:08,279 --> 00:13:11,799
don't litter. You know, once you've got the other code working,

256
00:13:11,960 --> 00:13:14,559
just get it, get it out. We have you know,

257
00:13:14,720 --> 00:13:16,519
we have version control for it. If you want to

258
00:13:16,559 --> 00:13:17,440
go back and see.

259
00:13:17,240 --> 00:13:18,279
Speaker 3: It, we have version control.

260
00:13:18,279 --> 00:13:19,600
Speaker 1: That's right, Yeah, just get it out.

261
00:13:19,679 --> 00:13:24,159
Speaker 3: Yeah. So on the duplication thing, like, you definitely can

262
00:13:24,679 --> 00:13:27,879
use duplication. Let's say you're doing vertical slice architecture and

263
00:13:27,919 --> 00:13:31,200
you want each slice to be independent and not have

264
00:13:31,399 --> 00:13:34,360
a lot of shared logic in between them, so that

265
00:13:34,480 --> 00:13:37,639
you don't accidentally break slice A while you're working on

266
00:13:37,720 --> 00:13:40,600
slice B and you change that bit of commonality and

267
00:13:41,080 --> 00:13:43,480
you know it breaks the other one. And so by

268
00:13:43,519 --> 00:13:46,360
duplicating it, you know, yay, they're independent from one another.

269
00:13:46,399 --> 00:13:49,000
You can change them independently and they don't impact one another.

270
00:13:49,960 --> 00:13:52,559
But that's a trade off, and it depends, and everything

271
00:13:52,639 --> 00:13:55,600
has a trade off, and architecture and so the trade

272
00:13:55,600 --> 00:13:57,080
off that you're making is that, well, what if I

273
00:13:57,120 --> 00:14:00,200
really do need to change that everywhere? Right? You know,

274
00:14:00,240 --> 00:14:02,200
what if there really is just one rule for how

275
00:14:02,279 --> 00:14:05,320
we want to do this for this system, for this application,

276
00:14:05,440 --> 00:14:08,159
for our business. Uh And and now I've got to

277
00:14:08,159 --> 00:14:11,440
make sure that if that that that rule changes that

278
00:14:11,559 --> 00:14:13,879
I have to go and touch everywhere that I've made

279
00:14:13,879 --> 00:14:16,080
that duplication and fix it everywhere.

280
00:14:16,279 --> 00:14:19,240
Speaker 2: Well, and when you break A because you modified for B,

281
00:14:19,679 --> 00:14:24,000
then you fix it by abstracting that shared method a

282
00:14:24,039 --> 00:14:28,200
little bit more, which makes it less clear for both users. Yes, yes,

283
00:14:28,440 --> 00:14:31,320
of it, you know, like it's it's this is iteration

284
00:14:31,399 --> 00:14:33,720
you get into. It's like maybe we should have split these.

285
00:14:33,919 --> 00:14:36,080
Speaker 3: Right, yeah, you have you have to be care and

286
00:14:36,120 --> 00:14:38,559
this is you know, fundamental software engineering, not even so

287
00:14:38,639 --> 00:14:42,000
much architecture is like code complete, you know level. How

288
00:14:42,000 --> 00:14:44,799
do you design a function? Right? If you have some

289
00:14:44,919 --> 00:14:47,320
common code and you and you extract it into a function,

290
00:14:47,679 --> 00:14:50,120
and let's say it's on you know, two different pages

291
00:14:50,200 --> 00:14:52,639
or API end points or whatever, and then later on,

292
00:14:53,120 --> 00:14:56,120
you know, the first one needs a little bit more, right, like, well,

293
00:14:56,159 --> 00:14:58,480
in this case, we need one more field, right, So

294
00:14:58,679 --> 00:15:00,279
what do you do? Well, you just pass in a

295
00:15:00,399 --> 00:15:03,799
variable that says include extra data a bullion, and then

296
00:15:03,840 --> 00:15:05,440
you go into the function and you add an if

297
00:15:05,519 --> 00:15:07,639
check and say, well, if this bullion, then include the

298
00:15:07,679 --> 00:15:11,080
extra stuff that that one needs. Right, And that persists

299
00:15:11,080 --> 00:15:13,799
and iterates a few times, and now that shared method

300
00:15:13,879 --> 00:15:16,159
is just a huge mess with all kinds of logic

301
00:15:16,200 --> 00:15:18,919
in it for trying to be everything for everyone, when

302
00:15:19,120 --> 00:15:21,720
in that type of scenario, there are a host of

303
00:15:21,759 --> 00:15:24,559
other ways you could have attacked that problem that wouldn't

304
00:15:24,559 --> 00:15:27,480
have resulted in that huge amount of complexity and dependency

305
00:15:27,519 --> 00:15:30,080
on that one shared function that you pulled out because

306
00:15:30,279 --> 00:15:31,000
duplication was.

307
00:15:31,000 --> 00:15:33,240
Speaker 2: Evil, right, m It's a great trap.

308
00:15:33,639 --> 00:15:36,679
Speaker 3: Yeah, And I mean refactoring is just a skill that

309
00:15:36,720 --> 00:15:39,759
we have to use constantly. I think in our profession

310
00:15:41,080 --> 00:15:43,080
an ideal you have tests to ensure you're not breaking

311
00:15:43,120 --> 00:15:46,000
things while you're refactoring. But you know, you should be

312
00:15:46,039 --> 00:15:49,960
prepared to be flexible, and you know, whatever decisions you

313
00:15:50,000 --> 00:15:52,120
made last week or last month or last year about

314
00:15:52,440 --> 00:15:55,480
what made sense, you know, be prepared to revisit those

315
00:15:55,559 --> 00:15:57,399
if you see that they no longer apply, they no

316
00:15:57,480 --> 00:15:59,919
longer make sense. And you know, in this case that thing,

317
00:16:00,120 --> 00:16:02,080
you extract it out, maybe it's time to inline it

318
00:16:02,120 --> 00:16:05,559
and you know, duplicate it again in this case, you know,

319
00:16:05,600 --> 00:16:06,679
because things have changed.

320
00:16:07,039 --> 00:16:11,000
Speaker 2: Do we feel like the new tooling is getting and

321
00:16:11,039 --> 00:16:13,879
I'm thinking about the co pilots are going to help

322
00:16:13,960 --> 00:16:17,200
us with this, like I've yet to see it produce

323
00:16:17,240 --> 00:16:19,159
something like, hey, do you know this code is effectively

324
00:16:19,200 --> 00:16:22,840
duplicated a junior spatules. I don't think it's there yet.

325
00:16:22,919 --> 00:16:27,320
Speaker 3: I haven't seen that either. No. Probably if I if

326
00:16:27,320 --> 00:16:29,200
I took a whole bunch of my source code, put

327
00:16:29,200 --> 00:16:31,720
it into a single text file, passed it into a

328
00:16:31,759 --> 00:16:35,320
GPT model or copilot, and said, please tell me about

329
00:16:35,320 --> 00:16:37,600
where you see duplication, that might get it with the

330
00:16:37,639 --> 00:16:40,600
right prompt and with the right tokens to do that.

331
00:16:40,639 --> 00:16:43,080
But I don't see it volunteering that on its own,

332
00:16:43,639 --> 00:16:44,480
not yet anyway.

333
00:16:44,759 --> 00:16:47,559
Speaker 2: No, No, we're not there. But it is interesting to

334
00:16:47,559 --> 00:16:50,200
think in terms of is just less and less of

335
00:16:50,240 --> 00:16:51,960
a big deal just because the tools are going to

336
00:16:52,000 --> 00:16:54,679
help us deal with it either way.

337
00:16:54,519 --> 00:16:57,000
Speaker 3: I don't know. I think I think the issue is

338
00:16:57,039 --> 00:16:58,440
going to be the other way. I think all the

339
00:16:58,799 --> 00:17:02,200
quote unquote vibe code that's about to start happening, you

340
00:17:02,240 --> 00:17:06,319
know where folks are just you know, asking whatever AI

341
00:17:06,440 --> 00:17:08,599
tool to code them up whatever it is they need

342
00:17:09,480 --> 00:17:12,720
and copy pasting it into their code and compiling it

343
00:17:12,799 --> 00:17:15,720
until it works. I think that's going to result in

344
00:17:16,119 --> 00:17:21,279
a faster proliferation of duplicate code that no one wrote

345
00:17:21,519 --> 00:17:22,440
that came from.

346
00:17:23,200 --> 00:17:26,079
Speaker 2: Should we define vicoding just please? Because I don't think

347
00:17:26,119 --> 00:17:27,160
we've mentioned on the show yet.

348
00:17:27,279 --> 00:17:28,920
Speaker 1: Right, Yeah, that's the first time I've heard of it.

349
00:17:28,960 --> 00:17:29,480
But I get it.

350
00:17:29,519 --> 00:17:33,319
Speaker 2: Oh good, I'm glad you haven't because you're happier because

351
00:17:33,319 --> 00:17:33,599
of it.

352
00:17:33,960 --> 00:17:35,359
Speaker 1: Vibe programming.

353
00:17:35,519 --> 00:17:41,039
Speaker 2: Okay, so get this now. Look, Andre Carparthy is an

354
00:17:41,039 --> 00:17:43,240
important guy. This is the anthropic guy, like he's one

355
00:17:43,240 --> 00:17:44,960
of the big thinkers in the space. He got to

356
00:17:45,000 --> 00:17:49,200
kind of take him seriously. I think he really wanted

357
00:17:49,200 --> 00:17:52,240
this to come into being because he tried several times

358
00:17:52,559 --> 00:17:54,359
on different social media to come up different names. He

359
00:17:54,440 --> 00:17:56,960
did a whole bit about I'm programming in English now,

360
00:17:57,000 --> 00:17:59,119
like that sort of thing. But the vibe coding term

361
00:17:59,200 --> 00:18:02,759
is the one that But it was this idea of, hey,

362
00:18:03,279 --> 00:18:06,480
what if you sit with a copilot, describe what you want,

363
00:18:06,640 --> 00:18:09,960
let it write the code, compile it, send it back

364
00:18:10,039 --> 00:18:13,400
the errors. Don't write any code yourself, just keep iterating

365
00:18:13,559 --> 00:18:14,480
where do you get to?

366
00:18:15,039 --> 00:18:17,519
Speaker 3: And don't even read the code. Don't even necessarily be

367
00:18:17,559 --> 00:18:20,400
able to read the code, right, this is coding for anyone.

368
00:18:20,480 --> 00:18:25,079
Speaker 1: Yeah, well that violates every fiber of my what I

369
00:18:25,160 --> 00:18:26,039
know to be true.

370
00:18:26,119 --> 00:18:28,000
Speaker 2: Yeah no, And I don't think he actually went that way,

371
00:18:28,039 --> 00:18:31,000
like he was specifically talking about developer should experience this,

372
00:18:31,599 --> 00:18:33,920
and it was like a weekend thing. Like I think

373
00:18:33,960 --> 00:18:37,279
it's been blown out from beyond what he was thinking about.

374
00:18:37,559 --> 00:18:40,640
It is an interesting exercise, say hey, on a Saturday,

375
00:18:40,759 --> 00:18:45,319
experimenting with a new language, as experienced developer, do this

376
00:18:45,440 --> 00:18:48,559
process and see where you get to. But it got

377
00:18:48,599 --> 00:18:51,960
turned into programmers are obsolete. Anybody can do this, which

378
00:18:52,000 --> 00:18:56,599
is clearly not true because you have no ability to

379
00:18:56,640 --> 00:18:58,160
evaluate what you've created.

380
00:18:58,200 --> 00:19:00,799
Speaker 1: We were just talking with Vischwaz about this, and I've

381
00:19:00,839 --> 00:19:05,000
seen this in the wild that somebody uses chat GPT

382
00:19:05,759 --> 00:19:09,319
and says, can you show me how to write Oh,

383
00:19:09,400 --> 00:19:18,480
let's just pick a thread safe list collection, right, and

384
00:19:18,519 --> 00:19:21,119
it goes through all this you know, Oh, yes, well

385
00:19:21,160 --> 00:19:22,599
you're going to have to do this and you have

386
00:19:22,720 --> 00:19:26,799
to locks and this and that, and then at the

387
00:19:26,920 --> 00:19:30,279
end of it, you know, I saw that, and I

388
00:19:30,359 --> 00:19:33,480
just said, why don't why don't you just use a

389
00:19:33,519 --> 00:19:37,359
thread safe collection because one exists in the framework. Oh,

390
00:19:37,480 --> 00:19:41,680
I didn't know that, right. So he didn't say I

391
00:19:41,880 --> 00:19:45,920
need to use a thread safe collection. What are the options?

392
00:19:46,039 --> 00:19:48,519
That's not what he prompted. He said, how do I

393
00:19:48,599 --> 00:19:54,039
write a thread safe collection object? So, yeah, there's a

394
00:19:54,519 --> 00:19:58,480
situation right there where you have to be a program.

395
00:19:58,559 --> 00:20:02,839
You have to be a program like that things out there. Yeah,

396
00:20:02,960 --> 00:20:04,559
or at least search for it, you know, the path

397
00:20:04,640 --> 00:20:07,720
go down. It takes experienced people to do this. You

398
00:20:07,759 --> 00:20:08,920
don't know what you don't know.

399
00:20:09,240 --> 00:20:09,519
Speaker 3: Yeah.

400
00:20:09,559 --> 00:20:11,839
Speaker 2: I got quoted at a press piece recently when someone

401
00:20:11,839 --> 00:20:13,400
asked me by this, where I said, you know, only

402
00:20:13,440 --> 00:20:15,680
people who don't know enough about programming to think they

403
00:20:15,720 --> 00:20:18,119
can use this would actually consider deploying that stuff. Yeah.

404
00:20:18,599 --> 00:20:20,759
Speaker 3: Looking at the definition of vibe coding, which is already

405
00:20:20,799 --> 00:20:23,599
on Wikipedia, apparently it was just introduced in February of

406
00:20:23,599 --> 00:20:26,319
twenty twenty five. Yeah, and it says a key part

407
00:20:26,359 --> 00:20:28,920
of the definition is that the user accepts code without

408
00:20:28,920 --> 00:20:33,039
full understanding, right. AI researcher Simon Wilson said, if an

409
00:20:33,160 --> 00:20:35,359
LLM wrote every line of your code, but you reviewed

410
00:20:35,440 --> 00:20:38,160
tested and understood it all. That's not vibe coding in

411
00:20:38,200 --> 00:20:40,440
my book. That's using an LLLM as a typing assistant.

412
00:20:40,519 --> 00:20:42,319
Speaker 2: Yeah, there you go. Yeah, like I said, it was

413
00:20:42,359 --> 00:20:45,799
taken from Andre's original idea and you turned into this

414
00:20:45,920 --> 00:20:48,440
complete madness. Not that I think it was all that

415
00:20:48,480 --> 00:20:50,240
good of an idea in the first place, but definitely

416
00:20:50,240 --> 00:20:52,200
it's been turned into something fairly see.

417
00:20:52,440 --> 00:20:55,880
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
without a doubt. And the trope of programmers are obsolete

419
00:20:59,160 --> 00:21:02,359
never gets old. Sure, sure, well, And the holy grail

420
00:21:02,480 --> 00:21:06,400
of you know, the fourth or fifth or NTHGL programming language,

421
00:21:06,400 --> 00:21:09,640
that is your natural spoken language English or whatever your

422
00:21:09,680 --> 00:21:12,960
language choice is. That's been you know, something we've been

423
00:21:12,960 --> 00:21:15,160
striving for for years. I mean, that's what basic was

424
00:21:15,200 --> 00:21:15,799
supposed to be.

425
00:21:15,960 --> 00:21:17,759
Speaker 2: I don't think we've ever been striving for. It just

426
00:21:17,839 --> 00:21:19,960
keeps coming up, keeps.

427
00:21:20,880 --> 00:21:22,880
Speaker 3: It's like, well, yes, you can certainly do that. You

428
00:21:22,960 --> 00:21:26,119
just have to, you know, describe in your natural language

429
00:21:26,160 --> 00:21:29,799
everything completely unambiguously so the machine can understand it, right,

430
00:21:30,039 --> 00:21:31,920
And you know, it turns out that starts to look

431
00:21:31,920 --> 00:21:33,279
a lot like a programming language.

432
00:21:33,599 --> 00:21:37,279
Speaker 2: Oddly enough, English being somewhat ambiguous because I both cut

433
00:21:37,279 --> 00:21:39,240
the tree down and cut it up.

434
00:21:41,960 --> 00:21:45,200
Speaker 1: Yeah, there's lots of those in the English language.

435
00:21:45,440 --> 00:21:47,839
Speaker 3: Yeah, I don't think the tools will save us from

436
00:21:48,160 --> 00:21:51,359
copy paste coding. And I think vibe coding is like

437
00:21:51,400 --> 00:21:57,799
a logical ancestor or ancestor logical child of copy paste coding,

438
00:21:57,839 --> 00:22:00,440
but worse because it's just got, you know, auto complete

439
00:22:00,440 --> 00:22:03,000
on steroids doing the copy pasting.

440
00:22:02,720 --> 00:22:05,960
Speaker 2: For you well, and remarkably language agnostics. So it's like,

441
00:22:06,000 --> 00:22:09,200
not only did I understand what I meant to do,

442
00:22:09,240 --> 00:22:12,200
but now doing the language I've never experienced, So what

443
00:22:12,559 --> 00:22:16,200
could go wrong? But the vibes are good, they are

444
00:22:16,240 --> 00:22:17,880
as long as you don't show it to anybody or

445
00:22:17,920 --> 00:22:22,279
let anybody run it. But I do appreciate as an

446
00:22:22,279 --> 00:22:26,160
experienced developer that I'm just feeling like my refractoring tools

447
00:22:26,200 --> 00:22:29,240
have gotten dramatically better. And it brings up this idea

448
00:22:29,480 --> 00:22:32,400
of going back to the comment here of yeah, let's

449
00:22:32,480 --> 00:22:37,279
keep going down these transactional pathways for a while. As

450
00:22:37,279 --> 00:22:39,240
we get to a feature set that people start to

451
00:22:39,279 --> 00:22:42,119
care about, start to emerge the app that matters, knowing

452
00:22:42,160 --> 00:22:44,720
that the effort to clean that up into a better

453
00:22:44,759 --> 00:22:47,839
domain model has never been easier. That the tooling is

454
00:22:47,880 --> 00:22:50,960
going to help me make a better, more organized version

455
00:22:50,960 --> 00:22:52,279
of this application in less time.

456
00:22:52,640 --> 00:22:54,559
Speaker 3: It is true that the tooling has gotten better, for sure.

457
00:22:54,640 --> 00:22:56,680
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
but that we don't have because I think the overar

459
00:23:00,079 --> 00:23:02,240
engineering of architecture is a problem.

460
00:23:02,319 --> 00:23:05,119
Speaker 3: It can be, It certainly can be. You know, I've

461
00:23:05,160 --> 00:23:07,319
got a client that I was working with recently that

462
00:23:07,440 --> 00:23:11,640
had a monolithic architecture and one hundred and twenty projects

463
00:23:11,680 --> 00:23:15,039
in the solution and just building it took forever, and

464
00:23:15,079 --> 00:23:18,519
trying to find anything in there. What just was was crazy.

465
00:23:19,119 --> 00:23:21,880
And this was a you know, a ten plus year

466
00:23:21,920 --> 00:23:24,680
old application, right, this didn't happen overnight. But like you know,

467
00:23:24,799 --> 00:23:27,039
it was a lot and a lot of it was

468
00:23:27,359 --> 00:23:30,079
abstractions and there were there were many, many, many projects

469
00:23:30,079 --> 00:23:32,200
that had one interface in them. Wow, and then and

470
00:23:32,240 --> 00:23:35,119
then a separate project per implementation of that interface. I'm like,

471
00:23:35,839 --> 00:23:38,440
I like some abstraction. I like a little bit of

472
00:23:38,519 --> 00:23:41,720
architectural you know, structure. But that was a little bit

473
00:23:41,799 --> 00:23:44,519
much for me. Let me let me just say so, Yeah,

474
00:23:44,519 --> 00:23:47,279
it's it's always possible to go too far in one

475
00:23:47,319 --> 00:23:48,920
direction or the other. And I'm also not a big

476
00:23:49,000 --> 00:23:52,759
fan of my entire application is one text file, you

477
00:23:52,759 --> 00:23:55,400
know which it could be, right, but I don't.

478
00:23:55,279 --> 00:23:56,240
Speaker 1: Like any old days.

479
00:23:56,519 --> 00:23:59,200
Speaker 3: Yeah, I don't think just scrolling your mouse wheel is

480
00:23:59,200 --> 00:24:01,960
the only way to find code, and I think we

481
00:24:02,039 --> 00:24:04,599
have better IDs for that to be able to find things.

482
00:24:04,759 --> 00:24:09,359
Speaker 1: Speaking of IDEs Visual Studio versus Visual Studio Code, Fritz

483
00:24:09,440 --> 00:24:12,240
keeps wanting me to move over to Visual Studio code,

484
00:24:12,599 --> 00:24:14,920
and I just love Visual Studio, but I guess all

485
00:24:14,920 --> 00:24:18,440
the kids are using code now so, and Microsoft certainly

486
00:24:18,839 --> 00:24:22,319
seems like they're, you know, they're getting behind it a lot.

487
00:24:22,480 --> 00:24:25,240
Speaker 3: I still love Visual Studio. A bunch of folks on

488
00:24:25,279 --> 00:24:28,160
my team use Rider, a couple do use vs code.

489
00:24:29,000 --> 00:24:33,079
I like the fact that dot net coet Core allows

490
00:24:33,200 --> 00:24:36,640
us to easily move around between whatever tools we want

491
00:24:36,759 --> 00:24:40,400
and whatever os we want, So I think that competition

492
00:24:40,799 --> 00:24:44,279
overall is a good thing. Yeah. VS Code is definitely

493
00:24:44,359 --> 00:24:46,279
way faster, and it's still true that if I want

494
00:24:46,279 --> 00:24:48,119
to just open up a dot CS file to edit

495
00:24:48,119 --> 00:24:49,880
it real quick, yeah, I'm going to use Notepad or

496
00:24:49,960 --> 00:24:51,640
vs code way before I'm going to open that With

497
00:24:51,720 --> 00:24:52,599
Visual Studio.

498
00:24:52,319 --> 00:24:52,839
Speaker 1: Sure, yep.

499
00:24:53,119 --> 00:24:56,240
Speaker 2: Yeah, but it's sort of the acknowledgment that that software

500
00:24:56,240 --> 00:25:00,039
development is also project management, and Visual Studio has the

501
00:25:00,240 --> 00:25:04,720
project management. Although now with the do they call it

502
00:25:04,759 --> 00:25:08,319
the dot net ad in for Visual Studio code, you

503
00:25:08,319 --> 00:25:11,000
could at least see the project you have some concept.

504
00:25:10,599 --> 00:25:12,559
Speaker 3: Up, sure, yeah. And it has support for solutions and

505
00:25:12,559 --> 00:25:14,519
stuff in there now, yes, which is a little bit

506
00:25:15,000 --> 00:25:16,920
closer to what you get with Visual Studio. Yeah.

507
00:25:16,920 --> 00:25:18,920
Speaker 2: And I think that was necessary too, because there is

508
00:25:19,000 --> 00:25:22,319
a group of younger developers who never lived in idd Land.

509
00:25:22,559 --> 00:25:24,759
Like that was the biggest thing I saw, you know,

510
00:25:24,759 --> 00:25:27,519
in this contrast, most organizations I'm seeing is like at

511
00:25:27,559 --> 00:25:30,240
a certain age they've just never touched a visual studio

512
00:25:30,319 --> 00:25:33,119
and they don't want to. But they're still participating in

513
00:25:33,200 --> 00:25:37,000
a larger solution, and so code with the right ad

514
00:25:37,000 --> 00:25:39,559
in is they got to participate it, right. I hate

515
00:25:39,559 --> 00:25:41,640
to distract that by age, but it seems to be

516
00:25:41,680 --> 00:25:43,440
the case. Like I just don't see any energy from

517
00:25:43,519 --> 00:25:47,599
Microsoft in recruiting new developers into Visual Studio, Like what's

518
00:25:47,640 --> 00:25:49,799
the path for a novice developer in a studio? Because

519
00:25:50,240 --> 00:25:52,599
my instinct is that that would be the logical place

520
00:25:52,640 --> 00:25:55,079
to go because all the bits are already there. Well,

521
00:25:55,440 --> 00:25:59,119
unlike studio code, where you have to compose the various

522
00:25:59,119 --> 00:26:01,799
bits into the environment you want. Yeah, the idea that

523
00:26:01,839 --> 00:26:04,599
here's it ready to go seems should be compelling. I

524
00:26:04,640 --> 00:26:05,720
just don't see any path forward.

525
00:26:05,880 --> 00:26:08,440
Speaker 1: Well, I love visual Studio, but then again, I have

526
00:26:08,480 --> 00:26:11,160
an I nine, you know, on my guest stop with

527
00:26:11,240 --> 00:26:15,519
about one hundred and twenty eight kicks of RAM, so

528
00:26:15,799 --> 00:26:19,920
it's past me. But you know, loading it in a

529
00:26:20,000 --> 00:26:20,680
vm H.

530
00:26:21,400 --> 00:26:24,799
Speaker 3: Well, in the visual part, I mean remember Visual Basic,

531
00:26:24,960 --> 00:26:29,519
Like that was the tool for like hobbyists and novice

532
00:26:29,640 --> 00:26:33,279
and people coming into programming to start, because it was

533
00:26:33,359 --> 00:26:35,160
drag and drop and it was visual and you could

534
00:26:35,200 --> 00:26:37,519
just double click on this button to make it do something.

535
00:26:38,599 --> 00:26:42,079
Visual studio today is much less about that, you know,

536
00:26:42,119 --> 00:26:43,559
depending on what you're building. I mean, you could still

537
00:26:43,599 --> 00:26:46,599
the old wind forms up that way, right, but I

538
00:26:46,640 --> 00:26:49,559
think that a vast majority of people using visual Studio

539
00:26:49,559 --> 00:26:52,480
are not building wind forms, And the vast majority of

540
00:26:52,519 --> 00:26:56,160
those web developers don't have anything like a visual experience.

541
00:26:56,240 --> 00:26:59,559
They have a big editor and a bunch of other tools,

542
00:26:59,559 --> 00:27:02,720
but but no drag and drop since web forms.

543
00:27:02,839 --> 00:27:05,640
Speaker 1: So speaking of that last year, I did a project

544
00:27:05,799 --> 00:27:09,599
in vb net, a Windows forms project. Remember I was

545
00:27:09,640 --> 00:27:12,079
telling you how fast it is on my I nine.

546
00:27:12,559 --> 00:27:16,920
That thing managed to suck every CPU cycle out of

547
00:27:16,960 --> 00:27:21,400
my computer and make me wait for minutes before rendering.

548
00:27:22,039 --> 00:27:25,240
Minutes just making a ship, just doing a little thing,

549
00:27:25,279 --> 00:27:27,759
and like wait a minute, wait a minute, I go

550
00:27:27,920 --> 00:27:28,400
be right back.

551
00:27:28,640 --> 00:27:30,279
Speaker 2: I just like it when all the fans start to

552
00:27:30,359 --> 00:27:37,599
wind up. I got all these heat sensitive fans. Oh

553
00:27:37,680 --> 00:27:39,680
I clicked the wrong button because I can hear the

554
00:27:39,680 --> 00:27:42,400
fans just going up and go and go up.

555
00:27:42,880 --> 00:27:45,279
Speaker 3: The nuclear power plant down the road spins up. It's

556
00:27:45,279 --> 00:27:47,480
like the scene and the license.

557
00:27:48,359 --> 00:27:51,960
Speaker 1: Yeah, but certainly developing Blazer apps in visual studios just

558
00:27:52,000 --> 00:27:52,559
a joy.

559
00:27:52,680 --> 00:27:53,720
Speaker 2: Yeah, it's a joy.

560
00:27:54,559 --> 00:27:56,880
Speaker 1: I did try a couple of things in visual studio

561
00:27:57,000 --> 00:28:00,480
code recently. Fritz and I did a puzz in visual

562
00:28:00,480 --> 00:28:04,480
studio code. It's great. It's very colorful. You know, it's

563
00:28:04,480 --> 00:28:05,720
got lots of blinky lights.

564
00:28:05,880 --> 00:28:09,039
Speaker 2: It's more editor centric then yea. You know the problem

565
00:28:09,039 --> 00:28:11,279
with visual studio is it looks like the cockpit of

566
00:28:11,279 --> 00:28:13,720
a seven forty seven in there. Yeah, Like I wish

567
00:28:13,759 --> 00:28:15,599
there was better tooling for it, like turn off the stuff.

568
00:28:15,599 --> 00:28:18,359
I don't need to look at. I'm currently working on this,

569
00:28:19,079 --> 00:28:23,920
you know, web centric yeah, Azure app right, Like, there's

570
00:28:23,920 --> 00:28:26,039
a whole lot of buttons and toolbars and things that

571
00:28:26,119 --> 00:28:26,880
don't need to be there.

572
00:28:26,920 --> 00:28:29,559
Speaker 1: Even the most popular Windows applications I'm thinking of, the

573
00:28:29,599 --> 00:28:35,279
Adobe suite of applications has those modular windows that you

574
00:28:35,319 --> 00:28:37,519
can just turn on and turn off, and so they

575
00:28:37,559 --> 00:28:40,960
have the concept of workspaces where this window goes over here,

576
00:28:41,000 --> 00:28:42,640
and then the editor window down here.

577
00:28:42,640 --> 00:28:46,519
Speaker 2: That started docking undocking MDI thing in front really from

578
00:28:46,559 --> 00:28:49,200
Windows three for crying out loud, but it's never gone away.

579
00:28:49,319 --> 00:28:49,519
Speaker 1: Yeah.

580
00:28:49,559 --> 00:28:52,200
Speaker 3: Well Visual Studio has that capability too, But I see

581
00:28:52,240 --> 00:28:55,240
more doves that accidentally move a window and then can't

582
00:28:55,240 --> 00:28:57,000
figure out how to get it to redock, right. And

583
00:28:57,079 --> 00:29:00,119
I see folks using it intentionally where they have like

584
00:29:00,160 --> 00:29:02,799
a certain window layout while they're doing this task and

585
00:29:02,839 --> 00:29:05,079
then a different window layout when they're doing a different task.

586
00:29:06,000 --> 00:29:09,759
Speaker 2: Yeah, and you really want to have an undo on

587
00:29:09,839 --> 00:29:11,920
all of that. Again, I wonder if we could make

588
00:29:11,960 --> 00:29:15,160
better tooling to make this easier. It just make people unafree,

589
00:29:15,200 --> 00:29:16,799
because that's the thing is you get afraid to touch it.

590
00:29:17,160 --> 00:29:19,799
Speaker 3: Right, And we have templates for some things like project

591
00:29:19,839 --> 00:29:21,880
templates and things, but they're you know, used once at

592
00:29:21,920 --> 00:29:24,319
the start, and that's it. Imagine if you had some

593
00:29:24,359 --> 00:29:26,720
templates that folks could share, and you know, you watch

594
00:29:26,759 --> 00:29:28,519
some YouTuber and you see, oh, they're using that such

595
00:29:28,519 --> 00:29:29,960
and such template for how they laid things out.

596
00:29:30,000 --> 00:29:30,359
Speaker 2: I like that.

597
00:29:30,440 --> 00:29:32,000
Speaker 3: Let me just go grab it, just like you do

598
00:29:32,039 --> 00:29:34,640
with a visual studio code. Plug it today. You know,

599
00:29:34,759 --> 00:29:37,400
like that that layout could be something that was shared

600
00:29:37,440 --> 00:29:39,039
and used by the community.

601
00:29:39,279 --> 00:29:41,319
Speaker 1: Perhaps it seems like a good time take a break.

602
00:29:41,359 --> 00:29:44,079
We're about halfway in, so sit tight and we'll be

603
00:29:44,160 --> 00:29:48,720
back after these very important messages. Did you know you

604
00:29:48,720 --> 00:29:52,599
can easily migrate asp net web apps to Windows containers

605
00:29:52,680 --> 00:29:57,440
on Aws. Use the app to Container tool to containerize

606
00:29:57,480 --> 00:30:02,079
your iis websites and deploy to AWA managed container services

607
00:30:02,559 --> 00:30:06,240
with or without Kubernetes. Find out more about app to

608
00:30:06,279 --> 00:30:10,839
container at aws, dot Amazon dot Com, slash dot net,

609
00:30:11,039 --> 00:30:18,640
slash Modernize. And we're back at dot NetRocks. I'm Carl Franklin.

610
00:30:18,680 --> 00:30:22,599
That's Richard Campbell either and that's Steve Smith, otherwise known

611
00:30:22,640 --> 00:30:26,920
as our Dallas Hey, and we're just keeping out over

612
00:30:27,039 --> 00:30:30,799
tooling Visual studio architecture. You know, whatever Steve wants to

613
00:30:30,839 --> 00:30:31,279
talk about.

614
00:30:31,559 --> 00:30:34,559
Speaker 2: Well, plus, I mean part of this is I want

615
00:30:35,759 --> 00:30:38,039
I'm always playing the act. I spent more time as

616
00:30:38,039 --> 00:30:40,359
an architect as developer anyway, right, I'm always playing the

617
00:30:40,440 --> 00:30:44,400
act of is my architecture impairing my developers? And so

618
00:30:44,680 --> 00:30:46,160
some ways I want to let him write code and

619
00:30:46,160 --> 00:30:48,319
then reel or reel it in. And so this whole

620
00:30:48,319 --> 00:30:50,880
conversation you have about touling is about maybe this is

621
00:30:50,920 --> 00:30:53,680
easier now that I don't need to be so strict

622
00:30:54,200 --> 00:30:57,160
with what my how my developers have workflows work. They

623
00:30:57,200 --> 00:31:00,759
can give them more freedom knowing the consequences of a

624
00:31:00,839 --> 00:31:02,079
refactor or just smaller.

625
00:31:02,559 --> 00:31:04,000
Speaker 3: Yeah, I mean a lot of it. Like I'm going

626
00:31:04,039 --> 00:31:06,599
to say it depends. We made up t shirts for

627
00:31:06,680 --> 00:31:08,799
Nimble Pros that say it depends because that's the answert

628
00:31:08,799 --> 00:31:11,279
of everything, and it's a cop out answer.

629
00:31:11,440 --> 00:31:13,920
Speaker 1: It's going to need it. It's going to mean another

630
00:31:14,000 --> 00:31:16,319
thing in about forty years, you know that, right?

631
00:31:16,480 --> 00:31:19,000
Speaker 2: Nice? Yeah, I don't think it's that long, but yes,

632
00:31:19,319 --> 00:31:26,440
all right, maybe thirty Like what depends on who the

633
00:31:26,480 --> 00:31:27,960
young one on this show is today.

634
00:31:30,000 --> 00:31:31,480
Speaker 3: Okay, I think I know where you're going, But yeah,

635
00:31:31,480 --> 00:31:32,079
I'm a young one.

636
00:31:33,240 --> 00:31:36,079
Speaker 1: Yeah, okay, adult diapers.

637
00:31:36,119 --> 00:31:37,640
Speaker 2: Okay, adult diapers.

638
00:31:38,559 --> 00:31:39,559
Speaker 1: Explain my chad.

639
00:31:40,039 --> 00:31:43,480
Speaker 3: Explain it to me at least, but your audience appreciates it.

640
00:31:43,519 --> 00:31:43,920
There you go.

641
00:31:43,960 --> 00:31:47,319
Speaker 1: If you've got to explain it, it's not funny.

642
00:31:47,480 --> 00:31:50,279
Speaker 3: The thing about that, that answer that every consultant, every

643
00:31:50,359 --> 00:31:53,160
architect gives when when the customer asks them, you know,

644
00:31:53,240 --> 00:31:55,839
any question like how should we do this? How long

645
00:31:55,880 --> 00:31:58,880
will this take? Is that it's a cop out answer

646
00:31:59,079 --> 00:32:02,359
unless you immediately follow it up with what it depends

647
00:32:02,400 --> 00:32:05,440
on and what the levers are that the customer can

648
00:32:05,640 --> 00:32:09,240
can pull to adjust the outcome that they're looking for, right, uh,

649
00:32:09,319 --> 00:32:13,039
and and so in the case of the software architecture

650
00:32:13,079 --> 00:32:17,480
and the tooling, I think in many cases, yes, if

651
00:32:17,480 --> 00:32:19,680
the developers know what they're doing, you don't have to

652
00:32:19,720 --> 00:32:23,960
have as many guardrails for them to do what they

653
00:32:23,960 --> 00:32:25,960
need to do. And if the team is small or

654
00:32:25,960 --> 00:32:28,279
if the project is small, all those things are factors

655
00:32:28,319 --> 00:32:31,759
that matter. I think in this case, the bigger the team,

656
00:32:31,880 --> 00:32:34,559
the longer term the project, the more complex the domain,

657
00:32:34,920 --> 00:32:38,240
the more important it is that folks have a unified

658
00:32:38,279 --> 00:32:42,640
direction in mind that you know, everybody understands what the

659
00:32:42,720 --> 00:32:45,720
architecture is and why they should work with it not

660
00:32:45,799 --> 00:32:48,720
against it, and why they might they might be benefits

661
00:32:48,759 --> 00:32:51,519
of having some consistency in the codebase of how things

662
00:32:51,559 --> 00:32:53,440
are done, so that if you, let's say, have a

663
00:32:53,440 --> 00:32:55,759
web API and you look at you know, five different

664
00:32:55,839 --> 00:32:59,519
endpoints that all do posts to create something, they don't

665
00:32:59,519 --> 00:33:02,359
do it five different ways, like because then later on

666
00:33:02,440 --> 00:33:04,799
when you decide, hey, every time we post something, you know,

667
00:33:04,839 --> 00:33:06,920
we want to have some open telemetry that you know,

668
00:33:07,039 --> 00:33:09,400
drops off a metric that says we created this thing. Well,

669
00:33:09,400 --> 00:33:11,000
now you got to do that in five different places

670
00:33:11,039 --> 00:33:13,359
in five different ways. Like that's that's not efficient and

671
00:33:13,400 --> 00:33:14,160
it's error prone.

672
00:33:14,319 --> 00:33:17,720
Speaker 2: Yeah, yeah, and absolutely the biggest thing is you're going

673
00:33:17,759 --> 00:33:19,400
to miss one. You're going to fix four of them.

674
00:33:19,279 --> 00:33:22,240
Speaker 3: Right right, yep, there's a law for that. I forget

675
00:33:22,240 --> 00:33:25,400
whose law is. But the law is that so and

676
00:33:25,440 --> 00:33:28,599
so's law and so and so's law says that if

677
00:33:28,599 --> 00:33:30,960
there are things that need to be changed, I will

678
00:33:31,000 --> 00:33:32,640
fix at most N minus one of them.

679
00:33:32,880 --> 00:33:36,839
Speaker 1: Yes, well, you can lean on the compiler for a

680
00:33:36,880 --> 00:33:41,319
lot of that too, like I had to do that today. Actually,

681
00:33:41,359 --> 00:33:46,359
we were working on moving connection strings out of configuration

682
00:33:47,079 --> 00:33:50,160
and into a database that because there's a lot of

683
00:33:50,160 --> 00:33:54,000
different databases depending on the client right s multi tenant situation,

684
00:33:54,960 --> 00:34:00,400
and so instead of everywhere where I'm reading configure, now

685
00:34:00,440 --> 00:34:03,880
I have to read this class that's in our state bag.

686
00:34:05,640 --> 00:34:08,360
But the easiest way to do that is just remove

687
00:34:08,400 --> 00:34:13,519
where the configuration gets injected. Just remove it. Compiler says

688
00:34:13,519 --> 00:34:15,400
you got to hit fix this, this, this, this, and this,

689
00:34:15,480 --> 00:34:18,119
and I say, okay, yeah.

690
00:34:17,880 --> 00:34:18,400
Speaker 2: Get rid of it.

691
00:34:18,480 --> 00:34:20,159
Speaker 3: Yeah, just lean in the compiler.

692
00:34:20,639 --> 00:34:21,679
Speaker 1: Lean on the compiler.

693
00:34:22,000 --> 00:34:25,199
Speaker 2: Yeah. No, compiler is your friend. It is ultimately the

694
00:34:25,239 --> 00:34:28,800
source of truth because it's what's got You're going to run.

695
00:34:28,960 --> 00:34:32,239
Everything else's secondary or not run. Yeah, we're not run.

696
00:34:32,280 --> 00:34:35,679
As the case. Maybe I think it's one of the

697
00:34:35,679 --> 00:34:37,480
reasons that get hep copiloted as well as it did,

698
00:34:37,519 --> 00:34:40,000
is because compiler gets to say, yeah, you know, that's

699
00:34:40,039 --> 00:34:42,280
the nice thing about a compiler. It is ultimately them

700
00:34:42,360 --> 00:34:48,199
the arbiter. Nope, I can't compile this, so thanks for playing.

701
00:34:48,519 --> 00:34:51,679
Speaker 1: What I don't want is copilot telling me that I

702
00:34:51,920 --> 00:34:54,280
that I'm stupid and I shouldn't do what I just did.

703
00:34:54,599 --> 00:34:54,760
Speaker 3: Right.

704
00:34:55,280 --> 00:34:59,679
Speaker 1: I like that co pilot offers positive suggestions, like something

705
00:34:59,719 --> 00:35:00,400
that works.

706
00:35:00,559 --> 00:35:02,800
Speaker 2: It is a very positive tool. You know, if you

707
00:35:02,840 --> 00:35:04,840
work on the prompts, you can make it to sarcastic

708
00:35:04,880 --> 00:35:05,440
and nasty.

709
00:35:05,719 --> 00:35:06,679
Speaker 1: Yeah you probably can.

710
00:35:06,800 --> 00:35:11,119
Speaker 3: Yeah you want to, but yeah, you definitely can. I've

711
00:35:11,159 --> 00:35:13,719
asked it to respond as if it was the nastiest

712
00:35:13,719 --> 00:35:17,039
stack overflow person, and it'll happily do that.

713
00:35:17,039 --> 00:35:18,159
Speaker 1: That's interesting.

714
00:35:19,159 --> 00:35:19,559
Speaker 3: Wow.

715
00:35:20,039 --> 00:35:21,800
Speaker 2: Is that an emotional thing there, Steve? Is that where

716
00:35:21,840 --> 00:35:22,119
you are?

717
00:35:24,000 --> 00:35:25,920
Speaker 3: I was just seeing how it could do as a

718
00:35:25,960 --> 00:35:29,079
substitute for stack overflow with the full experience.

719
00:35:30,079 --> 00:35:33,079
Speaker 1: Yeah, okay, so this would be funny. This will be

720
00:35:33,079 --> 00:35:36,599
funny if you took a poorly written method just that

721
00:35:36,760 --> 00:35:38,960
stands on its own right, returns a string or something,

722
00:35:39,000 --> 00:35:45,639
doesn't take any dependencies, and poorly written, poorly commented, give

723
00:35:45,679 --> 00:35:48,360
it to chat, GPT or copyl or whatever, and say,

724
00:35:49,159 --> 00:35:55,440
write an angry, nasty email to the person that wrote this,

725
00:35:56,280 --> 00:35:59,360
lambasting them for being stupid, and just see when.

726
00:35:59,199 --> 00:36:02,400
Speaker 2: It comes up. Then we have enough in the other

727
00:36:02,440 --> 00:36:03,239
world already.

728
00:36:03,760 --> 00:36:06,239
Speaker 1: Yeah, that'd be I think it would be hilarious.

729
00:36:06,400 --> 00:36:07,079
Speaker 2: I gotta say, I.

730
00:36:07,800 --> 00:36:12,000
Speaker 3: You just wire it up to the Daily WTFA, which

731
00:36:12,039 --> 00:36:14,119
which has all kinds of examples of code that you

732
00:36:14,159 --> 00:36:15,280
wouldn't want to see.

733
00:36:15,639 --> 00:36:19,159
Speaker 2: I find myself ghosting or you know, co co coding

734
00:36:19,159 --> 00:36:21,760
with folks that are using tools like Copilot, and the

735
00:36:21,760 --> 00:36:24,440
way some of them interact with that tool is shocking.

736
00:36:24,960 --> 00:36:26,760
Like if you ever spoke to another person this way,

737
00:36:26,800 --> 00:36:30,039
it would be an HR violation. I don't I don't

738
00:36:30,039 --> 00:36:32,760
know why, but it's it seems seems to bring up

739
00:36:32,880 --> 00:36:34,199
things in people. M hm.

740
00:36:34,400 --> 00:36:38,159
Speaker 3: I did find it. It's called Shalloway's law. When en

741
00:36:38,239 --> 00:36:40,519
things need to change and N is greater than one,

742
00:36:40,599 --> 00:36:43,159
Shalloway will find at most N minus one of these

743
00:36:43,199 --> 00:36:49,039
things at most but l Shalloway. Okay, that is certainly,

744
00:36:49,159 --> 00:36:51,800
certainly a problem when you have too much repetition, right right,

745
00:36:52,679 --> 00:36:54,519
jumping back to architecture.

746
00:36:54,639 --> 00:36:56,519
Speaker 2: But you know, and you're putting a shape around this

747
00:36:56,559 --> 00:36:58,400
to you, Steve that I really appreciate that. It's like,

748
00:36:58,599 --> 00:37:00,199
I want to give you some freedom to get going,

749
00:37:00,280 --> 00:37:02,440
get it, you know, maybe get to an MVP or

750
00:37:02,519 --> 00:37:04,559
something like that, and then I'm going to bring in

751
00:37:04,679 --> 00:37:07,599
architecture because once I get to an end of a

752
00:37:07,599 --> 00:37:10,400
certain number, we're gonna have a tough time fixing it.

753
00:37:10,440 --> 00:37:13,519
So it's like, where is that number in that freedom,

754
00:37:13,719 --> 00:37:17,679
Like it's obviously not one maybe at ten it's too many,

755
00:37:17,920 --> 00:37:21,599
like somewhere in there is a balancing act to reel

756
00:37:21,599 --> 00:37:22,559
it in for sure.

757
00:37:22,639 --> 00:37:26,719
Speaker 3: Yeah, and there's there's some literature on what end should

758
00:37:26,760 --> 00:37:29,800
be when it comes to don't repeat yourself, and usually

759
00:37:29,800 --> 00:37:31,760
it's a three strikes you're out rule is the one

760
00:37:31,800 --> 00:37:35,360
that I'm most familiar with, where you know, the first duplicate,

761
00:37:35,440 --> 00:37:37,360
it's fine, don't worry about it, you know, the second

762
00:37:37,360 --> 00:37:39,760
one same. You know, maybe take note by the time

763
00:37:39,760 --> 00:37:41,800
there's three of them, Okay, this is something that we

764
00:37:41,880 --> 00:37:44,639
need to do something about. H and ten would be

765
00:37:44,679 --> 00:37:48,239
I think, way way too You've waited too long. Yeah,

766
00:37:48,320 --> 00:37:51,719
but I think it's important that you also always realize

767
00:37:51,800 --> 00:37:56,280
that they need to be something that is logically exactly

768
00:37:56,320 --> 00:37:59,760
the same and not just coincidentally duplicate. What I mean

769
00:37:59,800 --> 00:38:04,320
by that is, let's say you have some UI that

770
00:38:04,400 --> 00:38:08,800
you're componentizing, and in three different components they happen to

771
00:38:08,920 --> 00:38:12,480
use the same DIV structure. You don't necessarily want to

772
00:38:12,519 --> 00:38:14,519
pull that div structure out and say this is the

773
00:38:14,519 --> 00:38:17,840
one and only way that components will ever look, because

774
00:38:17,840 --> 00:38:19,719
now that means if you suddenly come up with a

775
00:38:19,719 --> 00:38:22,559
fourth component and it needs a different structure of divs

776
00:38:22,559 --> 00:38:25,360
to display what it wants to do. You've totally hamstrung yourself.

777
00:38:26,000 --> 00:38:28,840
It was just a coincidence that your first three components

778
00:38:28,840 --> 00:38:30,920
happened to look like that, right that you know, the

779
00:38:31,119 --> 00:38:34,079
CSS classes and the layout and other things. Maybe those

780
00:38:34,159 --> 00:38:37,360
are structures that you want to repeat and constrain, but

781
00:38:38,400 --> 00:38:40,519
don't take it too far, right, And the same is

782
00:38:40,559 --> 00:38:42,400
true in the programming logic, just as it would be

783
00:38:42,400 --> 00:38:42,800
in the UI.

784
00:38:43,119 --> 00:38:46,000
Speaker 2: Yeah. Yeah, and I appreciate that, like that's the shape

785
00:38:46,039 --> 00:38:49,840
around this now is somewhere you can get to that number.

786
00:38:51,440 --> 00:38:54,360
I think it's a great act because we've all been

787
00:38:54,360 --> 00:38:56,840
in environments where folks were so strict nobody could get

788
00:38:56,840 --> 00:38:59,840
going right, So I want to give them freeom.

789
00:39:00,039 --> 00:39:03,400
Speaker 3: One of the things I've been doing recently in my software,

790
00:39:03,400 --> 00:39:06,079
in my architectures that I'm a part of that I

791
00:39:06,119 --> 00:39:08,679
really like, is just trying to focus as much of

792
00:39:08,719 --> 00:39:12,599
the work down to use cases. And a given use

793
00:39:12,639 --> 00:39:17,119
case usually maps to one command that is initiated by

794
00:39:17,119 --> 00:39:19,679
the UI, you know, one button click or one API

795
00:39:19,840 --> 00:39:23,719
endpoint or something like that. And so because it's so small,

796
00:39:23,760 --> 00:39:28,000
it's so simple putting all that logic in one place

797
00:39:28,119 --> 00:39:31,360
in one handler or service. But I'm a big fan

798
00:39:31,400 --> 00:39:35,239
of handlers now for a variety of reasons. Makes it

799
00:39:35,280 --> 00:39:38,159
so that even a new developer can usually track how

800
00:39:38,199 --> 00:39:42,519
things work fairly quickly. And so, you know, whatever patterns,

801
00:39:42,519 --> 00:39:45,400
whether you're using vertical slices or clean architecture, demain divertive

802
00:39:45,440 --> 00:39:49,159
development doesn't matter. If you've got a use case per

803
00:39:49,280 --> 00:39:52,440
action that the user can invoke and you have one

804
00:39:52,440 --> 00:39:55,639
handler for that use case, it makes it so's it's

805
00:39:55,679 --> 00:39:58,960
a fairly easy mapping for a developer to know where

806
00:39:59,000 --> 00:40:01,639
to go to fix bug or what to do to

807
00:40:01,719 --> 00:40:04,480
create a new function a new vertical slice, a new

808
00:40:04,519 --> 00:40:05,480
piece of functionality.

809
00:40:05,960 --> 00:40:06,679
Speaker 2: Yep, I'm by it.

810
00:40:06,760 --> 00:40:07,679
Speaker 1: Yeah, I'll take that.

811
00:40:07,920 --> 00:40:10,280
Speaker 3: And so the reason I mentioned that I prefer to

812
00:40:10,320 --> 00:40:13,320
have these be handlers as opposed to a service, right

813
00:40:13,320 --> 00:40:17,119
because you could have, you know, an XYZ service that

814
00:40:17,159 --> 00:40:19,599
has a bunch of methods on it like create the thing,

815
00:40:19,880 --> 00:40:24,800
update the thing, delete the thing, et cetera. Those don't

816
00:40:24,800 --> 00:40:30,519
compose well into a pipeline. And so lately I've been

817
00:40:30,760 --> 00:40:35,440
a huge fan of removing cross cutting concerns by using

818
00:40:35,559 --> 00:40:38,519
a design pattern called chiine of responsibility, which is the

819
00:40:38,559 --> 00:40:41,039
exact same pattern that asp dot net core uses with

820
00:40:41,079 --> 00:40:44,079
its middleware. So any asp net dov you already know

821
00:40:44,119 --> 00:40:48,039
this pattern. It's it's how middleware works. But most developers

822
00:40:48,079 --> 00:40:51,800
aren't using it in their own solutions and their own software.

823
00:40:52,519 --> 00:40:54,239
And I'm not suggesting that you take all your business

824
00:40:54,239 --> 00:40:56,280
logic and implement it as asp net core middleware. That

825
00:40:56,320 --> 00:40:59,760
would be terrible. But if you create your own middleware

826
00:40:59,800 --> 00:41:02,320
pipe line, which you can easily do with a tool

827
00:41:02,320 --> 00:41:05,280
like mediator, or you can roll your own or there's

828
00:41:05,320 --> 00:41:08,039
other tools out there that support this type of behaviors

829
00:41:08,079 --> 00:41:12,840
and commands and handlers, what that enables is a use

830
00:41:12,960 --> 00:41:17,760
of polymorphism and other patterns like decorators at a huge scale.

831
00:41:18,559 --> 00:41:23,000
Because now instead of having you know, umpteen different services

832
00:41:23,039 --> 00:41:25,280
for every different entity you might have in your system,

833
00:41:25,679 --> 00:41:29,280
every one of which has a custom, unique interface, or maybe,

834
00:41:29,320 --> 00:41:31,840
if you're lucky, a generic interface. Right, if you want

835
00:41:31,880 --> 00:41:34,679
to add some functionality, like say some logging to every

836
00:41:34,719 --> 00:41:36,920
one of those methods, right, that's a lot of code

837
00:41:36,960 --> 00:41:38,639
you're going to have to write. It's a lot of decorators,

838
00:41:38,719 --> 00:41:41,280
a lot of methods you have to wrap. As soon

839
00:41:41,280 --> 00:41:44,239
as you say that I'm using the handler model, every

840
00:41:44,280 --> 00:41:47,000
single one of your methods looks the same. They all

841
00:41:47,039 --> 00:41:51,199
say I handle some type and I return some other type, right,

842
00:41:51,519 --> 00:41:53,920
And now you can wrap those in a behavior or

843
00:41:53,920 --> 00:41:58,400
a decorator trivially, and you can write one behavior for

844
00:41:58,480 --> 00:42:01,400
doing logging, one behavior for doing exception handling, one behavior

845
00:42:01,400 --> 00:42:04,920
for doing validation, and it applies everywhere. And the amount

846
00:42:04,920 --> 00:42:07,519
of code that that cuts out of your system is

847
00:42:07,679 --> 00:42:11,239
just massive. Like I've seen fifty percent or more reductions

848
00:42:11,280 --> 00:42:14,760
in total code base by getting rid of repeated try

849
00:42:14,800 --> 00:42:18,199
catch blocks and validation blox and logging blocks and everything else.

850
00:42:19,360 --> 00:42:22,119
Speaker 2: But it is also something you don't decide upfront to

851
00:42:22,159 --> 00:42:24,440
go change a responsibility, but to say, hey, we've reached

852
00:42:24,440 --> 00:42:27,679
this level of complexity, let's go retro this and then

853
00:42:27,719 --> 00:42:29,239
going forward we're going to use it.

854
00:42:29,840 --> 00:42:31,480
Speaker 3: I mean, you can, but this is one of the

855
00:42:31,519 --> 00:42:35,360
things where I've seen so much gain in productivity and

856
00:42:35,840 --> 00:42:38,920
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
everything has a use case and a handler, and.

858
00:42:41,320 --> 00:42:43,440
Speaker 2: I mean I'm always chilled by the one right way here,

859
00:42:43,480 --> 00:42:45,360
Steve right, Oh, sure it's at.

860
00:42:46,039 --> 00:42:47,960
Speaker 3: And there's there's some complexity there. I'll tell you what

861
00:42:48,000 --> 00:42:50,800
when I'm writing a proof of concept when I'm you know, saying, hey,

862
00:42:50,840 --> 00:42:53,800
I want to evaluate three different ways to do this

863
00:42:53,920 --> 00:42:57,280
messaging over Azure, right, because Azure has seventy two different

864
00:42:57,280 --> 00:43:00,159
ways that you can pass messages around. I'm an to

865
00:43:00,400 --> 00:43:02,280
just write that code in some console apps and there's

866
00:43:02,280 --> 00:43:04,320
not gonna be use cases or any other structure. But

867
00:43:04,360 --> 00:43:06,360
that's just a proof of concept. I'm gonna throw it away,

868
00:43:06,840 --> 00:43:09,039
and I'm probably gonna ask chatch ept to generate most

869
00:43:09,039 --> 00:43:10,880
of the code for me, because it's just a proof

870
00:43:10,920 --> 00:43:13,599
of concept. I'm gonna throw it away. But once I'm

871
00:43:13,599 --> 00:43:16,559
building the real solution and i'm gonna have tests, i'm

872
00:43:16,559 --> 00:43:18,599
gonna have version control, and i'm gonna have all the

873
00:43:18,639 --> 00:43:22,639
proper rigor of software engineering. Then I'm also going to

874
00:43:22,679 --> 00:43:24,760
want to pull all those cross cutting concerns that I

875
00:43:24,840 --> 00:43:28,039
know I'm going to need, right like validation and logging

876
00:43:28,039 --> 00:43:30,920
and error handling, et cetera, And I'm gonna pull those

877
00:43:30,920 --> 00:43:33,239
out into behavior so I only have to have them

878
00:43:33,239 --> 00:43:35,920
in one place in the code from the very beginning,

879
00:43:35,920 --> 00:43:37,519
because I don't want to have to write that code

880
00:43:37,559 --> 00:43:39,719
over and over and over again on every single endpoint

881
00:43:39,760 --> 00:43:41,079
or every single service.

882
00:43:41,079 --> 00:43:43,599
Speaker 2: And the obligation of even in the prototype to say,

883
00:43:43,679 --> 00:43:45,679
let's just do this all in handlers in case we

884
00:43:45,719 --> 00:43:48,280
need to go this way doesn't seem that high, like

885
00:43:48,400 --> 00:43:52,000
you got to pick away anyway, right, I appreciate much

886
00:43:52,039 --> 00:43:54,159
what you're saying here is like, this is not a

887
00:43:54,199 --> 00:43:58,079
big ask early in a project, and then it does

888
00:43:58,159 --> 00:43:59,639
open the door so much of other choices.

889
00:44:00,079 --> 00:44:01,400
Speaker 3: Yeah, I mean, the only thing that you have to

890
00:44:01,400 --> 00:44:05,320
do differently to decide to go this route is that

891
00:44:05,440 --> 00:44:09,280
wherever it is that the UI enters your application, instead

892
00:44:09,280 --> 00:44:13,320
of injecting an eye whatever service and calling some bespoke

893
00:44:13,400 --> 00:44:15,800
method on that service to do the work, assuming you're

894
00:44:15,840 --> 00:44:17,760
not just doing it all inline in your UI, which

895
00:44:17,880 --> 00:44:21,960
hopefully you're not for anything, you know, non trivial, instead

896
00:44:22,000 --> 00:44:25,519
of that service, Instead, you're creating a command or a

897
00:44:25,559 --> 00:44:27,960
message or a query or whatever, and then you're using

898
00:44:28,000 --> 00:44:31,599
something to dispatch that command and that dispatch process, whether

899
00:44:31,599 --> 00:44:37,000
that's Mediator, Jimmy Boguard's library or Wolverine or mass transit.

900
00:44:37,079 --> 00:44:39,320
You know, there's a bunch of these different messaging libraries

901
00:44:39,320 --> 00:44:42,199
that will do this for you. You know, that is

902
00:44:42,599 --> 00:44:46,039
the change, that's the difference. And then from there you're

903
00:44:46,039 --> 00:44:48,519
going to get that behavior pipeline and then you're going

904
00:44:48,599 --> 00:44:51,400
to have some handler somewhere that handles that message. Yeah.

905
00:44:51,480 --> 00:44:55,119
Speaker 2: No, I appreciate that. It's it's compelling, it sounds wonderful.

906
00:44:55,360 --> 00:44:57,519
Speaker 1: Yeah, I've It's not the way I work at all,

907
00:44:57,519 --> 00:45:00,280
but it does sound great, and I'd like to be

908
00:45:00,320 --> 00:45:01,880
in the habit of writing code like that.

909
00:45:01,920 --> 00:45:03,960
Speaker 2: But I mean the big thing here is you tend

910
00:45:04,000 --> 00:45:07,719
to walk on your own too, Carl. Where this approach

911
00:45:07,800 --> 00:45:09,159
is very team friendly.

912
00:45:09,519 --> 00:45:14,079
Speaker 3: Yes, yeah, it is. Yeah, true, because you're not going

913
00:45:14,119 --> 00:45:16,280
to have too many merge conflicts because everything comes down

914
00:45:16,320 --> 00:45:20,039
to one handler, which literally has one method and it's

915
00:45:20,079 --> 00:45:23,320
not really you know, it's not conducive to have three

916
00:45:23,360 --> 00:45:25,559
different developers all touching that handler at the same time

917
00:45:25,599 --> 00:45:28,079
to fix you know, three different bugs or whatever. So

918
00:45:28,639 --> 00:45:30,719
most of the time you're going to be working on

919
00:45:30,800 --> 00:45:33,280
separate pieces of the code based so your likelihood of

920
00:45:33,320 --> 00:45:34,599
merge conflicts goes way down.

921
00:45:34,960 --> 00:45:37,320
Speaker 2: Yeah, this is you know a lot of architectural decisions

922
00:45:37,320 --> 00:45:39,320
come down to the sort of Conway's law part of

923
00:45:40,199 --> 00:45:41,760
the you know, this is going to look like the

924
00:45:41,760 --> 00:45:43,760
team that built it, and as soon as there's you know,

925
00:45:44,360 --> 00:45:46,920
I think His original statement was, if we have if

926
00:45:46,960 --> 00:45:48,920
we're building a compiler and there's four teams working on it,

927
00:45:48,920 --> 00:45:50,079
it'll be a four pass compiler.

928
00:45:50,079 --> 00:45:50,440
Speaker 3: That's right.

929
00:45:51,360 --> 00:45:53,800
Speaker 2: Funny that you bring up like mass transit and mediator

930
00:45:53,800 --> 00:45:55,639
who heard you know, in the midst while we're recording

931
00:45:55,639 --> 00:45:57,960
this of this whole controversy about going to from a

932
00:45:58,199 --> 00:46:02,360
traditional open source, totally completely free model to a commercial

933
00:46:02,480 --> 00:46:06,000
variant as well, because they ye are all working on sustainability.

934
00:46:06,360 --> 00:46:07,960
Speaker 3: Yeah, well, I mean there's no such thing as a

935
00:46:07,960 --> 00:46:13,639
free lunch. And eventually these solo uh maintainer open source

936
00:46:13,679 --> 00:46:17,079
projects that are you know, hugely popular and being used

937
00:46:17,119 --> 00:46:21,360
by tons of fortune five hundred and for profit companies

938
00:46:21,440 --> 00:46:24,159
for for nothing, which is which is a contract that

939
00:46:24,199 --> 00:46:27,199
they make. Yeah, you know, sometimes they're going to get

940
00:46:27,199 --> 00:46:29,159
burned out. I mean there's only so much free support

941
00:46:29,239 --> 00:46:31,880
and maintenance and new updates and everything that a person

942
00:46:31,880 --> 00:46:32,920
can do in their free.

943
00:46:32,679 --> 00:46:35,840
Speaker 2: Time and abuse you can take before.

944
00:46:35,800 --> 00:46:38,639
Speaker 3: Any abuse that they take. And I have a ton

945
00:46:38,639 --> 00:46:42,440
of open source projects too, I get it. You can't

946
00:46:42,480 --> 00:46:45,360
always prioritize that over you know, the stuff that puts

947
00:46:45,400 --> 00:46:48,400
food on the table. And if you feel and I

948
00:46:48,440 --> 00:46:54,119
know I feel a responsibility or or you know, something

949
00:46:54,119 --> 00:46:57,119
to your audience, to your users, Like you know, new

950
00:46:57,199 --> 00:46:58,880
version of dot net comes out, I want to have

951
00:46:58,920 --> 00:47:02,000
this ready to go for folks that are leveraging my packages.

952
00:47:02,679 --> 00:47:04,760
Some security flaw is found, I want to fix that

953
00:47:04,880 --> 00:47:06,920
right away, because you know, that's it's got my name

954
00:47:06,960 --> 00:47:08,519
on this thing. I want to make sure it's working.

955
00:47:09,679 --> 00:47:12,400
But at the same time, I have paying customers, and

956
00:47:13,079 --> 00:47:15,039
you know, I have more of an obligation to them

957
00:47:15,599 --> 00:47:18,000
than the folks that are using my MIT license stuff

958
00:47:18,039 --> 00:47:18,719
on GitHub for free.

959
00:47:18,760 --> 00:47:20,800
Speaker 1: You should listen to last week's show we did with

960
00:47:20,880 --> 00:47:25,679
Rob mensching on He has a thing called open source

961
00:47:25,760 --> 00:47:30,400
maintenance fee. Yeah, I've heard of that, which is yeah, yeah,

962
00:47:30,679 --> 00:47:31,800
very very interesting.

963
00:47:32,039 --> 00:47:34,400
Speaker 3: Yeah, And there's been a lot of talk on Reddit

964
00:47:34,480 --> 00:47:37,840
and all the thought leaders have chimed in on this.

965
00:47:38,400 --> 00:47:40,360
As far as you know, folks wanting to get paid

966
00:47:40,360 --> 00:47:44,360
for their work, I think most large organizations that have

967
00:47:44,440 --> 00:47:47,880
been using and profiting from mass transit or mediator or

968
00:47:47,920 --> 00:47:51,280
automapper or any of these tools, before they decide that

969
00:47:51,320 --> 00:47:52,679
they want to just rip it out and find some

970
00:47:52,719 --> 00:47:54,960
other free thing, they should think long and hard about.

971
00:47:55,239 --> 00:47:57,840
You know, maybe it's worth you know, a thousand dollars

972
00:47:57,880 --> 00:47:59,960
a year, right for as much value as it provides.

973
00:48:00,119 --> 00:48:02,400
Speaker 2: Yeah, but it almost certainly is.

974
00:48:02,719 --> 00:48:04,960
Speaker 3: And guess what how much work do you have to

975
00:48:05,000 --> 00:48:07,599
do at that point? How much developer effort is that

976
00:48:07,639 --> 00:48:10,239
going to take from you? You know? None? Right, you

977
00:48:10,519 --> 00:48:13,480
write that check once. Maybe maybe it's a subscription thing,

978
00:48:13,519 --> 00:48:16,679
but you can move on. All your code still works

979
00:48:16,840 --> 00:48:18,760
and you're still going to get you know, the updates

980
00:48:18,760 --> 00:48:21,599
and support that you've been getting. But now maybe it's

981
00:48:22,159 --> 00:48:24,159
a better value proposition.

982
00:48:24,079 --> 00:48:26,280
Speaker 2: Or fork it and take care of it yourself, right, Like,

983
00:48:26,320 --> 00:48:28,000
that's right, This is exactly the argument.

984
00:48:28,039 --> 00:48:30,440
Speaker 3: But I'm with you because because surely that will be

985
00:48:30,480 --> 00:48:31,159
cheaper than that.

986
00:48:32,360 --> 00:48:34,199
Speaker 2: Without a doubt. Now, and I think the thing that

987
00:48:34,320 --> 00:48:36,559
Rob hit on battle means you haven't listened last week's

988
00:48:36,559 --> 00:48:38,920
show listened to it is how do we make the

989
00:48:39,000 --> 00:48:42,440
path for the developer who's using the free tool to

990
00:48:42,599 --> 00:48:46,199
convince leadership? We need to pay our share of this

991
00:48:46,719 --> 00:48:48,599
and make that as easy as possible.

992
00:48:48,679 --> 00:48:51,280
Speaker 3: Well, here's the thing that I think is still crazy

993
00:48:51,599 --> 00:48:54,719
is developers today, at least in the United States, almost

994
00:48:54,840 --> 00:48:58,239
are all making six figure salaries for full time positions,

995
00:48:58,360 --> 00:49:01,960
let's say, right at Facebooks, and Googles. They're making some

996
00:49:02,119 --> 00:49:06,679
multiple of one hundred k probably, and yet how many

997
00:49:06,679 --> 00:49:10,480
of them have the authority to spend one hundred dollars

998
00:49:10,519 --> 00:49:13,519
a year on a tool that will make their application faster?

999
00:49:14,199 --> 00:49:18,159
Almost none of them, right, for most organizations, none, and

1000
00:49:18,280 --> 00:49:21,039
are terrified to go get it. Oh yeah, yeah, yeah,

1001
00:49:21,119 --> 00:49:23,159
like the hoops you have to jump through to get

1002
00:49:23,199 --> 00:49:26,840
authorization to purchase a component or a dev tool in

1003
00:49:26,920 --> 00:49:30,039
many of these organizations, not even huge enterprises, but even

1004
00:49:30,079 --> 00:49:33,119
just medium sized companies. Right, it might be director level

1005
00:49:33,199 --> 00:49:37,880
to approve a five hundred dollars purchase and' that's just insane, right, Like,

1006
00:49:38,000 --> 00:49:42,480
this is why companies are creating and maintaining their own

1007
00:49:42,599 --> 00:49:47,480
messaging frameworks and email senders and everything else, sometimes not

1008
00:49:47,519 --> 00:49:51,320
even knowing it, right, you know, like the director level

1009
00:49:51,360 --> 00:49:52,639
has no idea that they're doing.

1010
00:49:52,480 --> 00:49:55,360
Speaker 2: It because the prospect of buying software is so terrifying.

1011
00:49:55,480 --> 00:49:58,360
Speaker 3: Yeah, because buying it is harder, right, So sure, if

1012
00:49:58,400 --> 00:50:00,280
it's available on new getting it looks like it as

1013
00:50:00,360 --> 00:50:02,480
you know, a bunch of downloads, then then they'll go

1014
00:50:02,559 --> 00:50:05,800
that route and maybe unless they've been bitten by that

1015
00:50:05,840 --> 00:50:08,239
in the past. Otherwise, you know, a lot of developers

1016
00:50:08,239 --> 00:50:11,280
would rather say how hard could it be? And just

1017
00:50:11,320 --> 00:50:14,639
code it up themselves and tell their boss that they're

1018
00:50:14,639 --> 00:50:16,519
just working on issue one two three, you know, for

1019
00:50:16,559 --> 00:50:18,920
the for the software, but they're not really working on that.

1020
00:50:18,920 --> 00:50:21,480
They're working on the component that they need. Yeah, for

1021
00:50:21,719 --> 00:50:23,679
issue one two three that they could have made hundreds

1022
00:50:23,719 --> 00:50:25,639
for it have been done in an hour, but now

1023
00:50:25,639 --> 00:50:26,880
they're going to spend a week on it.

1024
00:50:27,079 --> 00:50:30,159
Speaker 2: Yeah, and and forever, like it's always going to absorb

1025
00:50:30,239 --> 00:50:33,760
everything some part of time from now on. Totally with you.

1026
00:50:34,119 --> 00:50:35,960
I think we need to change the show name. I'm

1027
00:50:36,000 --> 00:50:38,599
not used to RANTI Steve Smith, and that's one I

1028
00:50:38,679 --> 00:50:41,719
like it. I'm enthusiastic he's back and he's pissed Steve Smith.

1029
00:50:41,800 --> 00:50:46,000
Rants are awesome. Yeah, he's feisty. Normally he's our calm

1030
00:50:46,079 --> 00:50:49,119
trainer guy who just delivers, you know, here's the right

1031
00:50:49,159 --> 00:50:51,079
way to do things and so forth. That might get

1032
00:50:51,119 --> 00:50:55,360
him some opinion today, and he's feisty. I always have opinions,

1033
00:50:55,880 --> 00:50:58,320
it's true, it's true, and you deliver them eloquently. But yeah,

1034
00:50:58,360 --> 00:51:00,239
you're a little reved up to day. I appreciate that

1035
00:51:00,280 --> 00:51:03,400
because these are good thoughts. Absolutely, like you really get

1036
00:51:03,440 --> 00:51:06,880
to the core of the thing, which is a good

1037
00:51:06,960 --> 00:51:11,039
director of it, or that the lead tech person in

1038
00:51:11,039 --> 00:51:14,639
this space should be the advocate for buy versus build,

1039
00:51:15,119 --> 00:51:18,079
should be the advocate for a budget protection, and should

1040
00:51:18,119 --> 00:51:19,639
be willing to go with those things like the fact

1041
00:51:19,679 --> 00:51:21,920
that we've made it as difficult as it is a problematic,

1042
00:51:22,000 --> 00:51:24,519
and part of the side effect of that is this

1043
00:51:24,599 --> 00:51:25,679
crisis in open source.

1044
00:51:25,960 --> 00:51:27,800
Speaker 1: On that happy note, are we ready wrap up? Or

1045
00:51:27,840 --> 00:51:29,159
you got something else you want to rant about?

1046
00:51:29,199 --> 00:51:30,440
Speaker 2: Steve? Did we miss something here?

1047
00:51:30,480 --> 00:51:32,920
Speaker 3: Steve? Well, I don't think we talked quite as much

1048
00:51:32,920 --> 00:51:35,199
about different types of architecture as I had thought, But

1049
00:51:35,239 --> 00:51:36,800
that is totally fine because I think we hit a

1050
00:51:36,840 --> 00:51:37,679
lot of cool topics.

1051
00:51:37,760 --> 00:51:40,159
Speaker 2: Now, it's fine. I like this. This bounced back and

1052
00:51:40,159 --> 00:51:42,599
forth between the coding side and the architecture side is

1053
00:51:42,599 --> 00:51:44,239
a debate we don't have often enough, so I'm glad

1054
00:51:44,239 --> 00:51:46,559
we did it, just because I think both those elements

1055
00:51:46,599 --> 00:51:48,719
are important and there is a balance there. Yeah.

1056
00:51:49,239 --> 00:51:53,119
Speaker 1: Very good, Well, Steve. Thanks, It's always pleasure talking to you,

1057
00:51:53,199 --> 00:51:55,800
and I'm sure the next time will be just as pleasurable.

1058
00:51:55,920 --> 00:51:57,840
Speaker 3: Thank you, awesome, Always a good time. Thanks guys.

1059
00:51:57,880 --> 00:52:02,719
Speaker 2: Number twenty twenty I think you get the subway sandwich.

1060
00:52:04,719 --> 00:52:06,559
Speaker 3: You got to punch the card and I get a

1061
00:52:06,559 --> 00:52:09,000
free dot net Rocks episode.

1062
00:52:12,079 --> 00:52:15,280
Speaker 1: Thanks again, Stave, and we'll talk to you next time

1063
00:52:15,360 --> 00:52:39,159
on dot net rocks. Dot net Rocks is brought to

1064
00:52:39,199 --> 00:52:42,960
you by Franklin's Net and produced by Pop Studios, a

1065
00:52:43,079 --> 00:52:47,480
full service audio, video and post production facility located physically

1066
00:52:47,519 --> 00:52:50,280
in New London, Connecticut, and of course in the cloud

1067
00:52:50,920 --> 00:52:55,159
online at pwop dot com. Visit our website at d

1068
00:52:55,239 --> 00:52:57,239
O T N E t R O c k s

1069
00:52:57,320 --> 00:53:01,960
dot com for RSS feeds, down modes, mobile apps, comments,

1070
00:53:02,280 --> 00:53:04,840
and access to the full archives going back to show

1071
00:53:04,880 --> 00:53:07,519
number one, recorded in September two.

1072
00:53:07,360 --> 00:53:07,960
Speaker 3: Thousand and two.

1073
00:53:08,599 --> 00:53:10,920
Speaker 1: And make sure you check out our sponsors. They keep

1074
00:53:11,000 --> 00:53:14,159
us in business. Now go write some code, See you

1075
00:53:14,199 --> 00:53:27,679
next time. You got JAD Middle Vans

