1
00:00:00,598 --> 00:00:01,678
What's up, Caleb?

2
00:00:01,678 --> 00:00:03,018
What's up, Ben?

3
00:00:03,058 --> 00:00:04,238
How's it going?

4
00:00:04,638 --> 00:00:05,598
It's great.

5
00:00:05,598 --> 00:00:07,158
Doing well.

6
00:00:07,778 --> 00:00:10,488
Well, it's a pleasure to talk to you, Ben.

7
00:00:10,488 --> 00:00:15,678
I just want to lead out and say that I've
followed you for a long time.

8
00:00:16,198 --> 00:00:19,928
And like one of the first places I worked
at, you got on my radar because you worked

9
00:00:19,928 --> 00:00:20,648
at Thoughtbot.

10
00:00:20,648 --> 00:00:22,958
Like, I don't know what your position was
at Thoughtbot.

11
00:00:22,958 --> 00:00:27,694
And that was one of my first like pillars
of programming people.

12
00:00:27,694 --> 00:00:31,434
at the time was like, oh, and I was
scouring the blog posts on Thoughtbot and

13
00:00:31,434 --> 00:00:35,734
just every blog post was like, this is the
content I'm here for.

14
00:00:35,734 --> 00:00:38,374
I just wanted to lead with that, set it
up.

15
00:00:38,374 --> 00:00:39,354
I appreciate that.

16
00:00:39,354 --> 00:00:40,514
That's awesome.

17
00:00:40,514 --> 00:00:41,894
Yeah, those were those were good days.

18
00:00:41,894 --> 00:00:46,414
I think I built a lot of my audience
during that period.

19
00:00:46,414 --> 00:00:48,894
So there's a lot of people who basically
know me because of or sort of through

20
00:00:48,894 --> 00:00:49,474
Thoughtbot.

21
00:00:49,474 --> 00:00:50,074
Yeah.

22
00:00:50,074 --> 00:00:52,194
I mean, now surely that's not the case.

23
00:00:52,194 --> 00:00:52,994
Right.

24
00:00:52,994 --> 00:00:56,230
Like Tupel is like on the map.

25
00:00:56,782 --> 00:00:59,962
to pull someone on the map yet, but I
think it's hard to say.

26
00:00:59,962 --> 00:01:02,062
A lot of people do mention the Thoughtbot
days.

27
00:01:02,062 --> 00:01:05,082
So I think that was the seas were
definitely there.

28
00:01:05,282 --> 00:01:06,022
Cool.

29
00:01:06,022 --> 00:01:07,002
Yeah.

30
00:01:07,182 --> 00:01:13,172
So I'm stoked to talk to you about some
code and kind of go deep in some of that

31
00:01:13,172 --> 00:01:13,722
stuff.

32
00:01:13,722 --> 00:01:17,882
And it seems like this is it seems like
you have made yourself a life of mostly

33
00:01:17,882 --> 00:01:19,662
focusing on code.

34
00:01:19,662 --> 00:01:20,152
Yeah.

35
00:01:20,152 --> 00:01:23,444
You're doing you seem to support yourself
through.

36
00:01:23,502 --> 00:01:28,392
open source contributions plus like some
paid educational products around those

37
00:01:28,392 --> 00:01:30,222
open source tools.

38
00:01:31,722 --> 00:01:38,182
And, but I'm guessing you spend 80 % of
your professional time writing code, maybe

39
00:01:38,182 --> 00:01:39,102
more.

40
00:01:39,162 --> 00:01:39,482
Yeah.

41
00:01:39,482 --> 00:01:45,022
I think it's pretty much all, it's pretty
much all writing code.

42
00:01:45,022 --> 00:01:48,182
It's, but it's not all open source code.

43
00:01:48,182 --> 00:01:51,722
So like the open source stuff.

44
00:01:51,950 --> 00:01:52,690
I don't know.

45
00:01:52,690 --> 00:01:57,880
Lately I've been spending like the first
three hours of my day, like pull request

46
00:01:57,880 --> 00:01:58,700
maintenance and stuff.

47
00:01:58,700 --> 00:02:03,160
And then the rest is I'm usually
developing something in the background to

48
00:02:03,160 --> 00:02:03,620
release it.

49
00:02:03,620 --> 00:02:03,970
Lericon.

50
00:02:03,970 --> 00:02:04,940
That's usually how it goes.

51
00:02:04,940 --> 00:02:07,480
So it's usually like a new version of the
open source tools.

52
00:02:07,480 --> 00:02:08,480
Maybe it is open source.

53
00:02:08,480 --> 00:02:13,800
It's just like a private branch or in this
case, it's more of like a product thing

54
00:02:13,800 --> 00:02:15,670
that I'm working on.

55
00:02:16,210 --> 00:02:17,970
So yeah, but it is all code.

56
00:02:17,970 --> 00:02:20,830
And sometimes I do a lot of screencasting
to support the work.

57
00:02:20,830 --> 00:02:22,030
Like that's where a lot of.

58
00:02:22,030 --> 00:02:24,070
the revenue comes from for me.

59
00:02:24,430 --> 00:02:28,600
And that is still like, so there is a lot
of screencasting and content production,

60
00:02:28,600 --> 00:02:32,190
but the majority of the work there is
actually me writing the code for the

61
00:02:32,190 --> 00:02:35,770
screencast and like honing it and really
kind of figuring it out.

62
00:02:35,770 --> 00:02:38,030
The screencasts are very code oriented.

63
00:02:38,030 --> 00:02:40,310
You buy the video and the source code.

64
00:02:40,310 --> 00:02:45,350
So it's like, you know, so yes, I code a
lot Ben and it makes me happy.

65
00:02:45,350 --> 00:02:45,510
Yeah.

66
00:02:45,510 --> 00:02:46,330
Yeah.

67
00:02:46,330 --> 00:02:48,102
Well you it's.

68
00:02:48,174 --> 00:02:50,544
I think this is, it seems like you're
maybe living a life that a lot of

69
00:02:50,544 --> 00:02:54,824
developers want, which is that you are, it
seems like pretty independent and you get

70
00:02:54,824 --> 00:02:58,034
to work on your open source things and get
paid for that.

71
00:02:58,034 --> 00:03:00,814
And you seem pretty happy with this life.

72
00:03:00,814 --> 00:03:03,314
I am definitely happy with it.

73
00:03:03,534 --> 00:03:07,714
Yeah, I def I'm like reaching, I'm trying
to build bigger.

74
00:03:07,714 --> 00:03:09,104
I want more.

75
00:03:09,104 --> 00:03:14,864
I've decided that like, I'm not just happy
to have the like lifestyle independent

76
00:03:14,864 --> 00:03:16,194
developer.

77
00:03:16,206 --> 00:03:17,896
life, I want more.

78
00:03:17,896 --> 00:03:20,746
I don't know what that looks like, but I
just know that I want more.

79
00:03:20,746 --> 00:03:26,796
So, yes, but I'm absolutely happy with it
in the sense that pretty much every day I

80
00:03:26,796 --> 00:03:30,616
do what I want to do, which a lot of times
is what I should do, you know, not

81
00:03:30,616 --> 00:03:31,846
necessarily things.

82
00:03:31,846 --> 00:03:32,556
How do I put this?

83
00:03:32,556 --> 00:03:36,186
As you know, it's like when you're
independent, you're working on stuff you

84
00:03:36,186 --> 00:03:39,206
want to work on, but you're also doing
stuff you don't want to do that you know

85
00:03:39,206 --> 00:03:41,126
is good for you that you should do.

86
00:03:41,126 --> 00:03:43,686
So there's a lot of that, but.

87
00:03:44,174 --> 00:03:50,104
But yeah, I think I've got like a decent
life going on here and I'm just really

88
00:03:50,104 --> 00:03:52,394
grateful that it works out that way.

89
00:03:52,394 --> 00:03:53,154
Yeah.

90
00:03:53,154 --> 00:03:53,584
Gotcha.

91
00:03:53,584 --> 00:03:53,874
Yeah.

92
00:03:53,874 --> 00:03:56,844
So do you want to maybe start with just
like a quick description of it seems like

93
00:03:56,844 --> 00:03:59,344
your tube, the two big things are Alpine
and Livewire.

94
00:03:59,344 --> 00:04:01,334
Those like where I think most of your time
is going.

95
00:04:01,334 --> 00:04:02,954
Yeah, pretty much all my time.

96
00:04:02,954 --> 00:04:04,774
Everything is Livewire and Alpine.

97
00:04:04,774 --> 00:04:05,354
Yep.

98
00:04:05,354 --> 00:04:05,774
Gotcha.

99
00:04:05,774 --> 00:04:06,094
Okay.

100
00:04:06,094 --> 00:04:08,534
And do you want to maybe elevator pitch
those things for us real quick?

101
00:04:08,534 --> 00:04:08,874
Sure.

102
00:04:08,874 --> 00:04:09,934
Yeah.

103
00:04:10,214 --> 00:04:12,914
So actually now it's easier to pitch
Livewire because everybody knows about

104
00:04:12,914 --> 00:04:14,030
HTMX.

105
00:04:14,030 --> 00:04:19,110
But HTMX inspired me early on when I was
at Titan.

106
00:04:20,310 --> 00:04:25,120
I was writing a lot of view SPAs for the
past maybe three years at the time and

107
00:04:25,120 --> 00:04:28,550
getting kind of bitter about it.

108
00:04:28,790 --> 00:04:33,000
I actually almost got fired from a job
because it took me a week to do a file

109
00:04:33,000 --> 00:04:38,890
upload because I didn't even know what
form, I even forget now, uploading a file

110
00:04:38,890 --> 00:04:42,510
before SPAs is just input type file.

111
00:04:42,510 --> 00:04:46,250
and you know, Code Igniter just knew what
to do with that or whatever.

112
00:04:46,270 --> 00:04:50,160
But anyway, so there were moments like
that where I just had these awakening

113
00:04:50,160 --> 00:04:53,370
moments and then I was reading like DHH's.

114
00:04:53,370 --> 00:04:55,530
I mean, you know all this stuff.

115
00:04:55,530 --> 00:05:01,820
I just read from the outside because I was
never a Rails guy, but the like JS over, I

116
00:05:01,820 --> 00:05:05,170
what it used to call it, that pattern.

117
00:05:05,170 --> 00:05:06,480
But anyway, like.

118
00:05:06,480 --> 00:05:08,470
An obtrusive JavaScript, maybe.

119
00:05:08,490 --> 00:05:10,734
No, it's something it's like.

120
00:05:10,734 --> 00:05:16,124
it was like JavaScript over the wire, but
like sending JavaScript to the browser to

121
00:05:16,124 --> 00:05:19,114
execute over Ajax, like things like that.

122
00:05:19,594 --> 00:05:23,054
Server sent JavaScript or something,
whatever.

123
00:05:23,054 --> 00:05:27,344
But also sending HTML partials was
something that I had discovered in the

124
00:05:27,344 --> 00:05:31,644
Rails community and PJax and like
TurboLinks and whatever, and just sort of

125
00:05:31,644 --> 00:05:35,904
realizing that like this pattern, and I
found Intercooler, which is now HTML, you

126
00:05:35,904 --> 00:05:36,744
just renamed it.

127
00:05:36,744 --> 00:05:40,590
And so I started using Intercooler and
it's just like fetching HTML.

128
00:05:40,590 --> 00:05:44,350
and really fell in love with the pattern
and thought, and then the Phoenix live

129
00:05:44,350 --> 00:05:48,450
view came out and I was like, this is that
taken to the next level.

130
00:05:48,450 --> 00:05:51,630
And I was, I want to do that for Laravel.

131
00:05:51,650 --> 00:05:54,450
And that's been LiveWire ever since.

132
00:05:54,450 --> 00:05:58,400
So I guess for people who don't know any
of the frameworks or patterns I just

133
00:05:58,400 --> 00:06:02,980
mentioned, LiveWire is like, it's in the
Laravel framework.

134
00:06:02,980 --> 00:06:07,780
And when you're using Laravel, it allows
you to stay in the backend, but create

135
00:06:07,780 --> 00:06:09,350
dynamic interfaces.

136
00:06:09,370 --> 00:06:10,126
So like.

137
00:06:10,126 --> 00:06:16,146
you can say wire click on a button and the
method that gets called when that wire

138
00:06:16,146 --> 00:06:20,566
click happens is a backend method instead
of just like a front end click listener

139
00:06:20,566 --> 00:06:22,666
that calls a front end JavaScript method.

140
00:06:22,666 --> 00:06:29,036
It's literally like a PHP class that you
can access state and methods in both the

141
00:06:29,036 --> 00:06:30,306
front end and the backend.

142
00:06:30,366 --> 00:06:31,646
So interesting.

143
00:06:31,646 --> 00:06:36,586
So I can say when you click this button on
the front end, make a request to the

144
00:06:36,586 --> 00:06:39,056
backend, run this particular method.

145
00:06:39,056 --> 00:06:39,630
Yep.

146
00:06:39,630 --> 00:06:42,690
take the results of that and stick it in
here or maybe even execute it?

147
00:06:42,690 --> 00:06:44,890
Is it coming back as like data or
JavaScript?

148
00:06:44,890 --> 00:06:46,870
Right, so is the really integrated part.

149
00:06:46,870 --> 00:06:50,780
So let's say like if you wanted to build a
counter in LiveWare, you wouldn't because

150
00:06:50,780 --> 00:06:53,110
why would you send network requests to
build a counter?

151
00:06:53,110 --> 00:06:55,050
But okay, you want to build a counter in
LiveWare.

152
00:06:55,050 --> 00:07:00,460
You have a backend class called counter
that has state, so like a public property

153
00:07:00,460 --> 00:07:04,572
called count, and then a method called
increment on that class.

154
00:07:04,814 --> 00:07:07,254
And then you have a view that correlates
with that class.

155
00:07:07,254 --> 00:07:10,744
So it, for us, it's in a render method in
the class, but whatever you have a backend

156
00:07:10,744 --> 00:07:14,134
template like ERB or blade and Laravel.

157
00:07:14,374 --> 00:07:19,624
And that template is just a normal view,
like from a controller that you pass the

158
00:07:19,624 --> 00:07:22,874
properties into and you can echo out
things in the backend.

159
00:07:22,874 --> 00:07:28,744
So you could say like an H one tag, echo
out count that count property as a normal

160
00:07:28,744 --> 00:07:29,454
backend variables.

161
00:07:29,454 --> 00:07:30,004
This makes sense.

162
00:07:30,004 --> 00:07:31,194
So totally.

163
00:07:31,438 --> 00:07:34,908
think about almost just like a controller
and a view, just sending data and then

164
00:07:34,908 --> 00:07:37,378
echoing it into the view.

165
00:07:37,378 --> 00:07:41,928
And then you'd have a button that says
wire click increment and wire click

166
00:07:41,928 --> 00:07:45,218
increment is just an HTML attribute on the
button.

167
00:07:45,218 --> 00:07:45,738
Okay.

168
00:07:45,738 --> 00:07:46,978
Do we have the setup?

169
00:07:46,978 --> 00:07:47,988
You got that locked in?

170
00:07:47,988 --> 00:07:48,438
I think so.

171
00:07:48,438 --> 00:07:48,758
Yeah.

172
00:07:48,758 --> 00:07:49,038
Yep.

173
00:07:49,038 --> 00:07:54,678
Is there any hole or any, what's the
little tiniest bit of not clarity for you?

174
00:07:54,678 --> 00:07:58,228
Let me try to say it back to you and see
if I've got it so far.

175
00:07:58,228 --> 00:07:59,078
Great.

176
00:07:59,258 --> 00:08:00,618
We're wiring up a button.

177
00:08:00,618 --> 00:08:01,006
Yep.

178
00:08:01,006 --> 00:08:05,756
There exists a back -end class that does
the increment and stores the data in RAM

179
00:08:05,756 --> 00:08:07,406
somewhere in some sort of instance.

180
00:08:07,406 --> 00:08:09,466
Don't even worry about where the data is
stored.

181
00:08:09,466 --> 00:08:10,816
Just the experience.

182
00:08:10,816 --> 00:08:12,846
But it's not on the front end.

183
00:08:12,846 --> 00:08:13,376
It's not.

184
00:08:13,376 --> 00:08:14,506
It's a back -end class.

185
00:08:14,506 --> 00:08:15,426
That's saying.

186
00:08:15,446 --> 00:08:15,686
Yeah.

187
00:08:15,686 --> 00:08:16,326
That's what we're getting at.

188
00:08:16,326 --> 00:08:16,786
Yeah.

189
00:08:16,786 --> 00:08:17,536
And so, yeah.

190
00:08:17,536 --> 00:08:21,306
So we have something that's going to fire
when I click this button that's going to

191
00:08:21,306 --> 00:08:23,786
increment on the back end.

192
00:08:23,786 --> 00:08:27,246
And then something is going to flow back
to the front end somewhere and show me the

193
00:08:27,246 --> 00:08:28,206
new state.

194
00:08:28,366 --> 00:08:28,866
Yeah.

195
00:08:28,866 --> 00:08:29,186
Yep.

196
00:08:29,186 --> 00:08:29,902
Basically.

197
00:08:29,902 --> 00:08:34,562
So the experience of it again is just like
almost like a controller, except you have

198
00:08:34,562 --> 00:08:37,542
state like properties and methods instead
of just methods.

199
00:08:37,542 --> 00:08:39,212
And there's a view that correlates.

200
00:08:39,212 --> 00:08:40,802
You have a button, wire click increment.

201
00:08:40,802 --> 00:08:44,382
When somebody clicks that button on the
front end, a network request gets sent to

202
00:08:44,382 --> 00:08:46,472
the backend with the last known state.

203
00:08:46,472 --> 00:08:47,772
So that's how the state gets transferred.

204
00:08:47,772 --> 00:08:49,222
It's like a snapshot.

205
00:08:49,222 --> 00:08:52,062
So this little snapshot of state gets sent
to the backend.

206
00:08:52,062 --> 00:08:57,462
It hydrates that class, calls your method
like increment, which bumps count to two,

207
00:08:57,502 --> 00:08:59,342
re -renders that HTML view.

208
00:08:59,342 --> 00:09:04,212
And then sends back the new snapshot of
data, the latest snapshot, along with the

209
00:09:04,212 --> 00:09:05,722
latest HTML.

210
00:09:05,742 --> 00:09:10,082
And then in the front end, that new
snapshot gets held for the next time.

211
00:09:10,082 --> 00:09:12,722
And that new HTML gets morphed onto the
page.

212
00:09:12,722 --> 00:09:15,692
So it's like kind of like a virtual DOM,
but not virtual.

213
00:09:15,692 --> 00:09:20,072
It's like DOM diffing, like walking and
finding like, okay, this divs the same.

214
00:09:20,072 --> 00:09:22,482
Oh, this H1 has a different text content.

215
00:09:22,482 --> 00:09:27,202
Let's mutate the current H1 on the page to
the last known H1.

216
00:09:27,202 --> 00:09:29,576
So the experience on the front end is
that.

217
00:09:29,774 --> 00:09:31,994
When you're writing code, you feel like
you're writing back end code.

218
00:09:31,994 --> 00:09:35,034
When you're using it, you feel like you're
using front end code.

219
00:09:35,034 --> 00:09:36,194
Yeah.

220
00:09:36,194 --> 00:09:37,784
But which is very similar to HTML.

221
00:09:37,784 --> 00:09:40,394
It just has, it does a lot more of the
glue for you.

222
00:09:40,394 --> 00:09:45,294
So you're not creating bespoke endpoints
and such, or manually sending the HTML.

223
00:09:45,294 --> 00:09:46,894
It's really declarative in that sense.

224
00:09:46,894 --> 00:09:50,974
You're sort of declaring a state and a
view and a template.

225
00:09:50,974 --> 00:09:52,314
And then, yeah.

226
00:09:52,314 --> 00:09:53,874
So that's LiveWare.

227
00:09:53,874 --> 00:09:57,374
Very similar to Phoenix LiveView, if
anybody's familiar with that.

228
00:09:57,374 --> 00:09:58,862
But yeah.

229
00:09:58,862 --> 00:09:59,702
That's the pitch.

230
00:09:59,702 --> 00:10:04,112
And then Alpine is the JS sprinkles that I
wrote for LiveWire, but turns out it's

231
00:10:04,112 --> 00:10:08,782
like really useful outside of LiveWire in
vanilla Rails apps.

232
00:10:08,782 --> 00:10:10,332
It's useful even in Hotwire.

233
00:10:10,332 --> 00:10:11,362
It's useful in HTML.

234
00:10:11,362 --> 00:10:17,152
So it sort of gained wider adoption
because it's for me, it's like, uh, like

235
00:10:17,152 --> 00:10:18,092
the modern jQuery.

236
00:10:18,092 --> 00:10:23,152
It's like a JS sprinkles framework that
just, you can throw in a CDN and all of a

237
00:10:23,152 --> 00:10:28,166
sudden have a lot of power to make drop
downs and popovers and.

238
00:10:28,270 --> 00:10:29,670
Whatever all sorts of stuff.

239
00:10:29,670 --> 00:10:30,490
Modals.

240
00:10:30,490 --> 00:10:31,390
Yeah.

241
00:10:31,390 --> 00:10:32,030
Nice.

242
00:10:32,030 --> 00:10:33,090
That's so interesting.

243
00:10:33,090 --> 00:10:39,200
I I like more or less retired from web
development right before all of this stuff

244
00:10:39,200 --> 00:10:40,230
like started happening.

245
00:10:40,230 --> 00:10:40,830
Okay.

246
00:10:40,830 --> 00:10:44,260
It's like I was like just as like
JavaScript was like kind of taking off

247
00:10:44,260 --> 00:10:45,910
like like do you remember Backbone by any
chance?

248
00:10:45,910 --> 00:10:46,810
Yeah.

249
00:10:46,810 --> 00:10:50,060
Like when Backbone was kind of like
ascending was like about when I like

250
00:10:50,060 --> 00:10:52,240
stepped out of the early days.

251
00:10:52,240 --> 00:10:54,682
That's really that's like pre react era.

252
00:10:54,702 --> 00:10:55,842
Yeah, yeah, absolutely.

253
00:10:55,842 --> 00:10:59,262
And so every time I like I'm talking, you
know, modern JavaScript, I'm like, I am

254
00:10:59,262 --> 00:10:59,962
out of my depth.

255
00:10:59,962 --> 00:11:01,662
I have touched this in so long.

256
00:11:01,662 --> 00:11:06,382
I'm just so used to like everybody knows
everything about, you know, the current

257
00:11:06,382 --> 00:11:07,182
landscape.

258
00:11:07,182 --> 00:11:08,662
But that's that's funny.

259
00:11:08,662 --> 00:11:09,442
Totally.

260
00:11:09,442 --> 00:11:09,682
Yeah.

261
00:11:09,682 --> 00:11:13,222
Yesterday, I was talking to somebody that
works at Duple as a younger guy.

262
00:11:13,222 --> 00:11:17,502
And when I told him like my my level of
JavaScript knowledge, he was like, oh,

263
00:11:17,502 --> 00:11:18,682
wow, you are old.

264
00:11:18,682 --> 00:11:23,662
It like wasn't until he understood where I
stopped JavaScripting that he like.

265
00:11:23,662 --> 00:11:26,022
appreciated just quite how ancient I was.

266
00:11:26,022 --> 00:11:26,462
That's great.

267
00:11:26,462 --> 00:11:31,352
If you're ever looking for like a fun
time, just like peruse all the stuff that

268
00:11:31,352 --> 00:11:33,562
exists now that jQuery used to have to do
for us.

269
00:11:33,562 --> 00:11:34,212
It's so nice.

270
00:11:34,212 --> 00:11:36,902
It's like JavaScript's like decent now.

271
00:11:36,902 --> 00:11:37,742
Nice.

272
00:11:37,742 --> 00:11:38,562
Yeah.

273
00:11:39,062 --> 00:11:41,202
Last you knew it wasn't that decent.

274
00:11:41,202 --> 00:11:42,502
It was not that decent.

275
00:11:42,502 --> 00:11:45,012
That's sort of still how it is cached in
my brain.

276
00:11:45,012 --> 00:11:45,452
Yeah.

277
00:11:45,452 --> 00:11:48,232
It's just like this sort of like, I don't
know if this is for me.

278
00:11:48,232 --> 00:11:49,882
Yeah, it's better.

279
00:11:49,998 --> 00:11:52,088
I don't know that I've been sold that it
actually is for me.

280
00:11:52,088 --> 00:11:57,138
Like it still seems like kind of crazy as
I like peek at it from a distance.

281
00:11:57,138 --> 00:11:59,338
But I'm glad you're taking it.

282
00:11:59,338 --> 00:12:00,338
Yeah.

283
00:12:00,738 --> 00:12:03,618
You know, you know more than I do.

284
00:12:03,838 --> 00:12:05,738
Maybe about JavaScript, Ben.

285
00:12:05,738 --> 00:12:06,438
Yeah.

286
00:12:06,438 --> 00:12:07,058
All right.

287
00:12:07,058 --> 00:12:08,848
So let's talk about coding a little bit.

288
00:12:08,848 --> 00:12:09,918
Yeah.

289
00:12:10,238 --> 00:12:10,958
Cool.

290
00:12:10,958 --> 00:12:17,598
If I saw some code and said, oh, man,
Caleb definitely wrote this.

291
00:12:18,118 --> 00:12:19,118
What would I be talking about?

292
00:12:19,118 --> 00:12:20,078
What would I have seen?

293
00:12:20,078 --> 00:12:27,518
I think what people would say, like maybe
one tiny little ism is like really short

294
00:12:27,518 --> 00:12:30,218
or absurdly long method names.

295
00:12:30,298 --> 00:12:36,408
Like a method name or a variable name
that's like a complete sentence that has

296
00:12:36,408 --> 00:12:38,178
like 15 words.

297
00:12:39,718 --> 00:12:43,238
And that's like kind of a philosophy of
mine is like the name should either be

298
00:12:43,238 --> 00:12:48,398
incredibly short because it's so obvious
in its context or it should be incredibly

299
00:12:48,398 --> 00:12:49,294
long so that...

300
00:12:49,294 --> 00:12:53,654
there's no like question about it at all.

301
00:12:53,654 --> 00:12:54,194
You know?

302
00:12:54,194 --> 00:12:54,734
Yeah.

303
00:12:54,734 --> 00:12:55,634
I like that a lot.

304
00:12:55,634 --> 00:12:58,914
I think people are like overly afraid of
long names.

305
00:12:58,914 --> 00:13:01,214
There's like no harm at all.

306
00:13:01,214 --> 00:13:08,144
I guess the only harm is you lose some of
that easy like aesthetic, but that that's

307
00:13:08,144 --> 00:13:10,574
why you make, try to make things single
word.

308
00:13:10,574 --> 00:13:14,244
And if, if they're double word, maybe you
can extract, maybe it's, I don't know.

309
00:13:14,244 --> 00:13:18,014
I've always been fascinated how naming can
kind of give you smells about your code.

310
00:13:18,014 --> 00:13:18,286
Like,

311
00:13:18,286 --> 00:13:21,366
Totally you have all these contextual
names and you're like, oh if I actually

312
00:13:21,366 --> 00:13:25,466
put this in a class or a separate file I
just remove the prefix on all those

313
00:13:25,466 --> 00:13:28,736
things, you know Yeah, so that's the
ultimate goal.

314
00:13:28,736 --> 00:13:33,916
But if you can't like just make that big
fat method name, you know, yeah, I love

315
00:13:33,916 --> 00:13:39,226
that I'm I think this like is a good
example of sort of like a philosophy of

316
00:13:39,226 --> 00:13:44,716
mine which is as much as you can getting
the Implicit knowledge in the code to be

317
00:13:44,716 --> 00:13:45,266
explicit.

318
00:13:45,266 --> 00:13:47,726
Yeah, so there's a lot of times like

319
00:13:47,726 --> 00:13:51,626
people will explain a method to me and be
like, oh, well, like this does this as

320
00:13:51,626 --> 00:13:52,726
long as this.

321
00:13:52,726 --> 00:13:55,566
And I'm like, great, let's tack on as long
as this.

322
00:13:56,146 --> 00:13:57,466
Yes, right.

323
00:13:57,466 --> 00:13:57,796
Yes.

324
00:13:57,796 --> 00:14:01,646
Those are, those are the kinds of prefixes
that I, you know, I don't want to say it's

325
00:14:01,646 --> 00:14:02,376
all over my code.

326
00:14:02,376 --> 00:14:06,036
Cause again, I'm, I'm trying for these,
I'm trying for, for really sleek, like

327
00:14:06,036 --> 00:14:12,746
minimal stuff, but, but definitely as long
as, or doing this until, or ensure this

328
00:14:12,746 --> 00:14:14,726
is, you know, things like that.

329
00:14:14,726 --> 00:14:17,792
The kind of like describe more about.

330
00:14:17,902 --> 00:14:23,442
I guess like ensure is like a favorite of
mine, like for, instead of having like a

331
00:14:23,442 --> 00:14:27,072
conditional guard clause at the top that
forks the logic in something, just having

332
00:14:27,072 --> 00:14:31,202
like a method at the top that's like
ensure the file exists or something and

333
00:14:31,202 --> 00:14:33,662
then continue the flow as normal.

334
00:14:34,542 --> 00:14:39,072
I don't know that that's kind of a sides
of point, but ensure is like a name that I

335
00:14:39,072 --> 00:14:43,042
like that also like introduces a pattern
that I like, I don't know.

336
00:14:43,042 --> 00:14:47,086
But yeah, it's like, it kind of feels like
the short.

337
00:14:47,086 --> 00:14:52,386
Really short names are like your reward
for having done a nice job on your design.

338
00:14:52,386 --> 00:14:52,926
Yeah.

339
00:14:52,926 --> 00:14:56,496
And like gotten good names into other
places so that you can like, so it is

340
00:14:56,496 --> 00:15:00,766
unambiguous when you see like, like
execute or something like some sort of

341
00:15:00,766 --> 00:15:01,546
name like that.

342
00:15:01,546 --> 00:15:02,136
Right.

343
00:15:02,136 --> 00:15:03,146
Yeah, exactly.

344
00:15:03,146 --> 00:15:03,806
Yep.

345
00:15:03,806 --> 00:15:07,566
Here's an example of, of something that I
did for fun.

346
00:15:07,566 --> 00:15:12,026
So I rewrote LiveWire last year, like a
full code -based rewrite from scratch.

347
00:15:12,026 --> 00:15:13,766
Took way too long, like a year and a half.

348
00:15:13,766 --> 00:15:15,226
We gotta talk about that.

349
00:15:15,226 --> 00:15:16,586
Yes, we should.

350
00:15:16,814 --> 00:15:21,464
But there was one file or one feature that
I felt like I couldn't crack.

351
00:15:21,464 --> 00:15:24,634
Like I couldn't, I couldn't like do it
well.

352
00:15:24,634 --> 00:15:28,494
I couldn't separate things properly enough
and whatever.

353
00:15:28,494 --> 00:15:30,694
So it was actually, it's basically a
Turbolinks feature.

354
00:15:30,694 --> 00:15:32,074
I added that to LiveWire.

355
00:15:32,074 --> 00:15:34,434
So I mean, you're familiar with Turbolinks
and PJax.

356
00:15:34,434 --> 00:15:35,594
I can't remember what it does anymore.

357
00:15:35,594 --> 00:15:40,184
It's so funny, Ben, to me, you're like the
Rails guy that I can, like most people, I

358
00:15:40,184 --> 00:15:41,754
can't just drop these Rails references.

359
00:15:41,754 --> 00:15:42,704
They don't know what I'm talking about.

360
00:15:42,704 --> 00:15:45,368
But Ben surely knows what I'm talking
about.

361
00:15:45,518 --> 00:15:47,868
I remember, I think it was like partial
page reloading.

362
00:15:47,868 --> 00:15:48,978
Was that what that was?

363
00:15:48,978 --> 00:15:55,078
Basically, GitHub pretty much still uses
it, but TurboLinks hijacks all the a tags

364
00:15:55,078 --> 00:15:56,358
on the page.

365
00:15:56,358 --> 00:16:01,538
And then instead of doing full page
navigations, they Ajax that whole page and

366
00:16:01,538 --> 00:16:08,538
they just sub out the body and then splice
in any head scripts and links or styles.

367
00:16:08,538 --> 00:16:12,014
And then it just basically is a full page
change.

368
00:16:12,014 --> 00:16:14,374
and you don't have to do anything on the
server to account for this.

369
00:16:14,374 --> 00:16:18,814
That's why it's so beautiful, but it
speeds up page transitions by light years,

370
00:16:18,814 --> 00:16:22,074
because it doesn't have to tear down
everything and reboot at all.

371
00:16:22,714 --> 00:16:23,074
Whatever.

372
00:16:23,074 --> 00:16:24,994
Let me teach you about modern Rails.

373
00:16:24,994 --> 00:16:29,534
Let me teach you about legacy Rails, but
nobody uses TurboWinks.

374
00:16:29,534 --> 00:16:31,214
Let me teach you about old Rails.

375
00:16:31,214 --> 00:16:36,134
Pjax was controversial inside Thoughtbot,
as I was wrapping up there.

376
00:16:36,134 --> 00:16:38,014
So I think we were kind of like, we don't
know about this.

377
00:16:38,014 --> 00:16:38,984
This is a maybe for us.

378
00:16:38,984 --> 00:16:40,686
And Pjax is more...

379
00:16:40,686 --> 00:16:44,336
Uh, like HTML, like P -text can be like
partials and things that you're talking

380
00:16:44,336 --> 00:16:48,996
about where like turbo links and hot wire,
like turbo drive are just kind of full

381
00:16:48,996 --> 00:16:49,966
page.

382
00:16:49,966 --> 00:16:51,966
You know, it's much less dangerous.

383
00:16:51,966 --> 00:16:53,226
Doesn't whatever.

384
00:16:53,226 --> 00:16:59,346
So I go to write this feature pen for live
wire and I can't like crack the flow in a

385
00:16:59,346 --> 00:17:03,706
way that I like, like keeping things
separate because everything is so related.

386
00:17:03,706 --> 00:17:05,869
It's just whatever.

387
00:17:05,869 --> 00:17:09,459
So I ended up just writing it out like a
sentence or like a paragraph.

388
00:17:09,459 --> 00:17:13,179
So if you read this code, it's literally
like, this is like the first method in

389
00:17:13,179 --> 00:17:13,569
JavaScript.

390
00:17:13,569 --> 00:17:19,859
It's like when a user presses a button and
then a callback that does all those things

391
00:17:19,859 --> 00:17:25,219
and then like a parameter in that callback
that's like, and then do this that gets

392
00:17:25,219 --> 00:17:26,549
called at the end.

393
00:17:26,549 --> 00:17:32,090
And like, and in, in that method, it's
just, you could literally read it like a

394
00:17:32,090 --> 00:17:34,750
paragraph and it would read cohesively.

395
00:17:35,694 --> 00:17:36,754
Yeah, I just, I don't know.

396
00:17:36,754 --> 00:17:40,794
I scrapped that, that like file so many
times and then decided like, this is

397
00:17:40,794 --> 00:17:42,234
something that is so specific.

398
00:17:42,234 --> 00:17:44,674
I need to literally write it like a story.

399
00:17:44,674 --> 00:17:51,284
Um, and it remains one of the pieces of
code that I like maintaining the most for

400
00:17:51,284 --> 00:17:54,734
some reason, cause it's so obvious what
everything does.

401
00:17:54,734 --> 00:18:00,424
And you can just like at a glance, you can
look at the entire critical flow and just

402
00:18:00,424 --> 00:18:03,354
read it like a book and go, Oh, like
that's where I need to go.

403
00:18:03,354 --> 00:18:05,074
Or I can add this into that point.

404
00:18:05,074 --> 00:18:05,966
I don't know.

405
00:18:05,966 --> 00:18:07,676
Just a random nugget for you.

406
00:18:07,676 --> 00:18:08,546
That's interesting.

407
00:18:08,546 --> 00:18:09,706
Cause that was my first question.

408
00:18:09,706 --> 00:18:13,446
Like that would be my most, my first
thought is like, have you made some

409
00:18:13,446 --> 00:18:19,046
changes to this since then and found it
malleable along with just like

410
00:18:19,046 --> 00:18:19,606
declarative?

411
00:18:19,606 --> 00:18:22,306
Yeah, it, it really is a joy to maintain.

412
00:18:22,306 --> 00:18:25,986
And I, this is like for some reason it's
an anomaly.

413
00:18:25,986 --> 00:18:27,806
I don't write other code like this.

414
00:18:27,806 --> 00:18:28,876
I haven't used it.

415
00:18:28,876 --> 00:18:30,226
I don't know.

416
00:18:30,226 --> 00:18:32,906
Sounds like it's working in JavaScript.

417
00:18:32,906 --> 00:18:35,278
It feels really natural because in
JavaScript, I

418
00:18:35,278 --> 00:18:36,748
pretty much don't use classes or anything.

419
00:18:36,748 --> 00:18:41,988
It's just functions stored in files, which
is honestly, that's another conversation

420
00:18:41,988 --> 00:18:46,848
where I like, if you write functional
JavaScript, it's pretty much just object

421
00:18:46,848 --> 00:18:51,438
orientation, except like each file is your
class.

422
00:18:51,438 --> 00:18:53,498
All the functions that are in there are
your methods.

423
00:18:53,498 --> 00:18:57,918
And then all the, you know, just variables
that you say, let, those are your

424
00:18:57,918 --> 00:19:03,078
properties and you pretty much have a
class, you know, random nugget.

425
00:19:03,078 --> 00:19:04,622
But so in,

426
00:19:04,622 --> 00:19:09,922
In PHP, I'm doing like object oriented
programming and this kind of like callback

427
00:19:09,922 --> 00:19:12,502
craziness just doesn't feel as natural for
some reason.

428
00:19:12,502 --> 00:19:13,082
I don't know.

429
00:19:13,082 --> 00:19:16,102
Maybe that's why I haven't written code
like that in the backend.

430
00:19:16,102 --> 00:19:16,322
Interesting.

431
00:19:16,322 --> 00:19:18,732
So is it like the kind of callbacky
chaining thing?

432
00:19:18,732 --> 00:19:21,282
What makes it feel like you can do this
kind of thing?

433
00:19:21,282 --> 00:19:23,252
So I think that's what makes it feel that
way.

434
00:19:23,252 --> 00:19:27,492
Like that, like when I'm writing
JavaScript, it's very free form and, and

435
00:19:27,492 --> 00:19:29,042
callbacky in that way.

436
00:19:29,042 --> 00:19:32,292
And in PHP for whatever reason, I just
don't write code that way.

437
00:19:32,292 --> 00:19:33,902
And I think it's because things are up.

438
00:19:33,902 --> 00:19:36,432
like object oriented and more rigid.

439
00:19:36,432 --> 00:19:41,342
That would sort of make sense to me
because like with OO you're sort of, I

440
00:19:41,342 --> 00:19:44,302
feel like the flow is not necessarily
obvious.

441
00:19:44,502 --> 00:19:49,142
Like it's not clear that like A and then B
and then C and then D happen a lot of the

442
00:19:49,142 --> 00:19:52,722
time because like any of these methods
could be called by some external caller at

443
00:19:52,722 --> 00:19:53,192
any time.

444
00:19:53,192 --> 00:19:56,332
The state could be kind of anything when
those things are called at any time.

445
00:19:56,332 --> 00:20:00,232
But if you have like a explicit, like
these things are chained together in this

446
00:20:00,232 --> 00:20:03,296
way and the data is going to flow between
them this way, that sort of...

447
00:20:03,296 --> 00:20:05,746
eloquenty kind of interface to me makes
sense.

448
00:20:05,746 --> 00:20:07,846
Yeah, I think that captures it perfectly.

449
00:20:07,846 --> 00:20:08,306
Yep.

450
00:20:08,306 --> 00:20:09,866
I think that's why.

451
00:20:09,866 --> 00:20:12,116
How do you feel about functional versus
OO?

452
00:20:12,116 --> 00:20:13,666
Any thoughts on that?

453
00:20:13,726 --> 00:20:16,776
Yeah, I sort of I'm not a functional
programmer.

454
00:20:16,776 --> 00:20:21,906
I don't know the like capital F functional
programming like fancy lambda stuff.

455
00:20:21,906 --> 00:20:23,646
Occasionally in JavaScript.

456
00:20:23,666 --> 00:20:24,966
Are you sure?

457
00:20:25,106 --> 00:20:29,136
I feel like I think I feel like functional
programming has like a little bit of a

458
00:20:29,136 --> 00:20:33,386
scary reputation as being like maybe more
than it is.

459
00:20:33,646 --> 00:20:35,046
Yeah, maybe I'm not sure.

460
00:20:35,046 --> 00:20:38,406
It's just like calling functions and
passing data between them.

461
00:20:38,406 --> 00:20:41,166
In that sense, I'm a functional
programmer.

462
00:20:41,166 --> 00:20:42,186
Yeah.

463
00:20:42,186 --> 00:20:42,556
Yeah.

464
00:20:42,556 --> 00:20:50,856
I guess I don't, you know, there's like a
functional programmer that is like never

465
00:20:50,856 --> 00:20:53,096
writes or doesn't write a loop.

466
00:20:53,096 --> 00:20:54,026
Like there's no loop.

467
00:20:54,026 --> 00:20:55,116
It's just recursion.

468
00:20:55,116 --> 00:20:58,046
Like that kind of functional programming
is like programming.

469
00:20:58,046 --> 00:20:59,306
I don't really do.

470
00:20:59,306 --> 00:21:01,946
That's like pattern matching all the way
down.

471
00:21:01,946 --> 00:21:02,798
That's not.

472
00:21:02,798 --> 00:21:04,098
my programming.

473
00:21:04,618 --> 00:21:09,228
But when I'm writing JavaScript, it's
pretty functional and I really like it.

474
00:21:09,228 --> 00:21:14,128
And there are, there are a lot of times
where like, I'll wrap a callback in

475
00:21:14,128 --> 00:21:17,898
another callback and pass that around or
decorate a callback with another one, or

476
00:21:17,898 --> 00:21:21,178
even occasionally, what do you call that?

477
00:21:21,178 --> 00:21:26,718
What's the term for basically taking a
function and assigning parameters to it

478
00:21:26,718 --> 00:21:28,778
and then passing that as a new function?

479
00:21:28,778 --> 00:21:29,824
Kearning?

480
00:21:30,380 --> 00:21:31,500
Functional?

481
00:21:31,500 --> 00:21:32,830
No, that's right.

482
00:21:32,850 --> 00:21:34,690
It's functional.

483
00:21:34,930 --> 00:21:37,450
Are you talking about like partial
application where you've sentenced some of

484
00:21:37,450 --> 00:21:38,370
the arguments?

485
00:21:38,370 --> 00:21:40,070
It's partial application, but whatever.

486
00:21:40,070 --> 00:21:41,870
There's some functional term for it.

487
00:21:41,870 --> 00:21:46,110
But yes, that's what I mean, like .bind in
JavaScript where you can do that.

488
00:21:46,390 --> 00:21:49,120
And there's times where I'll do things
like that.

489
00:21:49,120 --> 00:21:51,150
I'm like, oh, that's pretty functional.

490
00:21:51,370 --> 00:21:52,730
Interesting.

491
00:21:52,930 --> 00:21:54,770
Yeah, I guess, yeah, that feels
functional.

492
00:21:54,770 --> 00:21:57,230
I think to me is I could be wrong.

493
00:21:57,230 --> 00:22:00,060
I mean, like the functional programming
zealots might.

494
00:22:00,334 --> 00:22:02,374
Tell me I'm wrong for this.

495
00:22:02,374 --> 00:22:05,814
But I feel like the sort of the big
difference to me of like OO and functional

496
00:22:05,814 --> 00:22:12,244
is like, do you wrap up your data and the
things that operate on that data into this

497
00:22:12,244 --> 00:22:14,774
like bag that is a class?

498
00:22:15,174 --> 00:22:18,654
And does it have state that changes over
time and like the sort of methods are

499
00:22:18,654 --> 00:22:19,654
operating on that state?

500
00:22:19,654 --> 00:22:20,834
Okay, you're doing OO.

501
00:22:20,834 --> 00:22:24,054
And like, are you creating a graph of
these objects and having them call things

502
00:22:24,054 --> 00:22:25,794
to each other and pass data around?

503
00:22:25,834 --> 00:22:27,914
Cool, you probably are doing OO.

504
00:22:28,154 --> 00:22:30,478
Do you, does your function,

505
00:22:30,478 --> 00:22:35,328
get all of its data passed in as arguments
and then return data that goes somewhere

506
00:22:35,328 --> 00:22:38,318
else, you're probably doing functional
programming.

507
00:22:38,558 --> 00:22:41,678
I feel like that's the main, in my head,
that is the main divide.

508
00:22:41,678 --> 00:22:42,298
I like that.

509
00:22:42,298 --> 00:22:45,158
I think that's a very reasonable
definition.

510
00:22:45,158 --> 00:22:46,698
Like that's a good handshake definition.

511
00:22:46,698 --> 00:22:50,008
Like, can we just like be like reasonable
here and say that this is a distinction?

512
00:22:50,008 --> 00:22:53,498
Cause I think it is a totally legitimate
distinction.

513
00:22:53,498 --> 00:22:57,488
And it is, I tweeted about this the other
day that I really feel like two

514
00:22:57,488 --> 00:22:59,278
programmers pretty much every day.

515
00:22:59,278 --> 00:23:02,878
Because in PHP, I tend towards object
orientation.

516
00:23:03,098 --> 00:23:06,138
And in JavaScript, I almost never write a
class.

517
00:23:06,138 --> 00:23:10,218
Like I've refactored out pretty much every
class in Alpine.

518
00:23:10,578 --> 00:23:12,688
And when I write JavaScript, it's just
functions.

519
00:23:12,688 --> 00:23:14,988
It's very functional as you describe it.

520
00:23:14,988 --> 00:23:17,198
And in PHP, it's very object oriented.

521
00:23:17,198 --> 00:23:19,058
And I love both.

522
00:23:19,278 --> 00:23:22,238
It's like I have two different hats on for
some reason.

523
00:23:22,238 --> 00:23:22,818
No, no.

524
00:23:22,818 --> 00:23:24,948
You have to pick a side and hate the other
one.

525
00:23:24,948 --> 00:23:25,638
Do I?

526
00:23:25,638 --> 00:23:26,198
Right.

527
00:23:26,198 --> 00:23:28,110
I'm pretty sure that's required.

528
00:23:28,110 --> 00:23:30,270
Right, that is the way to do this.

529
00:23:30,510 --> 00:23:32,050
We're programmers.

530
00:23:32,050 --> 00:23:33,880
We're supposed to have strong opinions
about this.

531
00:23:33,880 --> 00:23:36,340
I love, I imagine like you'd feel the
same.

532
00:23:36,340 --> 00:23:36,720
I don't know.

533
00:23:36,720 --> 00:23:41,330
I love the rigidity of object orientation
at times.

534
00:23:41,330 --> 00:23:47,870
And I also love the freeform nature of,
you know, JavaScript functional

535
00:23:47,870 --> 00:23:48,990
programming.

536
00:23:49,250 --> 00:23:49,810
Gotcha.

537
00:23:49,810 --> 00:23:50,650
Yeah.

538
00:23:51,070 --> 00:23:58,158
I think I've been kind of radicalized by
Rich Hickey and Clojure and just

539
00:23:58,158 --> 00:24:05,498
I think I'm on the functional programming
is just tends to be simpler to understand,

540
00:24:05,898 --> 00:24:11,178
train, and that it's a good idea to have
data that's immutable and to pass it

541
00:24:11,178 --> 00:24:16,868
between functions and to not build a big
graph of constantly mutating objects with

542
00:24:16,868 --> 00:24:17,818
internal state.

543
00:24:17,818 --> 00:24:23,308
Yeah, I guess like mutability is one thing
and the definition that we laid out of

544
00:24:23,308 --> 00:24:27,726
JavaScript doesn't always imply a
mutability, you know, like there are...

545
00:24:27,726 --> 00:24:32,886
Um, yeah, but I mean, immutability, I
definitely agree is, is a value.

546
00:24:32,886 --> 00:24:37,146
Um, it, Adam has been like working on
this, like Tailwind Re -Reverber and I'm

547
00:24:37,146 --> 00:24:42,206
just watching his tweets and, um, and he's
like, I don't know if you saw this tweet

548
00:24:42,206 --> 00:24:48,666
of his, that was, uh, like the, the noob,
the brain, and then the Jedi, you know,

549
00:24:48,666 --> 00:24:54,246
and it was like mutable temporary
variables, you know, for loops, whatever.

550
00:24:54,246 --> 00:24:56,430
And then like the, the big brain is like,

551
00:24:56,430 --> 00:24:59,610
immutability and, you know, pure
functional, whatever.

552
00:24:59,610 --> 00:25:03,710
And then the Jedi is like mutability for
loops.

553
00:25:03,710 --> 00:25:07,670
Cause he's talking about performance and
how like immutability has like memory

554
00:25:07,670 --> 00:25:11,130
costs and you know, all of these function
calls are costly.

555
00:25:11,130 --> 00:25:16,090
Like in, with like deep performance,
mutability is more performant and doing

556
00:25:16,090 --> 00:25:20,690
like simple long functions that have like
four loops instead of functional

557
00:25:20,690 --> 00:25:23,410
transformations and whatever is, I don't
know.

558
00:25:23,410 --> 00:25:25,326
I thought it was interesting and it is
like,

559
00:25:25,326 --> 00:25:29,476
randomly something that I have encountered
with Alpine where like I try to use for

560
00:25:29,476 --> 00:25:32,766
loops in critical paths instead of
functional transformations because they're

561
00:25:32,766 --> 00:25:35,776
just like cheaper they're faster and
cheaper than like everything else, you

562
00:25:35,776 --> 00:25:37,156
know Mm -hmm.

563
00:25:37,156 --> 00:25:40,526
Yeah, I don't know but I'm with you Mm
-hmm.

564
00:25:40,526 --> 00:25:44,896
Yeah, I can't remember if I told the story
on the last pod but I taught briefly at a

565
00:25:44,896 --> 00:25:51,186
friend's programming boot camp and So I
was exposed to like new developers for the

566
00:25:51,186 --> 00:25:55,118
first time in like a while and we gave
them a program exercise

567
00:25:55,118 --> 00:25:58,878
And the goal is for them to learn proper
object -oriented programming, because

568
00:25:58,878 --> 00:26:00,918
they're trying to learn Ruby and Rails.

569
00:26:01,378 --> 00:26:09,858
And I was surprised to learn that a huge
percentage of people were basically just

570
00:26:09,858 --> 00:26:14,418
using class methods and passing data
around between them and not instantiating

571
00:26:14,418 --> 00:26:17,658
anything and having no be static methods
in it.

572
00:26:17,658 --> 00:26:18,108
Yeah.

573
00:26:18,108 --> 00:26:18,578
Exactly.

574
00:26:18,578 --> 00:26:21,258
So they were doing functional programming.

575
00:26:21,262 --> 00:26:25,122
Yeah, like they just had like there's no
little no local instance data they were

576
00:26:25,122 --> 00:26:27,602
just like taking data and throwing into a
function and then taking that and throwing

577
00:26:27,602 --> 00:26:31,422
into the next function and It was funny
because I was like I get why you're doing

578
00:26:31,422 --> 00:26:33,992
this like it is Easier to understand.

579
00:26:33,992 --> 00:26:38,182
Yeah, and I'm here did I have to kind of
teach you that like this is a bad habit

580
00:26:38,182 --> 00:26:41,812
actually in the pair in this paradigm that
you've chosen and like I'm gonna show you

581
00:26:41,812 --> 00:26:45,802
how to do it in the OO way, but like It
was interesting that the kind of beginner

582
00:26:45,802 --> 00:26:49,422
mind to programming reached for that

583
00:26:49,422 --> 00:26:50,002
approach.

584
00:26:50,002 --> 00:26:51,902
And I was like, yeah, I get it.

585
00:26:51,902 --> 00:26:52,722
That's fair.

586
00:26:52,722 --> 00:26:54,782
Like, that is that's kind of interesting.

587
00:26:54,782 --> 00:26:58,112
Like that that's there's some sort of
you're saying like, this is like evidence

588
00:26:58,112 --> 00:27:02,922
that, that not only is like, it's just
more intuitive, not only is it better in

589
00:27:02,922 --> 00:27:07,892
ways for like, reliability, it actually is
more intuitive to understand that our

590
00:27:07,892 --> 00:27:11,102
evidence is these newcomers who just into
it.

591
00:27:11,102 --> 00:27:16,852
But you're right that that I think that is
a common thing is like, I remember early

592
00:27:16,852 --> 00:27:18,798
on hearing the advice like,

593
00:27:18,798 --> 00:27:23,638
don't use static methods because there's
just the temptation so many times to just

594
00:27:23,638 --> 00:27:26,858
have to name a function that does
something and you pass stuff in and you

595
00:27:26,858 --> 00:27:27,508
get something out.

596
00:27:27,508 --> 00:27:30,018
Like that's the most, that's like basic.

597
00:27:30,018 --> 00:27:35,818
I've like forgot about some of this stuff,
but in, in the O O O O O bootcamp, it's

598
00:27:35,818 --> 00:27:41,318
like stop with the statics, you know, like
we have the blueprints of the houses with

599
00:27:41,318 --> 00:27:42,894
the, you know, it's like, right.

600
00:27:42,894 --> 00:27:46,884
You need to make a class and I need to
have data locally inside that class they

601
00:27:46,884 --> 00:27:49,734
need to call methods that operate on that
and don't expose that data because it has

602
00:27:49,734 --> 00:27:54,854
to be secret and like right all the stuff
is private and There is a lot of ceremony.

603
00:27:54,854 --> 00:27:59,724
Yeah, I just want to like be like value
equals X and then I want to pass like this

604
00:27:59,724 --> 00:28:02,874
into the first function and up and get a
new thing back I want to pass that into

605
00:28:02,874 --> 00:28:06,134
the next function and get a new thing back
and I'll have the answer and I'm like I

606
00:28:06,134 --> 00:28:09,034
get you I see why you want to do this.

607
00:28:09,034 --> 00:28:11,344
Yes, that that's really funny.

608
00:28:11,344 --> 00:28:12,198
I

609
00:28:12,366 --> 00:28:17,306
Because that, I mean, OO is such a, has
like a steep learning curve because of all

610
00:28:17,306 --> 00:28:20,106
of this extra ceremony that just isn't
intuitive.

611
00:28:20,106 --> 00:28:24,766
And you're just like hitting people over
the head with these like houses and car

612
00:28:24,766 --> 00:28:30,286
manufacturer analogies, like trying to get
people to understand or to have an

613
00:28:30,286 --> 00:28:31,116
intuition for it.

614
00:28:31,116 --> 00:28:35,016
But it, yeah, it just doesn't, it doesn't,
doesn't map that easily.

615
00:28:35,016 --> 00:28:40,106
I'm trying to think of instances where I
like OO.

616
00:28:40,686 --> 00:28:41,936
And I do think it's better.

617
00:28:41,936 --> 00:28:45,096
I'm trying to think of things and I'm a
little hard pressed.

618
00:28:45,096 --> 00:28:46,246
Here's one.

619
00:28:46,286 --> 00:28:47,706
Here's one for you.

620
00:28:47,706 --> 00:28:55,416
So in, uh, in live wires, JavaScript,
there's like a request bus, you know?

621
00:28:55,416 --> 00:28:58,686
So if you think about like a component has
to make a network request when it's

622
00:28:58,686 --> 00:29:03,216
updated to do that whole life cycle thing
and that, that request has a whole life

623
00:29:03,216 --> 00:29:04,366
cycle of its own.

624
00:29:04,366 --> 00:29:07,534
And there might be multiple components on
a page.

625
00:29:07,534 --> 00:29:11,264
that each need to be able to send
requests, but then they potentially get

626
00:29:11,264 --> 00:29:15,064
bundled together into the same request if
they happen at the same time to save on

627
00:29:15,064 --> 00:29:16,554
network resources.

628
00:29:17,314 --> 00:29:20,574
But their responses need to come back in
the right order and everything.

629
00:29:20,574 --> 00:29:24,294
So there's a bus within a bus.

630
00:29:24,294 --> 00:29:28,964
There's an update bus for one component
that can have multiple updates per network

631
00:29:28,964 --> 00:29:33,114
request, and then a request bus for
multiple components.

632
00:29:33,314 --> 00:29:34,714
And these buses,

633
00:29:34,766 --> 00:29:39,266
These individual requests, I found, this
is one of the few times I broke into OO.

634
00:29:39,266 --> 00:29:43,356
I created a class called like, one is
called commit, like you're committing an

635
00:29:43,356 --> 00:29:46,306
update to the server and one is called
request.

636
00:29:46,306 --> 00:29:50,446
And these have state, they have the
updates that are going to the server.

637
00:29:50,446 --> 00:29:53,346
They have like all of OO type stuff.

638
00:29:53,346 --> 00:29:58,516
And then they know how to turn themselves
into JSON payloads and they know how to

639
00:29:58,516 --> 00:30:00,696
handle their response and all this stuff.

640
00:30:00,696 --> 00:30:02,126
And I found it to be like,

641
00:30:02,126 --> 00:30:06,836
really nice and reliable instead of just
free form like data flow to manage all

642
00:30:06,836 --> 00:30:08,106
this, you know?

643
00:30:08,766 --> 00:30:13,286
So I don't know, do you ever find yourself
like with a heart still for objects?

644
00:30:14,786 --> 00:30:19,636
I do so much less programming now that I
don't have like a great like recent answer

645
00:30:19,636 --> 00:30:20,366
to that.

646
00:30:20,366 --> 00:30:21,306
Yeah.

647
00:30:21,806 --> 00:30:25,506
So I like I mean, I I do have a love for
Rails.

648
00:30:25,506 --> 00:30:29,026
So it's like I when I if I need to write a
web app, I'm still I'm still going to use

649
00:30:29,026 --> 00:30:29,256
Rails.

650
00:30:29,256 --> 00:30:32,168
I'm not actually going to use like a
closure web framework or something.

651
00:30:32,302 --> 00:30:39,002
So I guess it's sort of the case where I
tend to write my, even within the OO

652
00:30:39,002 --> 00:30:41,402
paradigm, I tend to write my code fairly
functionally.

653
00:30:41,402 --> 00:30:44,842
I'm trying to avoid mutations or side
effects.

654
00:30:44,842 --> 00:30:48,842
I'm trying to have things typically be as
pure as possible when I can.

655
00:30:49,722 --> 00:30:54,802
But real functional programming has never
been tried.

656
00:30:54,922 --> 00:30:58,482
In practice, when I need to get stuff
done, I'm usually just using OO.

657
00:30:58,482 --> 00:31:01,222
So it's the classic hypocrisy, I think.

658
00:31:01,550 --> 00:31:10,000
And I think to add onto your hypocrisy
here, I think that functional, like you

659
00:31:10,000 --> 00:31:12,130
saying like functional programming is
easier to intuit.

660
00:31:12,130 --> 00:31:13,110
I totally agree.

661
00:31:13,110 --> 00:31:17,610
And I love that point about like people
just tending towards static methods.

662
00:31:17,610 --> 00:31:22,690
But if they went to a functional bootcamp,
they'd be telling them again, they'd,

663
00:31:22,690 --> 00:31:25,750
they'd want to reach for a for loop and
they'd be like, no, no, you can't use a

664
00:31:25,750 --> 00:31:29,130
for loop, you know, or they would want to
like create.

665
00:31:29,486 --> 00:31:33,426
I wouldn't say that for loops are banned
in functional programming.

666
00:31:33,426 --> 00:31:35,946
Isn't there languages that don't have a
loop?

667
00:31:35,946 --> 00:31:40,406
I'm trying to think of, is it like Elm
doesn't have a loop?

668
00:31:40,706 --> 00:31:41,736
Elm might not, yeah.

669
00:31:41,736 --> 00:31:42,746
Maybe Elixir?

670
00:31:42,746 --> 00:31:44,366
I don't know.

671
00:31:44,866 --> 00:31:47,946
They'd be like, there's no loops.

672
00:31:49,186 --> 00:31:54,784
Maybe it's an Elixir, you would call a
class method.

673
00:31:55,342 --> 00:31:59,852
And then that method would call itself
until the parameters change and it would

674
00:31:59,852 --> 00:32:01,132
match a different method.

675
00:32:01,132 --> 00:32:03,382
And that's the exit out of the loop.

676
00:32:03,382 --> 00:32:08,322
And then they have to understand recursion
and like, and having ensuring there are

677
00:32:08,322 --> 00:32:12,272
cases where the, where there's a, an exit
for the recursion and that's its own level

678
00:32:12,272 --> 00:32:21,002
of, you know, and that whatever the, like
all the names, like tuples and tuples and

679
00:32:21,002 --> 00:32:24,670
yeah, parameter assignment and.

680
00:32:24,736 --> 00:32:30,206
lambdas and whatever those other funny
words are that no one understands thunks.

681
00:32:30,206 --> 00:32:31,426
Yeah, thunks.

682
00:32:31,426 --> 00:32:32,186
I don't know.

683
00:32:32,186 --> 00:32:35,396
But anyway, I'm sure there's like a whole
other ceremony that if they went to the

684
00:32:35,396 --> 00:32:38,386
functional boot camp, they'd be like,
yeah, is this I just want to write a

685
00:32:38,386 --> 00:32:39,606
class, you know?

686
00:32:39,606 --> 00:32:39,896
Yeah.

687
00:32:39,896 --> 00:32:42,916
And I don't think like, oh, beginners
understand this really fast is actually a

688
00:32:42,916 --> 00:32:44,766
great argument for programming language
design.

689
00:32:44,766 --> 00:32:45,286
OK.

690
00:32:45,286 --> 00:32:47,366
You know, it's like it's a it's a factor.

691
00:32:47,366 --> 00:32:48,046
Interesting.

692
00:32:48,046 --> 00:32:49,726
Like ease of adoption is one thing.

693
00:32:49,726 --> 00:32:53,288
But really, I think you actually want
like.

694
00:32:53,494 --> 00:32:58,114
intermediates to experts to be extremely
productive and that's kind of the better

695
00:32:58,114 --> 00:33:00,774
like score to grade on.

696
00:33:00,794 --> 00:33:04,424
So yes, for sure newbies would trip up on
other on new things, different things,

697
00:33:04,424 --> 00:33:05,574
most likely.

698
00:33:05,974 --> 00:33:11,234
So how do you feel about like C family
languages, like all of these, you know,

699
00:33:11,234 --> 00:33:17,484
PHP and JavaScript and things that are
like C family that have all the stuff we

700
00:33:17,484 --> 00:33:21,094
know, you know, like functions and.

701
00:33:21,646 --> 00:33:24,966
variables and you know things like that
where these functional languages are I

702
00:33:24,966 --> 00:33:30,936
would consider them not see family
languages do you think that like That at a

703
00:33:30,936 --> 00:33:35,526
certain level a code base is harmed or a
programmer is harmed by some of the

704
00:33:35,526 --> 00:33:41,436
offerings of a C family language Guess it
I'm not sure so like if if we're talking

705
00:33:41,436 --> 00:33:47,516
like malloc level things like we say you
know what malloc is Yes, it's memory

706
00:33:47,516 --> 00:33:49,836
allocation and see oh, okay.

707
00:33:49,836 --> 00:33:51,470
That's one of those words that I've

708
00:33:51,470 --> 00:33:54,350
only read the spelling, you know?

709
00:33:54,350 --> 00:33:55,250
Yeah, yeah.

710
00:33:55,250 --> 00:33:58,260
Like I used to say, Tutter real, like
random stuff like that.

711
00:33:58,260 --> 00:33:59,030
Oh, interesting.

712
00:33:59,030 --> 00:33:59,490
Yeah.

713
00:33:59,490 --> 00:34:00,490
Yeah.

714
00:34:00,490 --> 00:34:00,900
Yeah.

715
00:34:00,900 --> 00:34:05,410
So like, I think there were design choices
made that have caused like innumerable

716
00:34:05,410 --> 00:34:06,450
bugs.

717
00:34:06,450 --> 00:34:11,680
Like nil being a thing, for example, is
like the trillion dollar design mistake.

718
00:34:11,680 --> 00:34:17,370
I would people say, and I agree with
manual memory management, you know, if you

719
00:34:17,370 --> 00:34:18,030
really need it.

720
00:34:18,030 --> 00:34:18,280
Sure.

721
00:34:18,280 --> 00:34:20,794
But it's pretty, pretty error prone.

722
00:34:21,262 --> 00:34:23,902
So yes, there's there's lots of sharp
edges.

723
00:34:23,902 --> 00:34:26,502
I'm not here to say that everything should
be written in functional functional

724
00:34:26,502 --> 00:34:27,792
languages, right?

725
00:34:27,792 --> 00:34:32,402
I just think if I My forever language is
definitely functional.

726
00:34:32,402 --> 00:34:38,452
I think For me for like the things that I
want to do generally They're like sort of

727
00:34:38,452 --> 00:34:42,462
like my retirement language like what I
will like retire to write my beautiful

728
00:34:42,462 --> 00:34:49,134
Yeah, conceptually pure Satisfying to my
brain and my soul kind of

729
00:34:49,134 --> 00:34:52,394
code is going to be in some sort of
functional language, probably a Lisp,

730
00:34:52,394 --> 00:34:54,794
because there's wonderful things about
those languages.

731
00:34:54,934 --> 00:34:59,054
But yeah, I don't need to like have
everyone agree with me or do that too for

732
00:34:59,054 --> 00:35:00,214
all their work.

733
00:35:00,794 --> 00:35:07,314
I will say that I'm like acutely aware of
how often I step on the rake of like

734
00:35:07,314 --> 00:35:10,254
calling blank on undefined or something,
you know, something like that.

735
00:35:10,254 --> 00:35:16,764
How those nulls and undefined leak into my
runtime code in both PHP and JavaScript is

736
00:35:16,764 --> 00:35:18,542
kind of alarming and

737
00:35:18,542 --> 00:35:23,382
And I think some of it is just, you're so
used to it that you don't identify it as

738
00:35:23,382 --> 00:35:25,422
like a problem that's avoidable.

739
00:35:25,422 --> 00:35:29,322
Like there are languages that don't have
runtime errors.

740
00:35:29,322 --> 00:35:31,942
They definitely don't have runtime errors
like that, you know?

741
00:35:31,942 --> 00:35:32,282
Right.

742
00:35:32,282 --> 00:35:32,822
Yeah.

743
00:35:32,822 --> 00:35:33,822
At least that one.

744
00:35:33,822 --> 00:35:34,142
Yeah.

745
00:35:34,142 --> 00:35:38,222
And that, that one's like kind of a solved
problem in like, in certain languages,

746
00:35:38,222 --> 00:35:41,082
which is the thing where it's like, you
know, if you, if you have an optional type

747
00:35:41,082 --> 00:35:44,792
that you always have to unwrap, you will
never accidentally like blow up in that

748
00:35:44,792 --> 00:35:45,162
way.

749
00:35:45,162 --> 00:35:45,652
Right.

750
00:35:45,652 --> 00:35:46,222
And.

751
00:35:46,222 --> 00:35:47,732
That's pretty nice.

752
00:35:47,732 --> 00:35:49,802
That's a pretty good win right there.

753
00:35:49,802 --> 00:35:53,262
And so to just not have that support at
the language level is kind of like, that's

754
00:35:53,262 --> 00:35:54,322
too bad.

755
00:35:55,342 --> 00:35:55,522
Yeah.

756
00:35:55,522 --> 00:36:00,112
Mutability feels similar, like immutable
data structures, I think, also prevent a

757
00:36:00,112 --> 00:36:01,722
big class of errors.

758
00:36:02,902 --> 00:36:07,502
So there are things that I think are nice
to have that are too bad that aren't

759
00:36:07,502 --> 00:36:08,462
everywhere.

760
00:36:09,062 --> 00:36:10,762
Yeah, I think I agree.

761
00:36:10,762 --> 00:36:13,742
And I don't consider myself an academic
programmer.

762
00:36:13,742 --> 00:36:15,662
I very much feel like I'm surfing.

763
00:36:15,662 --> 00:36:18,982
Like I'm just kind of taking it as it
comes and doing what feels right.

764
00:36:18,982 --> 00:36:23,162
And I think sometimes that probably
benefits me and sometimes it harms me by

765
00:36:23,162 --> 00:36:28,972
not like really exploring or like being
rigorous about some of the like rakes I'm

766
00:36:28,972 --> 00:36:30,502
stepping on, you know?

767
00:36:31,202 --> 00:36:31,502
All right.

768
00:36:31,502 --> 00:36:33,422
I want to hit you with some some
questions.

769
00:36:33,422 --> 00:36:35,722
Let's do some some one offs.

770
00:36:35,722 --> 00:36:36,102
All right.

771
00:36:36,102 --> 00:36:40,162
How do you start something complicated?

772
00:36:40,322 --> 00:36:43,602
If you're like built like building
something hard, you're not quite sure how

773
00:36:43,602 --> 00:36:44,192
it's going to look.

774
00:36:44,192 --> 00:36:45,454
Are you a?

775
00:36:45,454 --> 00:36:47,734
Do you like start with a prototype?

776
00:36:47,734 --> 00:36:50,134
Do you build a small sandbox example?

777
00:36:50,134 --> 00:36:51,654
Do you sketch on a whiteboard?

778
00:36:51,654 --> 00:36:55,134
Do you have a notebook with words,
diagrams?

779
00:36:55,134 --> 00:36:57,434
How do you start getting the lay of the
land and figuring out like how to make

780
00:36:57,434 --> 00:36:58,374
progress?

781
00:36:59,234 --> 00:37:01,254
It's all of the above.

782
00:37:01,574 --> 00:37:07,784
I think I, yeah, I'm very like sporadic
and inconsistent in my approach to that

783
00:37:07,784 --> 00:37:09,034
kind of thing.

784
00:37:09,034 --> 00:37:14,054
Cause it's really like what feels like I
have the best chance of...

785
00:37:14,318 --> 00:37:18,948
of getting to the hard parts, I guess, and
like rooting out some clarity in the

786
00:37:18,948 --> 00:37:19,878
obscurity.

787
00:37:19,878 --> 00:37:24,188
So I always have a notebook on my desk and
I found like this, I've gone through a

788
00:37:24,188 --> 00:37:25,498
bunch of different techniques.

789
00:37:25,498 --> 00:37:31,238
Over the years I've realized pen and paper
is crucial to my everyday.

790
00:37:31,318 --> 00:37:34,598
And I used to have just stacks of paper
everywhere.

791
00:37:34,598 --> 00:37:36,178
And so that was pretty unwieldy.

792
00:37:36,178 --> 00:37:41,088
So I bought like a paper roll to put, to
like mount on my desk and just pull up

793
00:37:41,088 --> 00:37:42,446
like butcher paper.

794
00:37:42,446 --> 00:37:44,626
and then my whole desk is a piece of
paper.

795
00:37:44,626 --> 00:37:49,586
Yeah, because like whiteboards, they're,
for a handful of reasons, they just

796
00:37:49,586 --> 00:37:51,376
haven't worked for me in making a whole
desk a whiteboard.

797
00:37:51,376 --> 00:37:52,076
I've done that.

798
00:37:52,076 --> 00:37:56,606
Like IKEA has like a whiteboard table that
I've used as a desk in the past.

799
00:37:56,846 --> 00:37:58,606
So this I really like.

800
00:37:58,606 --> 00:38:02,486
And the coolest part is you keep a ledger
of everything you've written.

801
00:38:02,486 --> 00:38:07,586
So all these little like notes and to
-dos, as you pull more slack, in a perfect

802
00:38:07,586 --> 00:38:10,126
world, you have a second roll that you
roll up.

803
00:38:10,126 --> 00:38:12,006
But I just have like,

804
00:38:12,014 --> 00:38:14,654
you know, 50 feet of paper.

805
00:38:15,254 --> 00:38:21,654
So, but like last month I decided that
this is too messy and there's too much

806
00:38:21,654 --> 00:38:22,974
paper in my office.

807
00:38:22,974 --> 00:38:24,954
So I've just switched to a notebook.

808
00:38:24,954 --> 00:38:28,114
I'll just a spiral like, I'm sad.

809
00:38:28,114 --> 00:38:29,404
That was such a cool idea.

810
00:38:29,404 --> 00:38:29,964
I love that.

811
00:38:29,964 --> 00:38:34,364
And it was nice because you could get that
feeling of like a beautiful clean desk and

812
00:38:34,364 --> 00:38:38,382
workspace and thought space every time you
pull off like another chunk.

813
00:38:38,382 --> 00:38:41,942
but I couldn't get the infrastructure
dialed in and I was too lazy to like do it

814
00:38:41,942 --> 00:38:42,522
well.

815
00:38:42,522 --> 00:38:44,882
This is an indie business waiting to
happen.

816
00:38:44,882 --> 00:38:49,422
Honestly, I think it would be, I thought
like really hard about like the different,

817
00:38:49,422 --> 00:38:54,252
like just for an MVP, I could use like a
paint roller thing and like put the roll

818
00:38:54,252 --> 00:38:58,762
on the paint roller at the end of my desk
as like the axle and just roll up on each

819
00:38:58,762 --> 00:38:59,302
end.

820
00:38:59,302 --> 00:39:00,242
Yeah.

821
00:39:00,242 --> 00:39:04,382
I mean, I like the, I love the sound of
like a big, a big swath of it.

822
00:39:04,382 --> 00:39:06,242
So it can be like really wide.

823
00:39:06,242 --> 00:39:06,982
Yeah.

824
00:39:06,982 --> 00:39:07,662
And.

825
00:39:07,662 --> 00:39:10,542
I like the idea of like your history is
retained because you're just kind of

826
00:39:10,542 --> 00:39:12,512
rolling it onto the other the other
rollers.

827
00:39:12,512 --> 00:39:15,832
You're like, even if you never go look at
it, you're like, you just have that like

828
00:39:15,832 --> 00:39:17,492
comfort of like, OK, I know I can go back.

829
00:39:17,492 --> 00:39:18,482
It's in there.

830
00:39:18,482 --> 00:39:21,992
And when you want a new when you're ready
for a new thing, you just like roll, roll,

831
00:39:21,992 --> 00:39:27,482
roll, roll big blank wide sheet of
beautiful opportunity.

832
00:39:28,062 --> 00:39:28,662
Do this.

833
00:39:28,662 --> 00:39:28,882
Great.

834
00:39:28,882 --> 00:39:29,602
It's awesome.

835
00:39:29,602 --> 00:39:34,952
You make this the little tea mug like
circle stains and then and then you roll

836
00:39:34,952 --> 00:39:35,922
it and then they're all gone.

837
00:39:35,922 --> 00:39:36,974
It's like.

838
00:39:36,974 --> 00:39:39,114
Yeah, it's beautiful.

839
00:39:39,114 --> 00:39:40,294
So I actually did.

840
00:39:40,294 --> 00:39:40,674
Yeah.

841
00:39:40,674 --> 00:39:41,004
All right.

842
00:39:41,004 --> 00:39:41,814
Let's do it.

843
00:39:41,814 --> 00:39:42,464
We'll do it.

844
00:39:42,464 --> 00:39:43,154
We'll make it.

845
00:39:43,154 --> 00:39:44,834
We'll get a monk to make it.

846
00:39:44,834 --> 00:39:45,874
Yeah, exactly.

847
00:39:45,874 --> 00:39:47,154
This is not my product.

848
00:39:47,154 --> 00:39:48,614
Yeah, they'll do that.

849
00:39:48,614 --> 00:39:49,654
And that'll be great.

850
00:39:49,654 --> 00:39:54,434
So that, I mean, really gets to the heart
of most of work for me is like everything

851
00:39:54,434 --> 00:39:57,394
is very free form because that's my
personality.

852
00:39:57,394 --> 00:39:59,954
So having a free forms.

853
00:39:59,954 --> 00:40:01,234
So now it's a notebook.

854
00:40:01,374 --> 00:40:01,614
Yeah.

855
00:40:01,614 --> 00:40:04,074
And that works pretty much just as well.

856
00:40:04,074 --> 00:40:06,094
So a notebook.

857
00:40:06,094 --> 00:40:11,054
And, uh, but I guess like, what's an
interesting thing that here's a tool that

858
00:40:11,054 --> 00:40:14,324
I don't do often enough when I'm on my
best behavior I do, but I've like firmly

859
00:40:14,324 --> 00:40:21,324
believe that this is the best way to suss
out or to like explore an idea or fix a

860
00:40:21,324 --> 00:40:22,574
bug or pretty much anything.

861
00:40:22,574 --> 00:40:27,984
Write a blog post, like a publishable blog
post to yourself that you would send to

862
00:40:27,984 --> 00:40:30,614
somebody whose time you care about
immensely.

863
00:40:30,614 --> 00:40:33,684
Write that blog post.

864
00:40:34,126 --> 00:40:36,666
and you will have solved all your problems
properly.

865
00:40:36,666 --> 00:40:40,926
Almost every, if it's a bug, I almost
guarantee by the time you're finished with

866
00:40:40,926 --> 00:40:44,876
the blog post explaining the bug
thoroughly enough, you solved it almost

867
00:40:44,876 --> 00:40:46,176
every time.

868
00:40:46,176 --> 00:40:49,406
And same goes for new features.

869
00:40:49,406 --> 00:40:53,286
Like I personally want to just jump into
the code and start hacking.

870
00:40:53,286 --> 00:40:57,256
I want to do that, but I have to like, so
I do that when I'm not on my best

871
00:40:57,256 --> 00:41:02,276
behavior, when I am on my best behavior,
I'm rigorously writing out a blog post

872
00:41:02,276 --> 00:41:03,822
that I would be proud to publish.

873
00:41:03,822 --> 00:41:06,362
That's so good.

874
00:41:06,362 --> 00:41:07,362
I love that.

875
00:41:07,362 --> 00:41:10,062
Apparently Amazon does this for new
product launches.

876
00:41:10,242 --> 00:41:13,722
It's like you have to start with like
write the announcement to the customers

877
00:41:13,722 --> 00:41:14,602
that this thing is shipped.

878
00:41:14,602 --> 00:41:15,282
Oh, cool.

879
00:41:15,282 --> 00:41:15,682
Nice.

880
00:41:15,682 --> 00:41:16,182
Yeah.

881
00:41:16,182 --> 00:41:19,622
Documentation first kind of development.

882
00:41:19,622 --> 00:41:19,862
Yeah.

883
00:41:19,862 --> 00:41:21,292
The read me driven design.

884
00:41:21,292 --> 00:41:22,362
Read me driven design.

885
00:41:22,362 --> 00:41:22,562
Yeah.

886
00:41:22,562 --> 00:41:22,902
Yeah.

887
00:41:22,902 --> 00:41:25,082
All that kind of stuff really.

888
00:41:25,242 --> 00:41:27,742
Yeah, it's incredibly valuable.

889
00:41:27,742 --> 00:41:28,412
It's such an interesting.

890
00:41:28,412 --> 00:41:30,102
It's an interesting brain hack like that.

891
00:41:30,102 --> 00:41:32,882
It kind of feels like that shouldn't work
so well.

892
00:41:32,882 --> 00:41:33,390
It's like

893
00:41:33,390 --> 00:41:39,460
I just like it's kind of like it lets you
figure it out by just like if you just

894
00:41:39,460 --> 00:41:42,980
think about the end state, your brain is
going to work backwards and figure out all

895
00:41:42,980 --> 00:41:44,830
these intermediate steps and make your
life easier.

896
00:41:44,830 --> 00:41:49,110
Yeah, it's like skipping the hard part is
the best thing to do.

897
00:41:49,110 --> 00:41:49,890
Yeah, really?

898
00:41:49,890 --> 00:41:51,180
It's like, why that works?

899
00:41:51,180 --> 00:41:51,590
Wow.

900
00:41:51,590 --> 00:41:51,820
OK.

901
00:41:51,820 --> 00:41:55,510
Skipping the part that should like reveal
everything to you is actually it's like

902
00:41:55,510 --> 00:41:56,974
that's like more harmful.

903
00:41:56,974 --> 00:41:59,954
Pretending you just have this magic wand
and the thing is done.

904
00:41:59,954 --> 00:42:02,784
Yeah, you just talk about it and your
brain is like, ah, yes We know how to make

905
00:42:02,784 --> 00:42:04,074
this no problem.

906
00:42:04,074 --> 00:42:04,854
Yep.

907
00:42:04,854 --> 00:42:11,034
Yeah that I mean in that like meta concept
of starting end first is like Just such a

908
00:42:11,034 --> 00:42:14,934
programming truth for me like even down
the class you're about to make or the

909
00:42:14,934 --> 00:42:18,234
function, you know Just API first, you
know, absolutely.

910
00:42:18,234 --> 00:42:21,504
Yeah test driven development did that for
me I've just been like let's assume this

911
00:42:21,504 --> 00:42:24,154
is here and it works and let's write a
test for it.

912
00:42:24,154 --> 00:42:25,814
That's another form of that.

913
00:42:25,814 --> 00:42:26,574
Yep

914
00:42:26,574 --> 00:42:27,254
Totally.

915
00:42:27,254 --> 00:42:28,864
I think it worked in the macro and the
micro.

916
00:42:28,864 --> 00:42:30,894
It's just like a really powerful tool.

917
00:42:30,894 --> 00:42:31,514
Agreed.

918
00:42:31,514 --> 00:42:32,634
That's one of those.

919
00:42:32,634 --> 00:42:36,544
I'm always, I don't have like a perfect
log of this anywhere, but I'm wondering if

920
00:42:36,544 --> 00:42:37,154
you're similar.

921
00:42:37,154 --> 00:42:39,344
Like I come across something like that in
a conversation.

922
00:42:39,344 --> 00:42:42,474
I go, that's a fundamental truth to me.

923
00:42:42,474 --> 00:42:46,554
Like as close as you can get to truth is
like, this is something I want, you know,

924
00:42:46,554 --> 00:42:48,534
inscribed on my wall or something.

925
00:42:48,534 --> 00:42:50,014
So I'll create these.

926
00:42:50,014 --> 00:42:55,134
At one point it was a field notes of like
core beliefs and like practical beliefs,

927
00:42:55,134 --> 00:42:56,398
not like a,

928
00:42:56,398 --> 00:43:00,638
ethereal beliefs, like things like this,
but it never stuck.

929
00:43:00,638 --> 00:43:06,918
And just today I made a new Trello column
called Core Values and put in it every day

930
00:43:06,918 --> 00:43:11,978
is day one, like sort of the Jeff Bezos,
like Amazon, like, uh, whatever.

931
00:43:11,978 --> 00:43:16,758
I have a whole, a whole other reason for
believing in that as a core truth, but,

932
00:43:16,758 --> 00:43:18,098
um, I don't know.

933
00:43:18,098 --> 00:43:22,658
I just feel like we, we struck one of
those chords and you go like, Oh, that's,

934
00:43:22,658 --> 00:43:23,458
that's a big one.

935
00:43:23,458 --> 00:43:24,678
Don't forget that.

936
00:43:24,678 --> 00:43:26,254
You know, totally.

937
00:43:26,254 --> 00:43:30,394
Yeah, Nat Friedman has a website, it's
like one of the best personal websites

938
00:43:30,394 --> 00:43:31,004
I've ever seen.

939
00:43:31,004 --> 00:43:31,814
Really?

940
00:43:31,814 --> 00:43:35,694
And on it is something like 30 things that
he believes.

941
00:43:35,694 --> 00:43:38,334
And it's just like bullet points in Times
New Roman.

942
00:43:38,674 --> 00:43:42,174
And it's just like a collection of those
kind of core values that he's sort of

943
00:43:42,174 --> 00:43:43,714
distilled from his experience.

944
00:43:43,734 --> 00:43:47,194
And sounds like that one would be on
yours.

945
00:43:47,194 --> 00:43:47,734
Yep.

946
00:43:47,734 --> 00:43:49,094
Yeah, that would be on there.

947
00:43:49,094 --> 00:43:51,470
I mean, you didn't ask and we didn't...

948
00:43:51,470 --> 00:43:54,700
go there with beliefs and we could go on a
giant tangent, but another one that comes

949
00:43:54,700 --> 00:43:59,050
to mind that's like an age old, make the
change easy than, or make the change easy

950
00:43:59,050 --> 00:44:03,110
than make the easy change is like, put
that on my tombstone like that.

951
00:44:03,110 --> 00:44:07,730
This is one that is an undisputable truth,
you know?

952
00:44:08,090 --> 00:44:10,330
Is that that way for you as well?

953
00:44:11,170 --> 00:44:12,690
Oh yeah, that's a great one.

954
00:44:12,690 --> 00:44:13,190
Yeah.

955
00:44:13,190 --> 00:44:17,070
And I love Kent Beck's, I don't know if he
originally formulated this, but like his

956
00:44:17,070 --> 00:44:20,750
tweet where he says, you know, first make
the change easy.

957
00:44:20,750 --> 00:44:25,390
note, maybe hard, then make the easy
change.

958
00:44:25,390 --> 00:44:28,310
I really appreciate that kind of like it's
a good note.

959
00:44:28,310 --> 00:44:33,500
By the way, by the way, the hard part
actually might is likely in this first

960
00:44:33,500 --> 00:44:34,210
part here.

961
00:44:34,210 --> 00:44:35,050
Right.

962
00:44:35,050 --> 00:44:38,310
But if you can do the hard part, then the
next thing is easy.

963
00:44:38,310 --> 00:44:45,860
I like that a lot because so I the nice
thing about making the change easy is that

964
00:44:45,860 --> 00:44:49,070
it looks like a really clean refactoring
pull request.

965
00:44:50,222 --> 00:44:53,812
It's just like I can start with just one
piece of it and just say like, all right,

966
00:44:53,812 --> 00:44:55,622
the first thing I'm going to do is make
this change easy.

967
00:44:55,622 --> 00:44:59,512
And so to do that, I'm going to pull these
three, three separate things that would

968
00:44:59,512 --> 00:45:01,842
need to change into one place.

969
00:45:02,062 --> 00:45:07,512
And then that's its own PR and the code
base is now likely better, regardless of

970
00:45:07,512 --> 00:45:09,762
whether I now make the easy change or not.

971
00:45:10,042 --> 00:45:10,212
Yeah.

972
00:45:10,212 --> 00:45:10,422
Yeah.

973
00:45:10,422 --> 00:45:12,132
It, it, it is a beautiful thing.

974
00:45:12,132 --> 00:45:17,032
And I've like, I try to remind myself that
at times that like I should, you know,

975
00:45:17,032 --> 00:45:18,862
when I make the change easy, I should
ship.

976
00:45:18,862 --> 00:45:21,122
making the change easy before I make the
easy change.

977
00:45:21,122 --> 00:45:26,482
Cause actually just straight up tagging a
release in between those two makes you

978
00:45:26,482 --> 00:45:28,642
feel more confident about it.

979
00:45:28,642 --> 00:45:32,242
And it gives you an opportunity to, to
really like vet out any bugs that might,

980
00:45:32,242 --> 00:45:37,142
it, yeah, it takes something that was like
really kind of daring and turns it into

981
00:45:37,142 --> 00:45:42,902
two reasonable steps, a refactor that
maintains, you know, like parody and then

982
00:45:42,902 --> 00:45:43,854
a new addition that.

983
00:45:43,854 --> 00:45:46,514
isn't dangerous because the infrastructure
is already in place.

984
00:45:46,514 --> 00:45:50,424
And it's easier for a reviewer to look at
and be like, OK, there should be zero

985
00:45:50,424 --> 00:45:51,274
behavior changes here.

986
00:45:51,274 --> 00:45:52,674
No test should fail.

987
00:45:52,674 --> 00:45:53,694
Nothing should be new.

988
00:45:53,694 --> 00:45:54,444
Nothing should be different.

989
00:45:54,444 --> 00:45:56,994
I'm just looking at this code and making
sure it used to work like this.

990
00:45:56,994 --> 00:45:58,934
It still works just like this.

991
00:45:58,934 --> 00:46:00,994
And that's a pretty easy PR to review.

992
00:46:00,994 --> 00:46:02,814
And then now you make the easy change.

993
00:46:02,814 --> 00:46:03,824
It's like, well, this is an easy change.

994
00:46:03,824 --> 00:46:04,894
This is easy to think about, too.

995
00:46:04,894 --> 00:46:08,314
I can just see you're just changing this
one place where you pulled all the stuff

996
00:46:08,314 --> 00:46:08,774
into one place.

997
00:46:08,774 --> 00:46:10,134
And now you're changing in that one place.

998
00:46:10,134 --> 00:46:10,854
Looks good to me.

999
00:46:10,854 --> 00:46:14,000
And they're both individually easy to
review changes.

1000
00:46:14,062 --> 00:46:17,522
If you jam them together, it gets more
tricky.

1001
00:46:17,522 --> 00:46:18,462
You're more likely to do stuff, I think.

1002
00:46:18,462 --> 00:46:18,542
Yes.

1003
00:46:18,542 --> 00:46:22,522
It's funny because it takes one really
tricky thing, like a pull request that

1004
00:46:22,522 --> 00:46:24,892
changes everything and does something big,
and turns it in.

1005
00:46:24,892 --> 00:46:29,202
It takes one dangerous thing and turns it
into two safe things instead of two less

1006
00:46:29,202 --> 00:46:31,082
dangerous things, in a sense.

1007
00:46:31,082 --> 00:46:35,172
It just feels like that, which is
asymmetric in some way that I think is

1008
00:46:35,172 --> 00:46:36,082
cool.

1009
00:46:36,082 --> 00:46:36,642
Totally.

1010
00:46:36,642 --> 00:46:38,542
And rings of truth.

1011
00:46:39,082 --> 00:46:40,722
More values, yeah.

1012
00:46:40,722 --> 00:46:41,806
Nice.

1013
00:46:41,806 --> 00:46:44,896
On that just randomly to just totally blow
that one up.

1014
00:46:44,896 --> 00:46:49,146
These truths to me like almost always have
applications outside of programming.

1015
00:46:49,146 --> 00:46:53,646
If they're like big truths like that and
like cigarette smoking, like if you just

1016
00:46:53,646 --> 00:46:56,766
try to quit, but you still hang out with
smokers, like it's just really hard.

1017
00:46:56,766 --> 00:47:00,676
But like if you make the change easy and
fire all your smoker friends, I don't know

1018
00:47:00,676 --> 00:47:02,106
what it's bad example.

1019
00:47:02,106 --> 00:47:05,506
Like now it's really easy to quit smoking
or something, you know, things like that.

1020
00:47:05,506 --> 00:47:09,866
That's like, this really is a core truth
to apply to life in so many ways.

1021
00:47:09,866 --> 00:47:11,726
Change your environment, you know.

1022
00:47:11,726 --> 00:47:12,306
Totally.

1023
00:47:12,306 --> 00:47:13,506
Yeah, that makes a lot of sense.

1024
00:47:13,506 --> 00:47:18,836
I like the idea of like when faced with a
complicated, like a tough thing, asking

1025
00:47:18,836 --> 00:47:20,386
first, like what would make this easy?

1026
00:47:20,386 --> 00:47:21,486
Yes.

1027
00:47:21,486 --> 00:47:23,616
If something were like, what would be,
what could be true that would make this

1028
00:47:23,616 --> 00:47:24,246
thing easy?

1029
00:47:24,246 --> 00:47:24,806
Absolutely.

1030
00:47:24,806 --> 00:47:25,766
And maybe just do that.

1031
00:47:25,766 --> 00:47:26,686
And then it's not so scary.

1032
00:47:26,686 --> 00:47:28,226
You're not like, well, I'm not quitting
smoking.

1033
00:47:28,226 --> 00:47:29,486
I'm just.

1034
00:47:29,486 --> 00:47:30,596
I'm setting myself up.

1035
00:47:30,596 --> 00:47:31,786
I'm changing my environment.

1036
00:47:31,786 --> 00:47:32,106
Yeah.

1037
00:47:32,106 --> 00:47:35,206
I'm just going to throw this pack away and
I'm going to not make, I'm going to make

1038
00:47:35,206 --> 00:47:37,946
different plans on this time when I
normally would do it or whatever it is.

1039
00:47:37,946 --> 00:47:38,126
Right.

1040
00:47:38,126 --> 00:47:39,886
Or ridiculous things like what.

1041
00:47:39,886 --> 00:47:42,386
what could be true that would make me stop
smoking?

1042
00:47:42,386 --> 00:47:48,676
Like, let's say I, uh, didn't have access
to cigarettes or something like, cause I'm

1043
00:47:48,676 --> 00:47:49,516
on a camping trip.

1044
00:47:49,516 --> 00:47:50,266
I don't know.

1045
00:47:50,266 --> 00:47:52,926
It's like, I could take that camping trip
or traveling.

1046
00:47:52,926 --> 00:47:58,766
Like let's say, or, or let's say you're
like, you hide cigarettes from your dad or

1047
00:47:58,766 --> 00:47:59,646
something.

1048
00:47:59,706 --> 00:48:00,826
Go on a trip with your dad.

1049
00:48:00,826 --> 00:48:01,556
You know, I don't know.

1050
00:48:01,556 --> 00:48:05,696
Like if you need to not smoke for two
weeks, like book that trip that that will

1051
00:48:05,696 --> 00:48:09,266
make that an impossibility, you know, I
don't know.

1052
00:48:09,582 --> 00:48:13,812
That's a very specific example, but it
applies to, I think you put it perfectly

1053
00:48:13,812 --> 00:48:16,742
is like, what's the thing that's hard that
you're trying to do?

1054
00:48:16,742 --> 00:48:20,242
Like if what could be true that would make
it easy, what does it take to make that

1055
00:48:20,242 --> 00:48:20,842
thing true?

1056
00:48:20,842 --> 00:48:22,002
You know?

1057
00:48:22,222 --> 00:48:22,542
Yeah.

1058
00:48:22,542 --> 00:48:23,042
Nice.

1059
00:48:23,042 --> 00:48:23,922
Yeah.

1060
00:48:24,722 --> 00:48:24,952
All right.

1061
00:48:24,952 --> 00:48:27,542
So what's so on your desk, you're getting,
you're getting work done.

1062
00:48:27,542 --> 00:48:30,462
You're flowing, you have a notebook these
days.

1063
00:48:30,462 --> 00:48:33,362
Do you have a notebook brand or type that
you're like really into?

1064
00:48:33,362 --> 00:48:35,102
I forget where I read this.

1065
00:48:35,102 --> 00:48:35,374
Oh,

1066
00:48:35,374 --> 00:48:37,544
This YouTuber guy, I'm not going to
remember his name.

1067
00:48:37,544 --> 00:48:42,614
He's like a entrepreneurship YouTuber guy
and he's like pucca pads.

1068
00:48:42,614 --> 00:48:46,174
And so I was like, I just needed a brand
to latch onto for a notebook.

1069
00:48:46,174 --> 00:48:50,504
So I just chose this guy's brand and there
he believes in them and thinks they're

1070
00:48:50,504 --> 00:48:51,494
spiritually amazing.

1071
00:48:51,494 --> 00:48:53,774
And so I was like, somebody thinks this is
like a holy book.

1072
00:48:53,774 --> 00:48:55,674
So I'll just buy the pucca pad.

1073
00:48:55,674 --> 00:48:56,634
Okay, great.

1074
00:48:56,634 --> 00:48:57,564
Are you a pen person?

1075
00:48:57,564 --> 00:48:59,614
Have you, have you swiped the pen details?

1076
00:48:59,654 --> 00:49:03,630
Oh, I mean, I've like, I've gotten into
that a little bit.

1077
00:49:03,630 --> 00:49:06,050
But I always go back to just who cares.

1078
00:49:06,050 --> 00:49:11,450
But yeah, there's that that one pen that
like You probably know it I don't maybe

1079
00:49:11,450 --> 00:49:17,410
it's zebra or it's some kind of pen people
who cares about pens If you're not

1080
00:49:17,410 --> 00:49:18,360
passionate about it, stop.

1081
00:49:18,360 --> 00:49:19,750
I'm not passionate about it.

1082
00:49:19,750 --> 00:49:24,570
Okay, don't care then In general, how are
you getting yourself into the zone?

1083
00:49:24,570 --> 00:49:28,030
When you want to like when you like, you
know, you've got a block of time You got a

1084
00:49:28,030 --> 00:49:29,610
big meaty thing to work on.

1085
00:49:29,610 --> 00:49:32,948
What is your like on ramp into
productivity look like?

1086
00:49:33,984 --> 00:49:38,894
Tea, like some sort of caffeine, but tea
for me.

1087
00:49:39,634 --> 00:49:41,714
Morning or night.

1088
00:49:42,894 --> 00:49:43,914
Really?

1089
00:49:43,914 --> 00:49:45,054
You're fine?

1090
00:49:45,534 --> 00:49:47,434
Yeah, morning, night or weekend.

1091
00:49:48,134 --> 00:49:51,604
Just when everybody else is not working,
for some reason I'm like more...

1092
00:49:51,604 --> 00:49:54,234
Oh, like early morning, late night,
weekend.

1093
00:49:54,234 --> 00:49:54,714
Gotcha.

1094
00:49:54,714 --> 00:49:55,884
Not like midday.

1095
00:49:55,884 --> 00:49:56,994
No, no, no, no.

1096
00:49:56,994 --> 00:49:57,774
Gotcha, gotcha.

1097
00:49:57,774 --> 00:49:58,814
I mean, that's that.

1098
00:49:58,814 --> 00:50:01,694
But I guess the only...

1099
00:50:01,694 --> 00:50:03,526
If I'm excited about it...

1100
00:50:03,566 --> 00:50:05,146
then it's really easy to focus.

1101
00:50:05,146 --> 00:50:07,126
If I'm not, I need accountability.

1102
00:50:07,126 --> 00:50:13,406
So I'll like live stream and that like
I'll have like three hours of focused deep

1103
00:50:13,406 --> 00:50:14,786
work against my will.

1104
00:50:14,786 --> 00:50:16,276
That's really good for the thing.

1105
00:50:16,276 --> 00:50:19,986
You know, like pair programming does that.

1106
00:50:19,986 --> 00:50:20,476
Totally.

1107
00:50:20,476 --> 00:50:21,146
That was my thought.

1108
00:50:21,146 --> 00:50:21,256
Yeah.

1109
00:50:21,256 --> 00:50:24,216
It's like live streaming is kind of like
parent, like pairing with a bunch of

1110
00:50:24,216 --> 00:50:25,126
people at once.

1111
00:50:25,126 --> 00:50:26,776
It captures the value of pairing for me.

1112
00:50:26,776 --> 00:50:30,806
Like the value is less in the ideas I cook
up with the other person, which is

1113
00:50:30,806 --> 00:50:31,806
valuable.

1114
00:50:31,806 --> 00:50:33,294
It's the accountability.

1115
00:50:33,294 --> 00:50:38,034
And I'm a one -man band, so I can't just
hang out with coworkers.

1116
00:50:38,034 --> 00:50:40,014
So streaming kind of accomplishes that.

1117
00:50:40,014 --> 00:50:40,654
Nice.

1118
00:50:40,654 --> 00:50:41,954
That makes a lot of sense.

1119
00:50:41,954 --> 00:50:42,914
Yeah.

1120
00:50:43,274 --> 00:50:46,874
So I've streamed programming a couple
times.

1121
00:50:46,874 --> 00:50:51,454
And I was pleasantly surprised at how it
made it feel less lonely.

1122
00:50:51,454 --> 00:50:52,834
Oh, yeah.

1123
00:50:52,974 --> 00:50:54,374
Yeah, it's great.

1124
00:50:54,374 --> 00:50:58,214
My only complaint with it is it does
force, it takes such intense focus that

1125
00:50:58,214 --> 00:50:59,974
it's sometimes similar to pairing.

1126
00:50:59,974 --> 00:51:00,934
I'm like, ha.

1127
00:51:01,294 --> 00:51:05,914
I'd rather just like sit back in my chair
and lazily work on something, you know?

1128
00:51:06,374 --> 00:51:11,174
But yeah, it is a communal experience.

1129
00:51:11,894 --> 00:51:13,914
Yeah, it's good.

1130
00:51:14,074 --> 00:51:15,344
How do you feel about testing?

1131
00:51:15,344 --> 00:51:17,274
What's your stance on tests?

1132
00:51:17,694 --> 00:51:19,994
Yeah, I'm not sure.

1133
00:51:19,994 --> 00:51:23,824
Sometimes I write code bases with no tests
and I just have a bug tracker and it's

1134
00:51:23,824 --> 00:51:27,024
like the LiveWire docs are sort of an app.

1135
00:51:27,024 --> 00:51:30,334
They have like payments and logins and
stuff.

1136
00:51:30,478 --> 00:51:34,228
I don't have any tests and I'm fine with
that because if it's simple enough and I

1137
00:51:34,228 --> 00:51:36,128
ship a bug, I chose up in the bug tracker.

1138
00:51:36,128 --> 00:51:37,358
I fix it in a minute.

1139
00:51:37,358 --> 00:51:44,698
Um, but for like live wire itself, I
honestly think the test suite, I know that

1140
00:51:44,698 --> 00:51:47,378
the test suite is more valuable to me than
the code itself.

1141
00:51:47,378 --> 00:51:50,458
Um, and I believe that wholeheartedly.

1142
00:51:50,458 --> 00:51:53,278
So sometimes I'm like a testing TDD.

1143
00:51:53,278 --> 00:51:58,048
Yeah, I'm not sure, you know, but man,
like a solid test suite for me, that's

1144
00:51:58,048 --> 00:52:00,018
acceptance tests cause they're full stack
framework.

1145
00:52:00,018 --> 00:52:00,590
So.

1146
00:52:00,590 --> 00:52:04,780
I've like Selenium type tests and one
Cypress and the other, but yeah, like

1147
00:52:04,780 --> 00:52:10,530
literally browser tests for a lot of it
that are slow and suck, but every failing

1148
00:52:10,530 --> 00:52:13,970
or every bug that gets submitted, like
it's always starts with a failing test.

1149
00:52:13,970 --> 00:52:17,430
Like that's probably the most valuable
like workflow improvement I've made along

1150
00:52:17,430 --> 00:52:18,690
the line.

1151
00:52:18,830 --> 00:52:19,270
Yeah.

1152
00:52:19,270 --> 00:52:21,950
Why do you value the tests more than the
code itself?

1153
00:52:21,950 --> 00:52:28,558
Yeah, because like the code, maybe this is
why, like for re.

1154
00:52:28,558 --> 00:52:32,848
Like I rewrote LiveWire and the only way I
was able to do that is because I had the

1155
00:52:32,848 --> 00:52:33,378
test suite.

1156
00:52:33,378 --> 00:52:38,908
And when I, it gives me the freedom to do
what I want with the code because I resent

1157
00:52:38,908 --> 00:52:41,258
the code a lot of times, you know?

1158
00:52:41,258 --> 00:52:46,478
And it's like the only thing that gives me
salvation from this resentment is these

1159
00:52:46,478 --> 00:52:51,318
tests that allow me to change the code,
you know?

1160
00:52:51,318 --> 00:52:53,318
And I don't care if the tests suck.

1161
00:52:53,318 --> 00:52:58,702
Like it doesn't really matter what matters
is do they give me assurance that

1162
00:52:58,702 --> 00:53:02,402
that if I ship this thing, it's not going
to break everybody's apps, you know?

1163
00:53:02,402 --> 00:53:02,702
Yeah.

1164
00:53:02,702 --> 00:53:05,102
And they do that.

1165
00:53:05,102 --> 00:53:05,312
Yeah.

1166
00:53:05,312 --> 00:53:05,762
Yeah.

1167
00:53:05,762 --> 00:53:09,032
So if you deleted all the code, you could
reconstitute it.

1168
00:53:09,032 --> 00:53:10,352
I could reconstitute the code.

1169
00:53:10,352 --> 00:53:12,422
You can make the tests pass again.

1170
00:53:12,602 --> 00:53:15,682
If you delete all the tests, tougher to
get those back.

1171
00:53:15,682 --> 00:53:16,942
Way harder.

1172
00:53:17,022 --> 00:53:22,292
Those get built up over years of people
finding edge cases that aren't me, that

1173
00:53:22,292 --> 00:53:26,202
aren't in the happy path, that, you know,
that's what it is.

1174
00:53:26,202 --> 00:53:26,462
Yeah.

1175
00:53:26,462 --> 00:53:28,302
That's the real value.

1176
00:53:28,302 --> 00:53:29,382
Yeah.

1177
00:53:29,602 --> 00:53:30,002
Yep.

1178
00:53:30,002 --> 00:53:30,692
That makes sense.

1179
00:53:30,692 --> 00:53:30,842
Yeah.

1180
00:53:30,842 --> 00:53:32,922
If you had to lose one, I would, I'd go
the same way.

1181
00:53:32,922 --> 00:53:33,382
Yeah.

1182
00:53:33,382 --> 00:53:34,492
That's so funny.

1183
00:53:34,492 --> 00:53:38,202
I haven't thought about that, but like if
you have to pick one, I would pick the

1184
00:53:38,202 --> 00:53:38,562
tests.

1185
00:53:38,562 --> 00:53:38,992
Yeah.

1186
00:53:38,992 --> 00:53:39,622
Yeah.

1187
00:53:39,622 --> 00:53:44,212
And like, I feel like most, I think a lot
of programmers would be fairly delighted

1188
00:53:44,212 --> 00:53:49,052
to learn that they, all the code has been
deleted and now all they need to do is

1189
00:53:49,052 --> 00:53:50,012
make all these tests pass.

1190
00:53:50,012 --> 00:53:50,962
Right.

1191
00:53:50,962 --> 00:53:51,362
Yes.

1192
00:53:51,362 --> 00:53:53,494
Like these high level acceptance tests in
particular.

1193
00:53:53,494 --> 00:53:55,654
unit tests, kind of annoying.

1194
00:53:55,654 --> 00:53:57,514
Your cramping style can be annoying.

1195
00:53:57,514 --> 00:53:57,754
Yes.

1196
00:53:57,754 --> 00:54:00,204
But if you give me a high level test, I
just need to make these go green.

1197
00:54:00,204 --> 00:54:00,914
Oh, man.

1198
00:54:00,914 --> 00:54:01,614
Absolutely.

1199
00:54:01,614 --> 00:54:02,414
One by one, baby.

1200
00:54:02,414 --> 00:54:02,914
Let's go.

1201
00:54:02,914 --> 00:54:04,294
Yeah, that's the dream.

1202
00:54:04,774 --> 00:54:05,554
Yeah.

1203
00:54:05,574 --> 00:54:07,434
Yeah, a lot.

1204
00:54:07,674 --> 00:54:08,614
Yeah.

1205
00:54:09,194 --> 00:54:10,194
It's interesting.

1206
00:54:10,194 --> 00:54:14,714
So I've talked about this, that phenomenon
before about how it's like, oh, yeah,

1207
00:54:14,714 --> 00:54:18,314
given the test, you can make the code, but
given the code, you can't make the tests.

1208
00:54:18,314 --> 00:54:20,270
And then I caught myself.

1209
00:54:20,270 --> 00:54:24,210
now in 2024, like wondering like how true
is that still?

1210
00:54:24,210 --> 00:54:28,720
Because I think I could feed some code to
various AI tools and be like, give me some

1211
00:54:28,720 --> 00:54:29,730
tests.

1212
00:54:29,970 --> 00:54:32,010
And are they going to catch the edge
cases?

1213
00:54:32,010 --> 00:54:33,530
Maybe.

1214
00:54:33,690 --> 00:54:38,170
Probably not like the gnarlier ones, like
the oh man, on Windows with this setting,

1215
00:54:38,170 --> 00:54:39,010
this thing fails.

1216
00:54:39,010 --> 00:54:40,640
So yeah, you're not going to get all that
detail back.

1217
00:54:40,640 --> 00:54:45,480
But I think there's more of the ability
now to like, I could create the tests from

1218
00:54:45,480 --> 00:54:47,570
the code in a way I couldn't before.

1219
00:54:48,942 --> 00:54:54,372
You're probably right to a degree, but I
would imagine like Livewire, like tuple is

1220
00:54:54,372 --> 00:54:59,762
something that is so like integrated in
the experience of use.

1221
00:54:59,762 --> 00:55:03,712
It's not just like a package that you're
calling methods on that has like very

1222
00:55:03,712 --> 00:55:04,542
clear ins and outs.

1223
00:55:04,542 --> 00:55:05,622
It's like, Oh yeah.

1224
00:55:05,622 --> 00:55:11,972
These are, there's a 10 zillion scenarios
that no LLM is going to suss out at least

1225
00:55:11,972 --> 00:55:13,542
right now, you know?

1226
00:55:13,542 --> 00:55:16,300
Um, but yeah, I don't know, but.

1227
00:55:16,300 --> 00:55:20,030
It's an interesting point that it probably
is getting less and less true, but I think

1228
00:55:20,030 --> 00:55:21,710
it's still pretty freaking true.

1229
00:55:21,710 --> 00:55:22,050
Yeah.

1230
00:55:22,050 --> 00:55:24,100
I mean, I would still rather delete the
code than the tests.

1231
00:55:24,100 --> 00:55:24,550
Yeah.

1232
00:55:24,550 --> 00:55:25,490
Yes.

1233
00:55:26,630 --> 00:55:29,530
I have a question for you, Ben.

1234
00:55:29,530 --> 00:55:30,130
Hit me.

1235
00:55:30,130 --> 00:55:34,040
And this question goes better if you were
like a day -to -day programmer.

1236
00:55:34,040 --> 00:55:39,270
So I am actually curious to hear like to
what level you still code, if any.

1237
00:55:39,590 --> 00:55:44,300
But in my career, I made a change from
being like a systems.

1238
00:55:44,494 --> 00:55:49,594
like information systems developer in
Laravel apps, like very typical stuff,

1239
00:55:49,594 --> 00:55:54,064
like maybe you at Thoughtbot, like just
Rails apps kind of thing, to being like a

1240
00:55:54,064 --> 00:55:58,544
systems programmer, like with bespoke
systems, like with these frameworks, you

1241
00:55:58,544 --> 00:56:03,324
know, like how do you write a tree walker
and, you know, all of these things that

1242
00:56:03,324 --> 00:56:07,234
are not just databases and controllers and
whatever.

1243
00:56:07,254 --> 00:56:12,154
And I found it to like breathe new life
into my career and expose all these new

1244
00:56:12,154 --> 00:56:13,646
loves for programming and...

1245
00:56:13,646 --> 00:56:19,466
I just wonder if you found a similar
transition into working on a non -typical

1246
00:56:19,466 --> 00:56:19,986
app.

1247
00:56:19,986 --> 00:56:25,086
Like the only typical part of Tupil is
like the app, your user account, you know,

1248
00:56:25,086 --> 00:56:26,866
everything else is like a bespoke system.

1249
00:56:26,866 --> 00:56:31,246
So is that just, is that amazing for you?

1250
00:56:31,826 --> 00:56:32,436
Yeah.

1251
00:56:32,436 --> 00:56:32,986
So you're right.

1252
00:56:32,986 --> 00:56:36,146
The Tupil is not like a, not like the apps
that we'd worked on before.

1253
00:56:36,146 --> 00:56:39,286
So I have two co -founders, all three of
us were Rails developers.

1254
00:56:39,286 --> 00:56:41,442
And then we realized we had to build.

1255
00:56:41,442 --> 00:56:44,922
We tried a few prototypes and realized,
OK, the thing that gives us the control

1256
00:56:44,922 --> 00:56:52,292
and performance we want is a C++ desktop
app that's doing all these real -time

1257
00:56:52,292 --> 00:56:56,582
things, real -time audio, video, data
channels, that sort of thing.

1258
00:56:57,982 --> 00:57:03,302
And fortunately or not for me, it was kind
of clear that we shouldn't have three

1259
00:57:03,302 --> 00:57:08,002
people coding on this thing and no one
doing sales and marketing.

1260
00:57:08,002 --> 00:57:10,572
So because I had the audience, I was like,
all right, I'm going to do sales and

1261
00:57:10,572 --> 00:57:11,118
marketing.

1262
00:57:11,118 --> 00:57:16,238
And so I wrote the first version of the
Rails backend that the app talks to.

1263
00:57:16,878 --> 00:57:19,798
But then I didn't sling any of the C++.

1264
00:57:19,798 --> 00:57:22,518
So I didn't get to make that transition.

1265
00:57:22,578 --> 00:57:23,738
Do you regret that?

1266
00:57:23,738 --> 00:57:27,098
Is there a part of you that, or is it just
like, no, that's what had to be done and

1267
00:57:27,098 --> 00:57:28,038
I'm glad?

1268
00:57:28,038 --> 00:57:34,468
Or is there a part of you that's like,
man, I was an equal programmer, but now

1269
00:57:34,468 --> 00:57:38,608
I'm the business guy that I used to work
with that doesn't understand that it has

1270
00:57:38,608 --> 00:57:40,978
to trust these devs and such?

1271
00:57:41,868 --> 00:57:43,448
I wouldn't say I regret it.

1272
00:57:43,448 --> 00:57:46,878
No, I think it was very much the right
call for the business.

1273
00:57:46,878 --> 00:57:47,658
Yeah.

1274
00:57:47,658 --> 00:57:51,138
Personally, I miss programming a bit.

1275
00:57:51,258 --> 00:57:54,338
Like I feel rusty with some of these
concepts we're talking about or like I

1276
00:57:54,338 --> 00:57:57,438
haven't touched the new things and I'm
like, you know, JavaScript is a big

1277
00:57:57,438 --> 00:58:00,958
mystery to me and like sort of newer
paradigms I haven't played around with.

1278
00:58:00,958 --> 00:58:06,328
So there's part of me that feels a little
bit of like personal sadness around that

1279
00:58:06,328 --> 00:58:06,798
fact.

1280
00:58:06,798 --> 00:58:07,718
Yeah.

1281
00:58:09,230 --> 00:58:12,260
But I think if you have three co
-founders, having all three do programming

1282
00:58:12,260 --> 00:58:14,050
is probably not the right answer.

1283
00:58:14,050 --> 00:58:14,890
Yeah.

1284
00:58:14,890 --> 00:58:17,120
And like I like the other stuff too.

1285
00:58:17,120 --> 00:58:21,110
Like I really enjoyed like figuring out
how to do sales, figuring out how to do

1286
00:58:21,110 --> 00:58:25,240
marketing, doing product, talking to
customers, making choices about how it

1287
00:58:25,240 --> 00:58:25,990
should work.

1288
00:58:25,990 --> 00:58:29,010
And it felt like I was in like my kind of
zone of genius there.

1289
00:58:29,010 --> 00:58:29,950
Cool.

1290
00:58:30,450 --> 00:58:36,830
And I, before Tupel, I had kind of gotten
to the point where I was like, I've been

1291
00:58:36,830 --> 00:58:37,902
programming for like,

1292
00:58:37,902 --> 00:58:39,662
12 years or something at that point.

1293
00:58:39,662 --> 00:58:41,582
And I had gotten pretty good.

1294
00:58:41,582 --> 00:58:45,062
And it felt like I was at like, know,
diminishing returns in terms of like

1295
00:58:45,062 --> 00:58:46,132
continuing to get better.

1296
00:58:46,132 --> 00:58:49,922
It was like I could get better, but it was
like I was already a eight out of 10

1297
00:58:49,922 --> 00:58:50,802
programmer or something.

1298
00:58:50,802 --> 00:58:55,522
And I was like a three out of 10 at like
other aspects of running a software

1299
00:58:55,522 --> 00:58:55,982
company.

1300
00:58:55,982 --> 00:59:00,602
And I was like, I'd rather lift those
skills up and like figure out how to get

1301
00:59:00,602 --> 00:59:03,482
good at that rather than get like a bit
better at programming, which is going to

1302
00:59:03,482 --> 00:59:05,962
take actually quite a bit of effort now,
given where I'm at.

1303
00:59:05,962 --> 00:59:07,118
Right.

1304
00:59:07,598 --> 00:59:10,138
Yeah, that's a great answer.

1305
00:59:10,138 --> 00:59:13,158
And I can identify with that somewhat
myself.

1306
00:59:13,158 --> 00:59:17,178
And I think that's, yeah, yeah, that's
really cool and makes a lot of sense.

1307
00:59:17,178 --> 00:59:23,238
Do you find that the business problems and
sales problems and such are like just as

1308
00:59:23,238 --> 00:59:27,368
intellectually satisfying, like solving
these puzzles and cracking them open and

1309
00:59:27,368 --> 00:59:28,178
whatnot?

1310
00:59:28,538 --> 00:59:29,618
Generally, no.

1311
00:59:29,618 --> 00:59:30,218
Generally, no.

1312
00:59:30,218 --> 00:59:30,658
Okay.

1313
00:59:30,658 --> 00:59:35,878
You can't beat programming for brain
stimulation and like flow state.

1314
00:59:36,558 --> 00:59:39,708
like when you know you got a big chunk of
time and like an interesting programming

1315
00:59:39,708 --> 00:59:42,278
problem and you've kind of like figured
out some of it in your head and like

1316
00:59:42,278 --> 00:59:43,978
you're like ready to go after it.

1317
00:59:43,978 --> 00:59:49,418
Nothing for me like makes the hours fly by
like getting like really into the code.

1318
00:59:49,418 --> 00:59:52,988
And I don't I get some of that from
writing if I'm doing like longer form

1319
00:59:52,988 --> 00:59:53,378
writing.

1320
00:59:53,378 --> 00:59:56,638
I think that will get me in the inflow
state eventually.

1321
00:59:56,638 --> 00:59:59,578
But most of the other stuff not quite.

1322
00:59:59,578 --> 00:59:59,878
Yeah.

1323
00:59:59,878 --> 01:00:01,318
So I think so.

1324
01:00:01,318 --> 01:00:04,318
So programmers got it good in that way I
would say.

1325
01:00:04,318 --> 01:00:04,898
True.

1326
01:00:04,898 --> 01:00:05,646
Yeah.

1327
01:00:05,646 --> 01:00:07,666
I definitely, I could see that.

1328
01:00:07,666 --> 01:00:15,706
And any of the business salesy stuff in my
life, it's engaging and rewarding, but

1329
01:00:15,706 --> 01:00:21,086
it's like when you're working on a system
or something with a really slow feedback

1330
01:00:21,086 --> 01:00:24,746
loop where every deploy takes two hours
and you have to get it through Q &A three

1331
01:00:24,746 --> 01:00:25,206
times.

1332
01:00:25,206 --> 01:00:29,126
There's so much cruft that it disrupts
that flow.

1333
01:00:29,126 --> 01:00:30,726
And to me, it's like...

1334
01:00:30,894 --> 01:00:32,594
that process is so like that.

1335
01:00:32,594 --> 01:00:33,634
It's so nebulous.

1336
01:00:33,634 --> 01:00:35,134
The feedback loops are slow.

1337
01:00:35,134 --> 01:00:41,814
It's not conducive to that constant
stimulation flow state problem solving

1338
01:00:41,814 --> 01:00:45,474
loop that is programming or can be
programming so often.

1339
01:00:45,474 --> 01:00:48,774
Totally, especially with tests, because I
was pretty into TDD.

1340
01:00:48,774 --> 01:00:50,654
I wrote most of my code with test -driven
development.

1341
01:00:50,654 --> 01:00:53,634
So it's like, you're getting that
constant, here's what's wrong.

1342
01:00:53,634 --> 01:00:54,634
OK, it works now.

1343
01:00:54,634 --> 01:00:55,414
Here's what's wrong.

1344
01:00:55,414 --> 01:00:56,174
OK, it works now.

1345
01:00:56,174 --> 01:00:59,054
And it's just like all these little.

1346
01:00:59,886 --> 01:01:04,566
dopamine hits like a hundred times an hour
as opposed to occasionally.

1347
01:01:04,866 --> 01:01:05,506
Yeah.

1348
01:01:05,506 --> 01:01:05,996
Yeah.

1349
01:01:05,996 --> 01:01:11,266
Funny that you describe like passing tests
as dopamine hits and there is like, there

1350
01:01:11,266 --> 01:01:14,886
is some dopamine drip when you physically
see that green.

1351
01:01:14,886 --> 01:01:16,376
Like, that's funny.

1352
01:01:16,376 --> 01:01:21,976
There's like something really beautiful
about the color green when you're

1353
01:01:21,976 --> 01:01:22,786
programming, you know?

1354
01:01:22,786 --> 01:01:24,906
And like the slot machine has like lit up
for you.

1355
01:01:24,906 --> 01:01:26,236
It's like you tried and didn't work.

1356
01:01:26,236 --> 01:01:26,976
You tried, didn't work.

1357
01:01:26,976 --> 01:01:27,256
Oh wait.

1358
01:01:27,256 --> 01:01:27,886
Oh, I see.

1359
01:01:27,886 --> 01:01:28,494
Hold on.

1360
01:01:28,494 --> 01:01:29,474
Okay, there it is.

1361
01:01:29,474 --> 01:01:30,334
Great.

1362
01:01:30,334 --> 01:01:30,874
Got it.

1363
01:01:30,874 --> 01:01:31,094
Right.

1364
01:01:31,094 --> 01:01:32,824
I want to, I've always found it
interesting.

1365
01:01:32,824 --> 01:01:36,554
Like the thought process before you hit
that test run, especially if you're doing

1366
01:01:36,554 --> 01:01:41,574
it like very quickly, like I think you
have like a sense for like, I think

1367
01:01:41,574 --> 01:01:46,614
developers get pretty good at predicting
if like what percentage chance this test

1368
01:01:46,614 --> 01:01:50,604
is going to pass or fail, you know, like
you just have this sense.

1369
01:01:50,604 --> 01:01:51,934
You can almost not even describe.

1370
01:01:51,934 --> 01:01:56,704
That's like, how much I think this time
it's going to, or like, like I'm going to

1371
01:01:56,704 --> 01:01:57,710
make this fix, but

1372
01:01:57,710 --> 01:02:00,490
I don't believe it's gonna fix it, but you
still have to try it.

1373
01:02:00,490 --> 01:02:01,490
I don't know.

1374
01:02:01,490 --> 01:02:05,190
Even when I'm pairing with people, I find
myself doing that where I'm like, before

1375
01:02:05,190 --> 01:02:08,310
we run this test, is it gonna pass?

1376
01:02:08,350 --> 01:02:09,570
I don't know.

1377
01:02:09,570 --> 01:02:15,030
Yeah, I feel like I actually, my guess
would be that I have a pretty high

1378
01:02:15,030 --> 01:02:22,270
accuracy on predicting tests pass or fail,
because I'm usually not very far from it

1379
01:02:22,270 --> 01:02:24,030
passing, I think.

1380
01:02:24,030 --> 01:02:25,582
Gotcha, because you're close.

1381
01:02:25,582 --> 01:02:28,502
you're following the development closely
with the tests.

1382
01:02:28,502 --> 01:02:29,512
I would say so, yeah.

1383
01:02:29,512 --> 01:02:33,322
I don't write 10 tests and then go write
some code and see what happens and be

1384
01:02:33,322 --> 01:02:34,532
like, I wonder if three of these will
pass.

1385
01:02:34,532 --> 01:02:39,442
It's more like, OK, we need to now handle
the situation where there are no orders in

1386
01:02:39,442 --> 01:02:42,102
the list and we should show this message.

1387
01:02:42,102 --> 01:02:44,492
And I know we don't handle this yet, so I
read the test.

1388
01:02:44,492 --> 01:02:45,442
I know it's going to fail.

1389
01:02:45,442 --> 01:02:45,872
It does.

1390
01:02:45,872 --> 01:02:46,952
It fails the right way.

1391
01:02:46,952 --> 01:02:48,182
It gives me the error I expect.

1392
01:02:48,182 --> 01:02:49,462
I'm like, OK, cool.

1393
01:02:49,462 --> 01:02:50,982
I need to handle this.

1394
01:02:50,982 --> 01:02:52,322
And I'm like, I think we've handled it.

1395
01:02:52,322 --> 01:02:53,382
And then sometimes I'm wrong.

1396
01:02:53,382 --> 01:02:55,078
I'm like, oh, actually.

1397
01:02:55,246 --> 01:02:58,426
something was a little bit off, but I
would say most of the time I can sort of,

1398
01:02:58,426 --> 01:03:00,166
I know if I'm about to go red or green.

1399
01:03:00,166 --> 01:03:01,266
Yeah.

1400
01:03:01,266 --> 01:03:02,826
Yeah.

1401
01:03:02,946 --> 01:03:07,636
Um, let me ask you this unrelated question
on, on your own interview podcast, Ben,

1402
01:03:07,636 --> 01:03:11,676
are there, are there any radical things
that you Institute at two bowl on the

1403
01:03:11,676 --> 01:03:12,286
development side?

1404
01:03:12,286 --> 01:03:16,556
Are there any places where you guys say
like, like it, that you guys are different

1405
01:03:16,556 --> 01:03:20,946
in some sense or, or really radical in
your adherence to some practice?

1406
01:03:20,946 --> 01:03:22,926
I would say,

1407
01:03:23,534 --> 01:03:24,964
Nothing is immediately coming to mind.

1408
01:03:24,964 --> 01:03:28,404
I would say sort of two things that I
wouldn't say radical, but are a bit

1409
01:03:28,404 --> 01:03:29,334
different than what I'm used to.

1410
01:03:29,334 --> 01:03:32,374
One is that we actually have manual QA
testing.

1411
01:03:32,754 --> 01:03:37,454
So we have a test suite for the app, but
there's enough pieces and weirdness and

1412
01:03:37,454 --> 01:03:41,494
sort of like impossible to create state
programmatically or challenging to create

1413
01:03:41,494 --> 01:03:45,554
that we have found value from having
someone manually run through a checklist

1414
01:03:45,554 --> 01:03:47,094
of the app.

1415
01:03:47,794 --> 01:03:52,244
And the other is that I've never actually
seen so many little prototypes get

1416
01:03:52,244 --> 01:03:53,112
created.

1417
01:03:53,742 --> 01:03:55,242
Um, interesting.

1418
01:03:55,242 --> 01:03:58,982
I think this might be because the app
itself is fairly large and fairly complex.

1419
01:03:58,982 --> 01:04:06,322
And so often to try a new interaction out
or a new little bit of functionality, it

1420
01:04:06,322 --> 01:04:13,312
seems more approachable or it's we get a
faster, uh, time to feedback by doing a

1421
01:04:13,312 --> 01:04:18,382
little play version of it that is in its
own repo with like no constraints.

1422
01:04:18,642 --> 01:04:19,412
Yeah.

1423
01:04:19,412 --> 01:04:22,574
I mean, that, that is, seems like another
one of those just.

1424
01:04:22,574 --> 01:04:27,254
really good buttons to hit in development,
like really good practices to have is like

1425
01:04:27,254 --> 01:04:31,154
code that you intend to throw away where
you're just, you know, exploring.

1426
01:04:31,154 --> 01:04:35,314
Um, yeah, proof of concept prototypes is
definitely one of the, it's like, seems so

1427
01:04:35,314 --> 01:04:37,994
obvious, but it's something that I don't
often reach for.

1428
01:04:37,994 --> 01:04:40,324
And then when I do, I go, why don't I do
this for everything?

1429
01:04:40,324 --> 01:04:45,514
Like, why don't you can get so far in a
single day with no constraints and, you

1430
01:04:45,514 --> 01:04:50,434
know, just playing around and really like,
you know, expose a lot of the complexity

1431
01:04:50,434 --> 01:04:52,238
that this thing will have or the,

1432
01:04:52,238 --> 01:04:53,178
I don't know.

1433
01:04:53,178 --> 01:04:57,488
So did you guys have to like, do you
systematize that in some way that like, do

1434
01:04:57,488 --> 01:05:00,498
you just all remember that, oh, this
should be a prototype or, you know?

1435
01:05:00,498 --> 01:05:03,668
Yeah, I think it's, I know, I think it
feels like it's part of the culture now

1436
01:05:03,668 --> 01:05:05,818
where it happens fairly automatically.

1437
01:05:05,818 --> 01:05:08,878
I don't think there's any dick, like no
dick dates that say like, you must do

1438
01:05:08,878 --> 01:05:09,358
this.

1439
01:05:09,358 --> 01:05:10,198
Right.

1440
01:05:10,198 --> 01:05:11,078
Yeah.

1441
01:05:11,078 --> 01:05:11,518
Yep.

1442
01:05:11,518 --> 01:05:15,778
Is that, is that the way a lot of it is,
is just like things get embedded in the

1443
01:05:15,778 --> 01:05:19,638
culture because they're good ideas and
then that's how good ideas continue.

1444
01:05:19,638 --> 01:05:22,254
Or do you have to like set?

1445
01:05:22,254 --> 01:05:26,014
good ideas, bake good ideas in somehow, or
is that like a challenge?

1446
01:05:26,274 --> 01:05:28,974
I've never thought about it systematically
like that.

1447
01:05:28,974 --> 01:05:32,454
So I don't think we have like a thing
that's like, here's how we write code

1448
01:05:32,454 --> 01:05:35,234
here, like here are the good ideas you
must not forget.

1449
01:05:35,234 --> 01:05:39,274
I think it's a little bit more like,
probably because we pair so much, I think

1450
01:05:39,274 --> 01:05:44,024
these things like get spread around or
someone will remember, or it's kind of

1451
01:05:44,024 --> 01:05:47,734
like, is the part of the oral history of
how we work.

1452
01:05:47,734 --> 01:05:48,594
Yep.

1453
01:05:48,854 --> 01:05:50,154
Yep, that's cool.

1454
01:05:50,294 --> 01:05:51,342
So you review it.

1455
01:05:51,342 --> 01:05:56,662
I have to imagine a ton of pull requests
as an open source maintainer.

1456
01:05:56,662 --> 01:06:00,582
I think what I'm finding is the more
active I am, the more pull requests I get.

1457
01:06:00,582 --> 01:06:02,952
And then the less active I am, the fewer I
get.

1458
01:06:02,952 --> 01:06:06,962
Cause I think people, I think people don't
want to submit pull requests if they don't

1459
01:06:06,962 --> 01:06:09,582
think that it's going to get paid
attention to.

1460
01:06:10,142 --> 01:06:14,272
So lately I've been like pretty on fire
with, with like getting the inbox zero

1461
01:06:14,272 --> 01:06:16,184
every day and like,

1462
01:06:16,184 --> 01:06:20,314
It's doing horrible things to my
productivity because like yesterday 11 PRS

1463
01:06:20,314 --> 01:06:21,654
got opened in one day.

1464
01:06:21,654 --> 01:06:26,154
Like I woke up and it was like, I have 11
new pull requests to review this morning.

1465
01:06:26,154 --> 01:06:31,764
So anyway, yeah, sometimes I do a lot of
code review, but sometimes I go, I can't

1466
01:06:31,764 --> 01:06:32,454
do this right now.

1467
01:06:32,454 --> 01:06:33,894
I have to work on other stuff.

1468
01:06:33,894 --> 01:06:34,394
But yeah.

1469
01:06:34,394 --> 01:06:35,234
Well, okay.

1470
01:06:35,234 --> 01:06:38,084
So I actually want to come back to my
original question because that's, that's

1471
01:06:38,084 --> 01:06:38,424
interesting.

1472
01:06:38,424 --> 01:06:42,024
So I noticed you tweeted the other day,
like you have these like list of, you have

1473
01:06:42,024 --> 01:06:46,062
like a bunch of shortcuts in your Chrome
new tab in order.

1474
01:06:46,062 --> 01:06:47,302
of how you start your day.

1475
01:06:47,302 --> 01:06:49,042
And like, I want to clear all the decks
here.

1476
01:06:49,042 --> 01:06:53,502
And the first one was email, which I feel
like is probably actually a terrible way

1477
01:06:53,502 --> 01:06:54,302
to start your day.

1478
01:06:54,302 --> 01:06:57,512
Actually, that was my take on your tweet
is that like, this is actually not

1479
01:06:57,512 --> 01:06:59,062
probably not a good way to start your day.

1480
01:06:59,062 --> 01:07:00,202
No, email is nothing.

1481
01:07:00,202 --> 01:07:02,382
It's there because it's the easiest.

1482
01:07:02,962 --> 01:07:07,402
I used to use it's easy and it almost
takes me no time ever.

1483
01:07:07,402 --> 01:07:11,102
But I need to look at it in case Aunt
Millie like wants to like have a family

1484
01:07:11,102 --> 01:07:12,742
party or something, you know.

1485
01:07:12,742 --> 01:07:13,262
Gotcha.

1486
01:07:13,262 --> 01:07:13,822
Yeah.

1487
01:07:13,822 --> 01:07:14,916
Well, so.

1488
01:07:15,150 --> 01:07:17,490
I saw some of myself in this tweet.

1489
01:07:17,490 --> 01:07:17,810
Okay.

1490
01:07:17,810 --> 01:07:20,220
I often think, all right, I need to get
going.

1491
01:07:20,220 --> 01:07:23,130
But first I'm going to clear all my
inboxes and then I'm going to clear my to

1492
01:07:23,130 --> 01:07:23,920
do inbox.

1493
01:07:23,920 --> 01:07:25,810
And then I'm going to like hit all the
things that are due today.

1494
01:07:25,810 --> 01:07:28,710
And then I'm going to get to like the
media project that is important for me for

1495
01:07:28,710 --> 01:07:30,050
this this month.

1496
01:07:30,070 --> 01:07:34,030
And I often stop the day after step three.

1497
01:07:34,030 --> 01:07:38,860
It's like, all right, I like like I spend
all my energy on the tending of the

1498
01:07:38,860 --> 01:07:39,600
inboxes.

1499
01:07:39,600 --> 01:07:42,170
And I almost got to the big thing that I
want to work on.

1500
01:07:42,170 --> 01:07:43,290
But I didn't.

1501
01:07:43,290 --> 01:07:43,440
Yeah.

1502
01:07:43,440 --> 01:07:44,350
And.

1503
01:07:45,102 --> 01:07:45,992
Do you experience that?

1504
01:07:45,992 --> 01:07:51,102
Like, do you, how do you stay productive
when you've got all this like incoming

1505
01:07:51,102 --> 01:07:54,762
issues and PRs and all that, and you feel
like to be a good maintainer, you've got

1506
01:07:54,762 --> 01:07:58,342
to do those, but they're not really what
you want to do long -term?

1507
01:07:58,342 --> 01:08:03,622
I just want to clarify that like, this is
somebody preaching about something he

1508
01:08:03,622 --> 01:08:08,022
doesn't have a lot of experience with
because the majority of my career is just

1509
01:08:08,022 --> 01:08:12,942
working on the meaty stuff and letting all
the stuff decay like a messy room until

1510
01:08:12,942 --> 01:08:14,190
it's so messy that you just.

1511
01:08:14,190 --> 01:08:16,980
crush all the PRs and then do it all over
again.

1512
01:08:16,980 --> 01:08:19,930
But I'm trying to do better and
differently.

1513
01:08:19,930 --> 01:08:24,310
So one thing that I've been trying to
stick to is 11 a .m.

1514
01:08:24,310 --> 01:08:30,050
being so I was listening to Matt and
Taylor on their the Laravel podcast and

1515
01:08:30,050 --> 01:08:31,570
and Matt was like, how are you so
productive?

1516
01:08:31,570 --> 01:08:33,290
And there's like, I don't even feel like
I'm productive.

1517
01:08:33,290 --> 01:08:35,350
And we're all like, dude, shut up.

1518
01:08:35,350 --> 01:08:37,070
You're such a liar.

1519
01:08:37,070 --> 01:08:38,690
But whatever.

1520
01:08:38,870 --> 01:08:40,820
And he's like, I.

1521
01:08:40,845 --> 01:08:45,515
he still, you know, he said this on your
podcast that he goes through every, he

1522
01:08:45,515 --> 01:08:47,785
still merges every pull request in the
organization.

1523
01:08:47,785 --> 01:08:52,005
And I've been trying to get out of that
for so long, but that it was like a, you

1524
01:08:52,005 --> 01:08:56,425
know what, if Taylor can do it with 10
times as much code as more than way more

1525
01:08:56,425 --> 01:09:00,825
than 10 times as much code as me, like I
can do it with my small repo.

1526
01:09:00,825 --> 01:09:06,025
And so he said that he does it basically,
he, he works on all that stuff until 11 am

1527
01:09:06,025 --> 01:09:08,405
and then he starts his day for other
stuff.

1528
01:09:08,405 --> 01:09:10,029
So I thought if Taylor can,

1529
01:09:10,029 --> 01:09:11,499
can dedicate up to 11 a .m.

1530
01:09:11,499 --> 01:09:13,489
I can dedicate up to 11 a .m.

1531
01:09:13,489 --> 01:09:17,189
And so that is one prevention from this
bleeding out into the red.

1532
01:09:17,189 --> 01:09:21,389
The two things I think the first
prevention is having that hard stop where

1533
01:09:21,389 --> 01:09:22,429
it's like, no, it's 11.

1534
01:09:22,429 --> 01:09:23,109
I'm done.

1535
01:09:23,109 --> 01:09:23,829
I'm not.

1536
01:09:23,829 --> 01:09:25,299
You can't sidetrack me.

1537
01:09:25,299 --> 01:09:27,489
You know, I'm going on to this other
thing.

1538
01:09:27,489 --> 01:09:31,109
And because all those things aren't in
like pins, tabs and whatever, I closed the

1539
01:09:31,109 --> 01:09:31,909
browser window.

1540
01:09:31,909 --> 01:09:35,739
So it's like there's not the pull request
things hanging out there.

1541
01:09:35,739 --> 01:09:37,489
So I'm only giving you till 11 a .m.

1542
01:09:37,489 --> 01:09:39,118
I think that's one important thing.

1543
01:09:39,118 --> 01:09:42,078
like breaking up the sessions of your day.

1544
01:09:42,078 --> 01:09:44,978
And then the other thing is being excited
about the meaty stuff.

1545
01:09:44,978 --> 01:09:48,628
So I'm like really amped about the meaty
stuff to the point that I'm like rushing

1546
01:09:48,628 --> 01:09:51,928
to try to get through the other stuff so I
can get to the meaty stuff.

1547
01:09:51,928 --> 01:09:57,058
And as you know, when you're like amped
about something, you're gonna do it, but

1548
01:09:57,058 --> 01:09:59,298
you're never gonna be amped about the
maintenance.

1549
01:09:59,298 --> 01:10:02,858
So that's why I think it just is only
gonna work for me to do that stuff first,

1550
01:10:02,858 --> 01:10:04,498
because I'm never gonna be amped about it.

1551
01:10:04,498 --> 01:10:06,176
So I have to.

1552
01:10:06,414 --> 01:10:10,734
I have to make sure that the reward is
after that, you know?

1553
01:10:11,274 --> 01:10:11,564
Yep.

1554
01:10:11,564 --> 01:10:12,614
That makes sense.

1555
01:10:12,614 --> 01:10:13,654
Yeah.

1556
01:10:13,834 --> 01:10:16,174
So you're eating the vegetables first.

1557
01:10:16,174 --> 01:10:16,954
I'm trying.

1558
01:10:16,954 --> 01:10:18,574
I'm trying to eat the vegetables first.

1559
01:10:18,574 --> 01:10:18,834
Yeah.

1560
01:10:18,834 --> 01:10:22,234
You're going to have the steak later
automatically because you want it.

1561
01:10:22,234 --> 01:10:23,074
Yes.

1562
01:10:23,074 --> 01:10:27,374
I'm not a vegetable eater, but I was in
Disney recently and this is another thing

1563
01:10:27,374 --> 01:10:28,574
contributing to this.

1564
01:10:28,574 --> 01:10:31,474
Like Disney keeps up on all their old
stuff so well.

1565
01:10:31,474 --> 01:10:33,014
I'm just like so inspired by that.

1566
01:10:33,014 --> 01:10:34,284
And I'm so not good at that.

1567
01:10:34,284 --> 01:10:35,334
I suck at that.

1568
01:10:35,334 --> 01:10:36,302
So I'm like,

1569
01:10:36,302 --> 01:10:39,942
This is my Hail Mary or this is my
starting fresh or my everyday is day one.

1570
01:10:39,942 --> 01:10:41,842
It's like, I'm going to reinvent myself.

1571
01:10:41,842 --> 01:10:46,972
I'm determined to reinvent myself as
somebody who cares for small details that

1572
01:10:46,972 --> 01:10:48,542
aren't exciting to me at all.

1573
01:10:48,542 --> 01:10:50,962
You know, interesting.

1574
01:10:51,022 --> 01:10:51,562
Huh?

1575
01:10:51,562 --> 01:10:52,902
I've gone the other way with that.

1576
01:10:52,902 --> 01:10:53,802
Really?

1577
01:10:53,802 --> 01:10:54,382
Yeah.

1578
01:10:54,382 --> 01:10:56,142
Don't tell me about it.

1579
01:10:56,142 --> 01:10:57,042
Sorry.

1580
01:10:57,042 --> 01:10:57,862
Tell me.

1581
01:10:57,862 --> 01:11:02,382
Well, I think I've decided that I can't
make myself want something.

1582
01:11:02,382 --> 01:11:02,942
Okay.

1583
01:11:02,942 --> 01:11:03,726
And.

1584
01:11:03,726 --> 01:11:07,306
Also that I'm at my best when I'm
embracing the things that I'm good at and

1585
01:11:07,306 --> 01:11:08,186
have passion for.

1586
01:11:08,186 --> 01:11:08,966
Yeah.

1587
01:11:08,966 --> 01:11:12,526
And should just kind of accept this other
stuff.

1588
01:11:12,526 --> 01:11:19,806
And maybe this is honestly this is kind of
a luxury because you can you can build a

1589
01:11:19,806 --> 01:11:22,746
business to augment your weaknesses.

1590
01:11:22,746 --> 01:11:23,346
True.

1591
01:11:23,346 --> 01:11:27,126
So I can hire people to do those things
that don't give me joy and I'm not good

1592
01:11:27,126 --> 01:11:28,026
at.

1593
01:11:28,026 --> 01:11:28,186
Yeah.

1594
01:11:28,186 --> 01:11:31,466
And often they're really good at it and
enjoy it.

1595
01:11:32,206 --> 01:11:33,422
So there's like

1596
01:11:33,422 --> 01:11:37,062
as a one man band, you might not, you may
just have to like suck it up and do that

1597
01:11:37,062 --> 01:11:37,902
for a while.

1598
01:11:37,902 --> 01:11:41,942
But like, I feel more motivated when I'm
just like, look, I love this and this and

1599
01:11:41,942 --> 01:11:42,172
this.

1600
01:11:42,172 --> 01:11:45,582
And I want to like spend as much time
doing those things.

1601
01:11:45,762 --> 01:11:48,602
Yeah, I generally agree with you.

1602
01:11:48,602 --> 01:11:53,772
And most of my life is spent with this
belief that like, man, like swimming

1603
01:11:53,772 --> 01:11:58,452
upstream, like just to, you know, find
your unfair advantage and double down on

1604
01:11:58,452 --> 01:11:58,632
it.

1605
01:11:58,632 --> 01:12:02,438
Like that's and for me, it's it's.

1606
01:12:02,446 --> 01:12:07,706
programming and innovating and new ideas
and talking and communicating and easy

1607
01:12:07,706 --> 01:12:08,606
communication like this.

1608
01:12:08,606 --> 01:12:12,826
Like these are all my strong suits, but
you know, long form written stuff and

1609
01:12:12,826 --> 01:12:17,116
keeping up maintenance support tickets,
like pull requests, all that crappy

1610
01:12:17,116 --> 01:12:20,046
context, which he stuff that I hate, I
suck at.

1611
01:12:20,126 --> 01:12:23,336
And I've, yeah, I guess right now I'm
okay.

1612
01:12:23,336 --> 01:12:27,116
My counterpoint to what you're saying,
because I have to like, I have to double

1613
01:12:27,116 --> 01:12:29,806
down on what I'm saying so that it sticks.

1614
01:12:29,846 --> 01:12:31,278
Cause I like, I'm trying.

1615
01:12:31,278 --> 01:12:36,658
I guess building a company and being able
to delegate some of these things is a big

1616
01:12:36,658 --> 01:12:38,138
solution to it.

1617
01:12:38,138 --> 01:12:43,208
But I'm even like, I'm wondering, this is
what I'm wondering is if working on my

1618
01:12:43,208 --> 01:12:48,558
week suits enhances the strong ones and
fills in these gaps.

1619
01:12:48,638 --> 01:12:56,228
And like, like now, because I have that
discipline injected into my day, the last

1620
01:12:56,228 --> 01:13:00,108
chunk of it is even more productive than
if it was the whole chunk and I wasn't,

1621
01:13:00,108 --> 01:13:00,812
you know,

1622
01:13:00,812 --> 01:13:03,282
deferring that gratification or something.

1623
01:13:03,282 --> 01:13:03,742
I don't know.

1624
01:13:03,742 --> 01:13:08,922
It could be a weak argument, but yeah,
maybe I'm just a solopreneur and right now

1625
01:13:08,922 --> 01:13:12,242
I'm in a position where to have the
company I want, I have to be good at the

1626
01:13:12,242 --> 01:13:14,002
things I'm not good at.

1627
01:13:14,502 --> 01:13:16,302
Or at least be like willing to do them.

1628
01:13:16,302 --> 01:13:19,702
Like hit a tolerable level of performance
there.

1629
01:13:19,722 --> 01:13:23,422
And I think it's like such a rare
attribute for people to be able to do what

1630
01:13:23,422 --> 01:13:27,438
I'm trying to do like this week and I have
no proof that I'll be able to.

1631
01:13:27,438 --> 01:13:30,838
that like I see it in the, the, the really
successful people around me.

1632
01:13:30,838 --> 01:13:35,058
Like I'm always, you know, picking on like
Taylor and Adam and Jeffrey and these

1633
01:13:35,058 --> 01:13:39,068
people in our community who've managed to
do this, they appear to be very strong in

1634
01:13:39,068 --> 01:13:39,908
all of these suits.

1635
01:13:39,908 --> 01:13:44,878
And it's like, I'm, I'm either, maybe they
naturally are or aren't, but I can at

1636
01:13:44,878 --> 01:13:47,938
least try really hard for this set of
things.

1637
01:13:47,938 --> 01:13:52,838
And maybe, you know, maybe that's a key
here, you know, I don't know.

1638
01:13:52,838 --> 01:13:57,170
Maybe that's why they make it to that
extra level is because.

1639
01:13:57,294 --> 01:14:00,484
They're not only doing all that
innovating, they're also answering support

1640
01:14:00,484 --> 01:14:04,724
tickets and making sure they're at inbox
zero for pull requests and caring for

1641
01:14:04,724 --> 01:14:05,934
those small details, you know?

1642
01:14:05,934 --> 01:14:07,094
I don't know.

1643
01:14:07,314 --> 01:14:08,794
Who knows?

1644
01:14:08,794 --> 01:14:10,174
But normally I'm with you.

1645
01:14:10,174 --> 01:14:11,114
Don't fight your nature.

1646
01:14:11,114 --> 01:14:12,404
Just like double down on it.

1647
01:14:12,404 --> 01:14:13,894
Use it to your advantage.

1648
01:14:13,894 --> 01:14:15,814
Pull those big levers, you know?

1649
01:14:15,814 --> 01:14:16,934
It's pretty nice.

1650
01:14:16,934 --> 01:14:18,334
But I don't know.

1651
01:14:18,334 --> 01:14:19,134
Yeah.

1652
01:14:19,994 --> 01:14:20,454
Okay.

1653
01:14:20,454 --> 01:14:22,574
Let's do a little lightning round.

1654
01:14:22,574 --> 01:14:23,214
Yeah.

1655
01:14:23,214 --> 01:14:26,318
So I want to hit you with a bunch of
questions and give me like,

1656
01:14:26,318 --> 01:14:28,298
a minute max on each of them.

1657
01:14:28,298 --> 01:14:28,698
Okay.

1658
01:14:28,698 --> 01:14:30,298
And don't ask me any questions.

1659
01:14:30,298 --> 01:14:31,018
Okay.

1660
01:14:31,418 --> 01:14:32,278
All right.

1661
01:14:32,278 --> 01:14:37,118
What is your dream pull request on one of
your open source libraries look like?

1662
01:14:38,198 --> 01:14:42,098
A documentation update that I can
instantly merge.

1663
01:14:42,658 --> 01:14:44,758
That's my dream.

1664
01:14:45,118 --> 01:14:53,114
But definitely failing tests, small, you
know, well,

1665
01:14:53,390 --> 01:14:55,640
Yeah, I don't even care so much about the
description.

1666
01:14:55,640 --> 01:14:58,850
The code should say a lot of it, but I'll
just pull it down.

1667
01:14:58,850 --> 01:15:01,630
And if the test makes sense and I don't
know, the smaller, the better.

1668
01:15:01,630 --> 01:15:03,230
That's the best thing I can say.

1669
01:15:03,230 --> 01:15:03,690
Yeah.

1670
01:15:03,690 --> 01:15:05,900
Tiny, tiny PRs, tiny PRs.

1671
01:15:05,900 --> 01:15:06,410
Yep.

1672
01:15:06,410 --> 01:15:09,050
Focused, tiny, small, high value.

1673
01:15:09,050 --> 01:15:10,210
That's, that's my dream.

1674
01:15:10,210 --> 01:15:10,520
Yep.

1675
01:15:10,520 --> 01:15:12,650
Do you care about good commit messages?

1676
01:15:12,810 --> 01:15:14,070
Not at all.

1677
01:15:14,070 --> 01:15:15,210
Ooh, why not?

1678
01:15:15,210 --> 01:15:16,240
I from other people.

1679
01:15:16,240 --> 01:15:16,810
I don't care.

1680
01:15:16,810 --> 01:15:19,170
Uh, for me, I, I used to do whip.

1681
01:15:19,170 --> 01:15:20,580
I don't do whip commit messages.

1682
01:15:20,580 --> 01:15:22,470
I write like a few words.

1683
01:15:22,470 --> 01:15:23,648
Like I'll say,

1684
01:15:23,662 --> 01:15:29,402
tweak this or fix test or try to just like
keep it as simple as possible but provide

1685
01:15:29,402 --> 01:15:31,162
some sort of flag.

1686
01:15:32,022 --> 01:15:37,312
But they all get squashed in the PR and
the PR description is usually, or at least

1687
01:15:37,312 --> 01:15:40,922
the title is like well written and the
release notes.

1688
01:15:40,922 --> 01:15:45,872
So I'm pretty rarely like actually looking
at individual commit messages for any

1689
01:15:45,872 --> 01:15:47,702
information, you know?

1690
01:15:47,862 --> 01:15:48,682
Gotcha.

1691
01:15:48,682 --> 01:15:50,942
Do you have any favorite coding books?

1692
01:15:53,454 --> 01:16:00,024
Yeah, I mean, refactoring Martin Fowler's
book is like kind of was a Bible for me at

1693
01:16:00,024 --> 01:16:00,594
one point.

1694
01:16:00,594 --> 01:16:08,414
And I guess another there's like making
your users badass or whatever.

1695
01:16:08,694 --> 01:16:11,454
That book was pretty impactful for me.

1696
01:16:11,454 --> 01:16:15,414
Yeah, from a maintenance perspective, I
read that book in that I still think about

1697
01:16:15,414 --> 01:16:20,054
that a lot of like making my users awesome
by making them really good at the tool

1698
01:16:20,054 --> 01:16:22,654
that I'm giving to them, not just giving
them the tool.

1699
01:16:22,794 --> 01:16:26,244
Making them feel like they're wizards so
that they go and they go like this thing

1700
01:16:26,244 --> 01:16:27,644
is the best I'm awesome at it.

1701
01:16:27,644 --> 01:16:28,554
Like you should learn it.

1702
01:16:28,554 --> 01:16:32,724
So Yeah, that's really good and Sandy Metz
99 bottles was really impactful for me at

1703
01:16:32,724 --> 01:16:36,484
one point a clean code was impacted You
know, there were things all along the

1704
01:16:36,484 --> 01:16:39,864
journey that were really impactful, but I
don't know I don't reference a lot of

1705
01:16:39,864 --> 01:16:40,404
books anymore.

1706
01:16:40,404 --> 01:16:44,524
I've given away most of them except for
refactoring and like That's it.

1707
01:16:44,524 --> 01:16:45,094
Yeah.

1708
01:16:45,094 --> 01:16:48,114
What are you doing now to keep improving?

1709
01:16:48,534 --> 01:16:51,614
a lot of it is like a

1710
01:16:52,654 --> 01:16:59,484
What's that, uh, can't Albert Hubbard and
like Thoreau and the transcendentalists

1711
01:16:59,484 --> 01:17:04,634
that were like very extreme, like, like
in, in that the truth is within you and

1712
01:17:04,634 --> 01:17:09,214
like, find your own way and, and whatever
they're like, things like that have been

1713
01:17:09,214 --> 01:17:13,004
kind of my journey as of late is like
writing my own story and finding my own

1714
01:17:13,004 --> 01:17:15,654
best ways to do things within myself.

1715
01:17:15,654 --> 01:17:21,034
It's a weird way of thinking about it, but
it's, I've been sort of drawing in to

1716
01:17:21,034 --> 01:17:21,742
create.

1717
01:17:21,742 --> 01:17:23,802
in original ways on my own.

1718
01:17:24,582 --> 01:17:31,072
So I'm not referencing a ton of stuff
these days, but improving my craft, I

1719
01:17:31,072 --> 01:17:31,302
guess.

1720
01:17:31,302 --> 01:17:31,772
I don't know.

1721
01:17:31,772 --> 01:17:36,922
I probably should do more of it, but a lot
of it's just internal progress, I guess.

1722
01:17:36,922 --> 01:17:37,822
Yeah.

1723
01:17:38,442 --> 01:17:44,082
Do you have any scripts or shell aliases
that you use a lot that you find valuable?

1724
01:17:45,342 --> 01:17:46,562
Yeah.

1725
01:17:46,802 --> 01:17:49,222
Nah, I got from Jeffrey.

1726
01:17:49,222 --> 01:17:50,286
It's like,

1727
01:17:50,286 --> 01:17:52,946
get hard reset, you know, I use that all
the time.

1728
01:17:52,946 --> 01:17:53,686
Okay.

1729
01:17:53,686 --> 01:17:56,306
To just scratch everything that's not
committed.

1730
01:17:56,306 --> 01:17:57,216
That's a big one.

1731
01:17:57,216 --> 01:17:58,366
I use a lot.

1732
01:17:58,366 --> 01:18:02,996
Um, nah, I have one called PR that just
like checks out a pull request locally so

1733
01:18:02,996 --> 01:18:05,386
that I can run the tests and work on it.

1734
01:18:05,386 --> 01:18:07,686
Um, yeah, that's really valuable.

1735
01:18:07,686 --> 01:18:09,756
And I'm trying to think there's probably a
bunch.

1736
01:18:09,756 --> 01:18:15,706
I mean, I have, Oh, like SIM linking a
local repo in our package manager.

1737
01:18:15,706 --> 01:18:19,982
So whatever, I mean, this is pretty
esoteric stuff, but like doing

1738
01:18:19,982 --> 01:18:24,622
like if I maintain a project, so I want to
be able to use it inside of other apps,

1739
01:18:24,622 --> 01:18:28,522
like locally, but not get the one from
like NPM kind of.

1740
01:18:28,522 --> 01:18:32,542
So having commands to just easily like sim
link those dependencies to my local

1741
01:18:32,542 --> 01:18:35,882
versions that I can develop on them and
then test them in apps locally.

1742
01:18:35,882 --> 01:18:40,312
Like that's an annoying thing that I put
into a bash alias, but yeah, I probably

1743
01:18:40,312 --> 01:18:42,502
have like 15 bash, bash aliases.

1744
01:18:42,502 --> 01:18:45,342
I keep it pretty simple, but that's,
that's the short answer.

1745
01:18:45,342 --> 01:18:45,902
Yeah.

1746
01:18:45,902 --> 01:18:48,662
Are those, are your files public?

1747
01:18:48,842 --> 01:18:49,870
Uh,

1748
01:18:49,870 --> 01:18:51,550
Old ones are, yeah.

1749
01:18:51,550 --> 01:18:53,210
Like I did this at one point.

1750
01:18:53,210 --> 01:18:57,130
I don't know how much I've changed since
then, but I think I put up like a bash

1751
01:18:57,130 --> 01:18:58,290
profile at one point.

1752
01:18:58,290 --> 01:19:04,050
And now it's like a ZSHRC file, but yeah,
there's not a ton going on in there.

1753
01:19:04,050 --> 01:19:07,330
There's just a few helpful things, yeah.

1754
01:19:07,490 --> 01:19:08,170
Gotcha.

1755
01:19:08,170 --> 01:19:13,030
Anything else in the core beliefs or
values about coding?

1756
01:19:14,290 --> 01:19:16,558
Something that I've kind of come to is,

1757
01:19:16,558 --> 01:19:20,758
I say this is like the only two things I
care about in programming is, is like

1758
01:19:20,758 --> 01:19:26,368
keeping methods small, keeping functions
and methods short, small is probably the

1759
01:19:26,368 --> 01:19:30,098
most valuable thing I think for any
programmer to improve code quality.

1760
01:19:30,098 --> 01:19:33,588
And then the other one is I call it the
single file principle.

1761
01:19:33,588 --> 01:19:37,038
It's basically like, if you can keep
everything, I don't really care about

1762
01:19:37,038 --> 01:19:42,438
like, uh, like co -location of like
concerns and all, you know, all these like

1763
01:19:42,438 --> 01:19:45,582
kind of big things, separation of
concerns, separation, you know,

1764
01:19:45,582 --> 01:19:47,162
optimizing for this and that.

1765
01:19:47,162 --> 01:19:50,842
For me, it's pretty much all about like,
can I put everything related to this one

1766
01:19:50,842 --> 01:19:52,142
thing in one file?

1767
01:19:52,142 --> 01:19:54,922
And if I can't, can I put it in one
folder?

1768
01:19:54,922 --> 01:19:58,862
And so like LiveWare is code -based, every
feature has a folder and there's patterns

1769
01:19:58,862 --> 01:19:59,642
in those folders.

1770
01:19:59,642 --> 01:20:01,752
So it's like the tests are right in those
folders too.

1771
01:20:01,752 --> 01:20:07,012
So it's very, it's like as co -located as
you can make your code make it, which is

1772
01:20:07,012 --> 01:20:11,592
often hard because things that are co
-located are separate and sometimes they

1773
01:20:11,592 --> 01:20:13,222
need to interact with each other.

1774
01:20:13,222 --> 01:20:13,806
And that.

1775
01:20:13,806 --> 01:20:16,756
So I use like an event system in LiveWire
and that introduced a little bit of

1776
01:20:16,756 --> 01:20:17,526
indirection.

1777
01:20:17,526 --> 01:20:21,366
But anyway, two big programming
philosophies are the single file principle

1778
01:20:21,366 --> 01:20:23,856
or just like single folder, whatever, keep
it in one file.

1779
01:20:23,856 --> 01:20:27,206
So when you need to go change that thing,
you just go, oh, I go to that file and the

1780
01:20:27,206 --> 01:20:30,356
change lives in here somewhere, you know,
or if I want to rewrite it, just rewrite

1781
01:20:30,356 --> 01:20:32,926
that one file and then keeping methods
short.

1782
01:20:32,926 --> 01:20:34,426
It's like the two big things.

1783
01:20:34,426 --> 01:20:34,686
Yeah.

1784
01:20:34,686 --> 01:20:35,206
Yeah.

1785
01:20:35,206 --> 01:20:39,216
So if you, if you're using the single file
or single folder thing, let's say you

1786
01:20:39,216 --> 01:20:40,956
like, you like, you decide you want to
delete a feature.

1787
01:20:40,956 --> 01:20:42,416
You're like, actually, this was a bad
idea.

1788
01:20:42,416 --> 01:20:42,766
Yeah.

1789
01:20:42,766 --> 01:20:44,044
Delete that folder.

1790
01:20:44,334 --> 01:20:46,224
almost nothing else changes, gone.

1791
01:20:46,224 --> 01:20:47,114
That's everything.

1792
01:20:47,114 --> 01:20:51,994
So LiveWire and Alpine, every single
directive and pretty much every feature,

1793
01:20:51,994 --> 01:20:55,654
you can comment out the one line that
includes it, like that references that

1794
01:20:55,654 --> 01:20:56,394
flake in JavaScript.

1795
01:20:56,394 --> 01:20:58,154
It's like import this file.

1796
01:20:58,154 --> 01:21:02,544
You can pretty much just comment out any
of the APIs and everything else still

1797
01:21:02,544 --> 01:21:02,844
works.

1798
01:21:02,844 --> 01:21:08,324
So I separate the code bases into the core
machinery that can't be changed and then

1799
01:21:08,324 --> 01:21:09,074
all the features.

1800
01:21:09,074 --> 01:21:12,174
And I try to really make, yeah, so that.

1801
01:21:12,174 --> 01:21:13,374
make it as removable as possible.

1802
01:21:13,374 --> 01:21:14,984
But that is a goal and I can do that.

1803
01:21:14,984 --> 01:21:16,584
I've achieved that with both of the
rewrites.

1804
01:21:16,584 --> 01:21:18,034
Those were the big motivations.

1805
01:21:18,034 --> 01:21:18,794
Yeah.

1806
01:21:18,914 --> 01:21:21,054
Why are short methods good?

1807
01:21:21,334 --> 01:21:22,464
Short methods are good.

1808
01:21:22,464 --> 01:21:28,394
I mean, they're good for readability, but
I think they ultimately they're really

1809
01:21:28,394 --> 01:21:34,154
great for readability, but I think they
just result in better architectures

1810
01:21:34,154 --> 01:21:40,954
because you identify points of reusability
and, and like extraction so much better

1811
01:21:40,954 --> 01:21:42,126
than when everything is

1812
01:21:42,126 --> 01:21:44,746
is like in a pile.

1813
01:21:45,226 --> 01:21:46,446
Yeah, I don't know.

1814
01:21:46,446 --> 01:21:51,946
It's just one of those things that to me
feels like you can turn your bad code into

1815
01:21:51,946 --> 01:21:54,846
good code simply by making a bunch of
small methods.

1816
01:21:54,846 --> 01:21:56,826
Like it almost is universally true for me.

1817
01:21:56,826 --> 01:21:57,626
I don't know.

1818
01:21:57,626 --> 01:22:01,506
How do you start trying to understand a
piece of code you haven't seen before?

1819
01:22:01,846 --> 01:22:05,446
First, I pull it down and like I have to
touch it.

1820
01:22:05,446 --> 01:22:07,426
I can't just like read it on GitHub.

1821
01:22:07,426 --> 01:22:10,382
I could do that a little bit, but it's.

1822
01:22:10,382 --> 01:22:13,332
annoying for me to pull stuff down, but I
know it's the secret to success.

1823
01:22:13,332 --> 01:22:16,872
Like I have to pull the thing down because
then I'm in the context and then I can

1824
01:22:16,872 --> 01:22:17,622
touch it.

1825
01:22:17,622 --> 01:22:21,832
So if I can open the file and look at it
and especially interact with it, that's

1826
01:22:21,832 --> 01:22:22,642
really good.

1827
01:22:22,642 --> 01:22:25,192
Running the tests is good.

1828
01:22:25,192 --> 01:22:27,722
I use step debugger in the front end.

1829
01:22:27,722 --> 01:22:33,512
I use like Chrome step debugger a lot,
but, but yeah, I, I guess it's just like,

1830
01:22:33,512 --> 01:22:38,350
it's really bouncing around to different
modes of, of, um,

1831
01:22:38,350 --> 01:22:41,630
of interaction until one of them gives me
the understanding I'm looking for.

1832
01:22:41,630 --> 01:22:43,420
It's like, I start with just scanning out.

1833
01:22:43,420 --> 01:22:43,870
I didn't do it.

1834
01:22:43,870 --> 01:22:45,480
Pull it down, run the test, start with
that.

1835
01:22:45,480 --> 01:22:46,420
You know, I didn't do it.

1836
01:22:46,420 --> 01:22:51,110
You know, it's like sort of dig into the
different depths until one of them sticks.

1837
01:22:51,110 --> 01:22:51,270
Yeah.

1838
01:22:51,270 --> 01:22:52,830
Got it.

1839
01:22:52,830 --> 01:22:57,670
You recently rewrote a large project and
it seems like it went well.

1840
01:22:57,670 --> 01:22:59,630
It seems like you achieved your goals and
you're happy with that.

1841
01:22:59,630 --> 01:23:02,930
What is your, what is your take on
rewrites now and your advice for other

1842
01:23:02,930 --> 01:23:04,490
people considering them?

1843
01:23:04,490 --> 01:23:07,822
If you're your own boss and you can afford
it.

1844
01:23:07,822 --> 01:23:12,102
and it'll make you happy and happiness is
important to your business.

1845
01:23:12,102 --> 01:23:13,732
That's all the things that were true for
me.

1846
01:23:13,732 --> 01:23:15,562
I need to love the code base I'm working
in.

1847
01:23:15,562 --> 01:23:17,962
So I just decided, well, screw it.

1848
01:23:17,962 --> 01:23:19,152
I'm just going to do it.

1849
01:23:19,152 --> 01:23:23,752
Um, but for most applications and
businesses and whatnot, it doesn't make a

1850
01:23:23,752 --> 01:23:24,572
ton of sense.

1851
01:23:24,572 --> 01:23:26,462
Um, pretty often.

1852
01:23:26,462 --> 01:23:29,892
And so I'd like, would probably caution
people, tell people to like do everything,

1853
01:23:29,892 --> 01:23:30,962
but, or rewrite.

1854
01:23:30,962 --> 01:23:33,198
And then like, that's like the very last
thing.

1855
01:23:33,198 --> 01:23:33,618
you should do.

1856
01:23:33,618 --> 01:23:37,418
And if you do do it, like do a base camp
style new version of your product that you

1857
01:23:37,418 --> 01:23:39,768
can market so that business is amped about
the rewrite too.

1858
01:23:39,768 --> 01:23:42,998
And it's not just like a giant waste of
resources to them.

1859
01:23:42,998 --> 01:23:44,098
Yeah.

1860
01:23:44,098 --> 01:23:45,218
That's good.

1861
01:23:45,218 --> 01:23:46,358
Awesome.

1862
01:23:46,618 --> 01:23:49,278
Anything we didn't talk about that you
want to cover?

1863
01:23:49,278 --> 01:23:50,348
You feel passionate about things.

1864
01:23:50,348 --> 01:23:53,718
So, I mean, I'm pretty passionate about
everything so we could be here all day.

1865
01:23:53,718 --> 01:23:57,938
I think we covered, we covered some ground
and, and had some good chats.

1866
01:23:57,938 --> 01:23:59,178
Yeah, we did.

1867
01:23:59,178 --> 01:24:00,358
I'm really glad you came on.

1868
01:24:00,358 --> 01:24:01,670
This is, this is great.

1869
01:24:01,902 --> 01:24:02,122
Nice.

1870
01:24:02,122 --> 01:24:03,622
Yeah, thanks for having me, Ben.

1871
01:24:03,622 --> 01:24:04,202
I agree.

1872
01:24:04,202 --> 01:24:04,682
It a pleasure.

1873
01:24:04,682 --> 01:24:06,122
Is there anywhere you want to send people?

1874
01:24:06,122 --> 01:24:08,822
How do we support you as a developer and
human?

1875
01:24:09,182 --> 01:24:11,322
Twitter is where I hang out, so follow me
on Twitter.

1876
01:24:11,322 --> 01:24:13,142
Most important thing.

1877
01:24:14,382 --> 01:24:19,302
I sell screencasts for stuff I make, and
if you use the stuff I make, buying the

1878
01:24:19,302 --> 01:24:22,682
screencasts is the best thing you could do
for me, and I appreciate that.

1879
01:24:22,682 --> 01:24:23,202
Cool.

1880
01:24:23,202 --> 01:24:23,682
Awesome.

1881
01:24:23,682 --> 01:24:24,862
Well, thanks for coming on.

1882
01:24:24,862 --> 01:24:25,872
Thanks for having me, Ben.

1883
01:24:25,872 --> 01:24:26,822
See you.

1884
01:24:26,822 --> 01:24:27,922
See you.