WEBVTT
1
00:00:01.080 --> 00:00:03.000
How'd you like to listen to dot net rocks with
2
00:00:03.040 --> 00:00:07.879
no ads? Easy? Become a patron For just five dollars
3
00:00:07.919 --> 00:00:10.800
a month, you get access to a private RSS feed
4
00:00:10.839 --> 00:00:14.039
where all the shows have no ads. Twenty dollars a
5
00:00:14.039 --> 00:00:16.559
month will get you that and a special dot net
6
00:00:16.640 --> 00:00:20.399
Rocks patron mug. Sign up now at Patreon dot dot
7
00:00:20.440 --> 00:00:36.479
NetRocks dot com. Hey, welcome back to dot net rocks.
8
00:00:36.520 --> 00:00:39.320
I'm Carl Franklin and A'mirchrid Campbell, and we're recording this
9
00:00:39.439 --> 00:00:42.920
right before we leave for dev Intersection in Orlando. But
10
00:00:43.439 --> 00:00:44.479
you are not home, sir.
11
00:00:44.759 --> 00:00:47.439
No, No, It'll all have been over by then. It'll
12
00:00:47.439 --> 00:00:51.439
almost be, you know, Halloween, so right, I'll be in
13
00:00:51.439 --> 00:00:53.520
the Netherlands when this publishes, so something.
14
00:00:53.600 --> 00:00:55.039
But right now, you're not at home, are you?
15
00:00:55.240 --> 00:00:57.560
I am, Yeah, I'm leaving. Oh you are. Literally we're
16
00:00:57.560 --> 00:00:59.159
recording a show and then I'm packing up to head
17
00:00:59.200 --> 00:01:03.039
to the mainland tomorrow. Okay, see you in Orlando, dude.
18
00:01:02.880 --> 00:01:05.439
All right, Okay, I thought you were on a trip before.
19
00:01:06.159 --> 00:01:06.680
Maybe you were.
20
00:01:06.719 --> 00:01:08.239
I don't know. I can't keep track of you. I
21
00:01:08.280 --> 00:01:09.000
don't even want to.
22
00:01:09.079 --> 00:01:11.040
Yeah, me neither. I don't even know where I am,
23
00:01:11.640 --> 00:01:12.359
Wait a minute, are you?
24
00:01:13.040 --> 00:01:14.519
Who are you? What'd you do with Richard Mind?
25
00:01:15.040 --> 00:01:16.000
I'm just another AI.
26
00:01:16.480 --> 00:01:20.200
Yeah right, uh well, let's you know, since this is
27
00:01:20.359 --> 00:01:24.040
episode nineteen seventy four, let's talk about what happened that year,
28
00:01:24.200 --> 00:01:25.799
shall we before we do anything else.
29
00:01:25.959 --> 00:01:29.040
Oh, it's an exciting year. It's an exciting year. Nixon.
30
00:01:29.120 --> 00:01:30.560
Bye bye, Where do you want to start?
31
00:01:30.599 --> 00:01:33.159
Bye bye Nixon. Yeah, he's not a crook, but he
32
00:01:33.239 --> 00:01:33.799
is resigning.
33
00:01:33.879 --> 00:01:35.760
Are you sure? I don't know, I sound so sure?
34
00:01:35.760 --> 00:01:39.560
Well he said so, yeah, okay, And you know, after
35
00:01:39.680 --> 00:01:42.280
that day, we didn't have Dick Nixon to kick around anymore.
36
00:01:42.480 --> 00:01:46.040
So I think he did for a while longer, but yeah,
37
00:01:46.400 --> 00:01:48.760
oh yeah, yeah, as long as I miss was alive,
38
00:01:48.799 --> 00:01:50.439
he was getting kicked on a daily basis.
39
00:01:50.480 --> 00:01:51.719
Yeah.
40
00:01:51.760 --> 00:01:55.280
The Turkish military invaded Cyprus following a coup, leading to
41
00:01:55.319 --> 00:02:00.359
a division of the island and increased international tensions.
42
00:02:00.040 --> 00:02:03.000
Which still persists this day. That division in Cyprus.
43
00:02:03.280 --> 00:02:07.840
The Carnation Revolution occurred in Portugal. That's a coup resulting
44
00:02:07.840 --> 00:02:12.759
in the overthrow of the authoritarian regime. So the FIFA
45
00:02:12.879 --> 00:02:15.879
World Cup took place in West Germany, where the host
46
00:02:15.960 --> 00:02:18.919
nation defeated the Netherlands two to one to win the championship.
47
00:02:19.439 --> 00:02:23.240
Just in case you were wondering, the boxing match known
48
00:02:23.280 --> 00:02:26.759
as the Rumble in the Jungle featured Muhammad Ali defeating
49
00:02:26.879 --> 00:02:33.199
George Foreman in Zaire. Ali would go forward to have
50
00:02:33.280 --> 00:02:36.240
a great after career life in George Foreman sold grills.
51
00:02:37.280 --> 00:02:39.280
He did a lot more than that. He had seven kids,
52
00:02:39.319 --> 00:02:46.039
all named George. The Swedish pop group Abba won the
53
00:02:46.080 --> 00:02:49.560
Eurovision Song Contest with their song Waterloo, making the start
54
00:02:49.599 --> 00:02:53.280
of their successful career. Have you seen the Eurovision Song
55
00:02:53.360 --> 00:02:54.639
Contest recently, Richard?
56
00:02:54.800 --> 00:02:57.360
Not recently, No, but I'm aware of it. You don't
57
00:02:57.360 --> 00:02:58.919
want to, okay.
58
00:02:59.280 --> 00:03:03.080
Some significant the film's release include The Godfather Part two, Chinatown,
59
00:03:03.120 --> 00:03:06.639
and Blazing Saddles, all movies that probably couldn't be made
60
00:03:06.639 --> 00:03:12.400
today in my opinion. I'm going to talk about the
61
00:03:12.520 --> 00:03:17.599
Terracotta Warriors. The first of those were discovering Jiang, China, unbelievable,
62
00:03:17.680 --> 00:03:20.919
leading to significant archaeological finds. What do you know about
63
00:03:20.960 --> 00:03:22.520
the terracotta warriors, Richard.
64
00:03:22.400 --> 00:03:25.360
I've been there, but just you know, I know that
65
00:03:25.360 --> 00:03:27.039
once they were exposed, they started to decay, like a
66
00:03:27.039 --> 00:03:28.319
lot of the paint was still on them. When they
67
00:03:28.319 --> 00:03:30.280
first were found, but.
68
00:03:30.280 --> 00:03:33.599
They were made to with the with the emperor, I
69
00:03:33.599 --> 00:03:37.639
suppose in the grave to protect him, right.
70
00:03:37.520 --> 00:03:40.360
Yeah, that's the that's the idea. Like nobody really knows
71
00:03:40.400 --> 00:03:43.960
for sure, but the Yeah, you'd have to see this thing.
72
00:03:43.960 --> 00:03:47.000
It's unbelievably vast. Yeah, and the crazy part is, like
73
00:03:47.120 --> 00:03:49.639
archaeology is not a huge thing in China, They've only
74
00:03:49.639 --> 00:03:52.479
done a little. There's so much more to be found there.
75
00:03:53.080 --> 00:03:56.680
And this is a culture that's been around literally for millennia. Yeah,
76
00:03:56.719 --> 00:03:58.919
you're talking these things are what two thousand or so
77
00:03:59.039 --> 00:04:00.800
years old, but there's so much more.
78
00:04:01.240 --> 00:04:03.599
I think the crazy part is that people actually built
79
00:04:03.639 --> 00:04:06.560
thousands of terracotta warriors and stuffed them in a grave. Yeah,
80
00:04:06.680 --> 00:04:07.560
that's kind of crazy.
81
00:04:07.680 --> 00:04:11.080
It speaks to the wealth of that country at that time,
82
00:04:11.199 --> 00:04:12.960
right that they could afford to do such just like
83
00:04:13.000 --> 00:04:16.160
building pyramids. Like, clearly you have too much money, right
84
00:04:16.319 --> 00:04:19.360
if you can build these things. But that, yeah, it's
85
00:04:19.439 --> 00:04:20.560
another example of that.
86
00:04:20.800 --> 00:04:23.600
So what happened in science and Tech and seventy four Richard.
87
00:04:24.240 --> 00:04:27.879
Not a big space year. Mariner ten made it to Mercury,
88
00:04:27.920 --> 00:04:29.879
the first probe to ever do that, actually do two
89
00:04:29.879 --> 00:04:33.600
flybys of Mercury, and that would be the only visit
90
00:04:33.720 --> 00:04:35.839
to Mercury in the twentieth century. That would be the
91
00:04:35.879 --> 00:04:40.040
Messenger spacecraft in the twenty first century. And that's about it.
92
00:04:40.079 --> 00:04:42.120
There's a couple of soused flights to sal you there's
93
00:04:42.120 --> 00:04:44.279
the plans for the Apollo Soy use missions, but they
94
00:04:44.279 --> 00:04:47.360
won't happen until the next year, so not a big
95
00:04:47.439 --> 00:04:48.240
year in space.
96
00:04:48.519 --> 00:04:51.759
And like Venus, Mercury is not a very hospitable planet.
97
00:04:51.839 --> 00:04:54.759
Well, it's awfully close to the Sun. It's very very hot,
98
00:04:54.839 --> 00:04:58.240
no atmosphere at all. Yeah, but still interesting, you know,
99
00:04:58.600 --> 00:05:02.720
and certainly something so we're studying further tricky to get
100
00:05:02.759 --> 00:05:04.519
to takes a lot of energy to get there.
101
00:05:04.560 --> 00:05:06.920
Do we actually get data from it before it burned up?
102
00:05:07.000 --> 00:05:09.600
Oh yeah, No, it's not that close. Was able to
103
00:05:09.720 --> 00:05:13.319
orbit around fly bys Mercury. You know, going into orbit
104
00:05:13.360 --> 00:05:15.120
around Mercury is very challenging. We won't do that for
105
00:05:15.160 --> 00:05:15.720
quite some time.
106
00:05:16.839 --> 00:05:19.920
The first reporting on the destruction of the ozone layer
107
00:05:20.680 --> 00:05:24.279
nineteen seventy four and will lead in a few years
108
00:05:24.279 --> 00:05:26.639
to the thing called the Montreal Accords. Well, we'll band
109
00:05:26.680 --> 00:05:29.920
CFC's and ultimate allow the ozone layer to repair itself
110
00:05:29.920 --> 00:05:32.319
a successful story and turns out it worked. It worked.
111
00:05:32.519 --> 00:05:35.839
Yeah, I'm giving away the ending. We can do those
112
00:05:35.920 --> 00:05:38.639
kinds of things, people, We can. We absolutely can. And
113
00:05:39.000 --> 00:05:40.720
I use that as an example when we talk about the
114
00:05:40.800 --> 00:05:45.600
current crisses. The first edition of Dungeons and Dragons is published.
115
00:05:45.680 --> 00:05:50.360
Gary Gygax and Dave Arnison from TSR derived from an
116
00:05:50.399 --> 00:05:53.680
earlier game played with miniatures and went.
117
00:05:53.560 --> 00:05:56.759
On to make geeks even geek here for many, many years.
118
00:05:56.800 --> 00:05:59.160
Oh yeah, but and I would say this is by
119
00:05:59.199 --> 00:06:01.199
far from in our part of the world. The most
120
00:06:01.199 --> 00:06:03.959
important thing happened in seventy four. Right at the end
121
00:06:03.959 --> 00:06:07.600
of nineteen seventy four, the mits altear eighty eight hundred.
122
00:06:08.639 --> 00:06:11.639
So this was not the only personal computer at the time.
123
00:06:11.680 --> 00:06:14.000
There were kits you could buy that would just be
124
00:06:14.120 --> 00:06:15.639
give you and you'd have to put together the parts
125
00:06:15.680 --> 00:06:19.120
and so forth. This was the first assembled machine based
126
00:06:19.120 --> 00:06:21.800
on the Intel eighty eighty. The design would largely lead
127
00:06:21.800 --> 00:06:24.720
to the S one hundred bus machine. In general, you
128
00:06:24.759 --> 00:06:26.720
could only had to set at LEDs on the front end.
129
00:06:26.759 --> 00:06:28.959
You would program it with switches, or you could add
130
00:06:28.959 --> 00:06:31.079
a serial card to it to have a teletype interface.
131
00:06:31.079 --> 00:06:34.199
Otherwise just not display no keyboard under that stuff. Yeah,
132
00:06:34.240 --> 00:06:38.879
and it was popular electronics. Is this magazine that was
133
00:06:38.920 --> 00:06:43.439
actually driving One of their rival magazines had published this
134
00:06:43.639 --> 00:06:45.759
kit on their cover, and they wanted to make sure
135
00:06:45.800 --> 00:06:47.560
they had something as well. So they were pushing and
136
00:06:47.680 --> 00:06:50.279
my admits to get this thing done in time. And
137
00:06:50.360 --> 00:06:52.399
so nominally it was on the cover of the January
138
00:06:52.480 --> 00:06:56.279
nineteen seventy five edition, but it was actually put on
139
00:06:56.319 --> 00:06:58.199
new stands in December seventy four, so I included the
140
00:06:58.240 --> 00:07:02.560
seventy four And why is it important? This is Microsoft's
141
00:07:02.600 --> 00:07:06.720
founding product. That cover is the thing that got Gates
142
00:07:06.720 --> 00:07:11.800
to drop out of Harvard and moved to Albuquerque and
143
00:07:12.000 --> 00:07:14.000
write a version of Basic would later be known as
144
00:07:14.040 --> 00:07:16.720
the Altar Basic, which was Microsoft's very first.
145
00:07:16.480 --> 00:07:18.160
Product, and he wrote it with the Altair.
146
00:07:18.639 --> 00:07:20.279
He used the alt He actually wrote it on a
147
00:07:20.319 --> 00:07:23.160
different machine because he didn't have one. He wrote it
148
00:07:22.439 --> 00:07:26.199
on a machine at Harvard, a lot of it by
149
00:07:26.279 --> 00:07:28.600
hand and by hand figured it all out because they
150
00:07:28.600 --> 00:07:31.600
had to run in four K, and then brought it
151
00:07:31.639 --> 00:07:34.279
down there and coated it in to test it. But
152
00:07:34.360 --> 00:07:36.079
the first time he already had it written before the
153
00:07:36.120 --> 00:07:37.920
first time he actually laid hand on an altar because
154
00:07:37.920 --> 00:07:39.839
there wasn't any of them, and the name Altar actually
155
00:07:39.879 --> 00:07:43.759
comes from the star Alta, although there's an apocryphal or
156
00:07:43.800 --> 00:07:47.079
adjacent story of the fact that around that same time,
157
00:07:47.120 --> 00:07:50.439
in the late seventies, the television show Star Trek had
158
00:07:50.439 --> 00:07:52.560
an episode on a mock time where they go to
159
00:07:52.600 --> 00:07:56.519
Altair six, and since it was a star of a technology,
160
00:07:56.560 --> 00:07:58.560
they ought to have a cool name, not just a number,
161
00:07:58.560 --> 00:07:59.079
so they called it.
162
00:07:59.199 --> 00:08:01.680
So I've seen pick of the Altear and you're right.
163
00:08:01.720 --> 00:08:04.439
It has like switches where you can turns the zeros
164
00:08:04.480 --> 00:08:07.920
into the ones on and then press the button to
165
00:08:08.079 --> 00:08:10.040
write it into memory. It kind of reminds me of
166
00:08:10.040 --> 00:08:13.279
a pressure cooker, you know, like, well, it's just a box, right,
167
00:08:13.319 --> 00:08:16.399
it's a issue here is it's turning over. It's before
168
00:08:16.519 --> 00:08:21.079
RAM exists. Yeah, so you had to hand key the bootloader. Wow,
169
00:08:21.199 --> 00:08:23.720
it was like one hundred and seventeen bytes something like that.
170
00:08:23.800 --> 00:08:27.439
So you literally so booed up was a process. Was
171
00:08:27.480 --> 00:08:29.519
literally once you got that thing running, you didn't want
172
00:08:29.519 --> 00:08:31.000
to turn it off. Power goes out.
173
00:08:31.079 --> 00:08:34.240
No, Yeah, and this is they weren't even using cassette
174
00:08:34.240 --> 00:08:36.639
tapes at this point. The first versions of Basic were
175
00:08:36.679 --> 00:08:41.360
on this paper tape with holes punched in it that
176
00:08:41.399 --> 00:08:43.759
they that the thing could read in to load up
177
00:08:43.759 --> 00:08:45.480
the version of Basic. It was a very small version
178
00:08:45.480 --> 00:08:47.039
of Basic because there's only four k RAM and you
179
00:08:47.039 --> 00:08:50.600
still have to run your program too, right, So.
180
00:08:50.200 --> 00:08:53.320
They really only had mainframes before that, right, main four
181
00:08:53.399 --> 00:08:53.679
or less.
182
00:08:53.679 --> 00:08:56.440
And many the PDPs are around, right, the mini computers,
183
00:08:57.080 --> 00:08:57.720
but they're all.
184
00:08:57.639 --> 00:09:00.080
Using cards, so it makes sense that they would be
185
00:09:00.240 --> 00:09:01.679
using that technology.
186
00:09:02.000 --> 00:09:05.519
He uses paper tape. And there's no copy of the
187
00:09:05.559 --> 00:09:09.159
original ALTA Basic. I think it exists anywhere. There is
188
00:09:09.200 --> 00:09:12.960
a version of the advanced version of that Basic in
189
00:09:13.039 --> 00:09:17.320
the Computer History Museum in the Silicon Valley, signed by Gates,
190
00:09:17.360 --> 00:09:20.200
and I think it was Gates's actual copy of it.
191
00:09:20.320 --> 00:09:20.720
Wow.
192
00:09:20.840 --> 00:09:24.039
And so yeah, yeah, the original original it starts the
193
00:09:24.039 --> 00:09:24.720
whole company.
194
00:09:25.000 --> 00:09:27.679
I think it's gone. That's pretty crazy. Yeah, so the
195
00:09:27.759 --> 00:09:30.519
history of dot net starts in nineteen seventy four, doesn't.
196
00:09:30.399 --> 00:09:34.039
Theoretically, I mean it's beginning of Microsoft. But yeah, yeah,
197
00:09:34.159 --> 00:09:36.919
all right in Albuquerque. Wow, good one.
198
00:09:38.039 --> 00:09:41.200
So let's start then next with better no framework?
199
00:09:41.240 --> 00:09:41.600
Awesome?
200
00:09:49.240 --> 00:09:51.960
Al what you got? Do you use bitwarden? So do?
201
00:09:52.039 --> 00:09:54.440
I I love Bitwarden? Did you know that you can
202
00:09:54.519 --> 00:09:55.919
run it on prem Yeah.
203
00:09:56.039 --> 00:09:58.519
Yeah, the open source product, right as it should be.
204
00:09:58.600 --> 00:10:01.399
Yeah, I didn't know this, and then I found the
205
00:10:01.399 --> 00:10:07.759
Bitwarden server get repository and apparently you know, so, like
206
00:10:07.799 --> 00:10:09.039
I said, I didn't know it. I thought it was
207
00:10:09.039 --> 00:10:11.559
a product that you subscribe to, and it is. But
208
00:10:11.600 --> 00:10:12.879
if you want to run it yourself in.
209
00:10:12.840 --> 00:10:14.799
There, you can use it for free or you can
210
00:10:14.799 --> 00:10:15.399
pay them like.
211
00:10:15.360 --> 00:10:18.159
You and so what's really cool about this is that
212
00:10:18.399 --> 00:10:22.039
you know, hey, maybe we don't even want to trust
213
00:10:22.080 --> 00:10:25.440
bitwarden dot com with our passwords. Maybe we want to
214
00:10:25.720 --> 00:10:28.519
you know, keep all our data behind the firewall and
215
00:10:28.840 --> 00:10:32.320
wherever we want to put it, and you know, to
216
00:10:32.399 --> 00:10:35.320
be more secure. I mean, whether it is or not,
217
00:10:35.440 --> 00:10:37.559
I don't know, but at least that's an option. So
218
00:10:37.679 --> 00:10:41.600
you can download the server. It has all the APIs
219
00:10:41.679 --> 00:10:44.440
and everything that you need to run it. You can
220
00:10:44.480 --> 00:10:46.759
even run it on a Windows machine. You can run
221
00:10:46.799 --> 00:10:50.200
it in Docker containers on a Windows machine if you
222
00:10:50.240 --> 00:10:53.000
want to. Of course, Linux and Mac it's all there.
223
00:10:53.279 --> 00:10:54.799
It's really really cool and.
224
00:10:54.759 --> 00:10:57.279
If we have made it clear, it's a password manager. Yes,
225
00:10:58.039 --> 00:11:02.000
you know, you can buy commercial products like one passes
226
00:11:02.039 --> 00:11:06.080
and so forth. But This is also one I've fallen
227
00:11:06.120 --> 00:11:07.960
on too. I had to leave last pass when last
228
00:11:07.960 --> 00:11:10.279
pass went insane. Me too, Yeah, which, by the way,
229
00:11:10.360 --> 00:11:12.960
I found migrating off the last pass less painful than
230
00:11:13.000 --> 00:11:15.919
I thought. Yep, I was dreading it. But the only
231
00:11:16.000 --> 00:11:18.559
real problem with a migrating from between password managers is
232
00:11:18.559 --> 00:11:20.440
at some point you're going to generate a CSV file
233
00:11:20.480 --> 00:11:23.240
of every single password in your life, and that will
234
00:11:23.240 --> 00:11:25.320
be upsetting. Well, the real way to do it is
235
00:11:25.399 --> 00:11:29.759
to just find the list of domains that you have
236
00:11:29.840 --> 00:11:32.440
passwords for in last past and go to each one
237
00:11:32.480 --> 00:11:34.679
of them and say, hey, I forgot my password, and
238
00:11:34.759 --> 00:11:37.440
go through the whole process of generation. Yeah. I mean,
239
00:11:38.120 --> 00:11:39.879
it's a terrible thing to do if you've got hundreds
240
00:11:39.879 --> 00:11:41.919
of them, but you know, in the reality is you
241
00:11:42.000 --> 00:11:44.000
can migrate your passwords over the other one, but you
242
00:11:44.039 --> 00:11:45.919
should probably change me after that and do yourself a
243
00:11:45.960 --> 00:11:48.919
favor delete that file when you're done. Absolutely, that file
244
00:11:48.960 --> 00:11:53.279
shouldn't exist. That files bad. What file? Yeah, and I'm
245
00:11:53.399 --> 00:11:55.799
super keen to get to pass keys. I just think
246
00:11:55.799 --> 00:11:58.000
passkey's still a half baked so.
247
00:11:58.039 --> 00:12:02.080
Yeah, they're not quite there yet. I like one global
248
00:12:02.120 --> 00:12:03.639
authenticator app would be really good.
249
00:12:03.679 --> 00:12:04.679
For me. Yeah, I don't know.
250
00:12:04.919 --> 00:12:06.960
Not nine authenticator apps, not ten?
251
00:12:07.120 --> 00:12:07.799
Good luck with that.
252
00:12:08.240 --> 00:12:09.399
Just one is all I want.
253
00:12:09.480 --> 00:12:11.600
I think there's a I's pretty sure there's an SKCD
254
00:12:12.360 --> 00:12:15.120
cartoon about this. It's like, we need a standard for everything.
255
00:12:15.200 --> 00:12:21.919
Now there's ten. Yay, Yeah, that's right. Remember scuzzy SCSI. Yeah,
256
00:12:22.159 --> 00:12:26.240
wasn't one of the SA's standing for standard. Yes, that's yeah.
257
00:12:26.279 --> 00:12:28.519
You know, how would that work out? No, there are
258
00:12:28.679 --> 00:12:30.679
no standards. Everybody fights against them.
259
00:12:30.879 --> 00:12:32.840
All right, Well that's what I got. Richard, who's talking to.
260
00:12:32.840 --> 00:12:35.000
Us today, jumped into the wayback machine because we haven't
261
00:12:35.000 --> 00:12:38.279
talked about stuff like specification driven development in a long time,
262
00:12:38.320 --> 00:12:40.519
but we have talked about it. And I grabbed a
263
00:12:40.559 --> 00:12:43.480
comment off a show nine to twenty one. Wow, this
264
00:12:43.559 --> 00:12:48.919
is when we talked about the product Cucumber working with
265
00:12:49.360 --> 00:12:52.799
behavior driven development Matt Wins show back in twenty thirteen.
266
00:12:52.919 --> 00:12:55.240
We've got a ton of comments on that show. Not surprising. Yeah,
267
00:12:55.279 --> 00:12:58.279
and gap has a Utz had this commed. He said, well,
268
00:12:58.279 --> 00:13:01.120
I had no real world experience with to driven development
269
00:13:01.159 --> 00:13:03.279
until now I've to use it on a new, relatively
270
00:13:03.320 --> 00:13:09.360
small project and we're now working on I'm really I'm
271
00:13:09.360 --> 00:13:11.759
trying to get to the place is what he's talking about,
272
00:13:11.840 --> 00:13:15.600
where you have an executical specification. And I just thought
273
00:13:15.600 --> 00:13:17.759
this comment was really relevant because we think about what
274
00:13:17.799 --> 00:13:22.360
we're doing with prompting with lllms these days, as could
275
00:13:22.360 --> 00:13:26.279
almost be an executable specification rather than having a separate document.
276
00:13:26.320 --> 00:13:28.159
It's supposed to document what the system does, but it's
277
00:13:28.279 --> 00:13:31.279
always out of sync, like what's the what do we
278
00:13:31.320 --> 00:13:34.159
make rules around all of this? But it would be
279
00:13:34.840 --> 00:13:37.279
cool to actually get on these large projects that we
280
00:13:37.320 --> 00:13:40.720
have a set of documentation that in this game were
281
00:13:40.720 --> 00:13:43.559
talking about. Cucumber generated the test to say does the
282
00:13:43.600 --> 00:13:47.919
software does what it's supposed to do? But I, you know, now,
283
00:13:47.960 --> 00:13:51.159
thinking ten years on looking at gatus as common, I'm like, wow,
284
00:13:51.440 --> 00:13:54.240
look where we are right now with the next generation
285
00:13:54.320 --> 00:13:58.600
of tools and another way of thinking about how we
286
00:13:58.639 --> 00:14:02.360
write a specification about an application and then how that
287
00:14:02.440 --> 00:14:04.559
specification turns into executable code.
288
00:14:04.600 --> 00:14:08.879
Cucumber was like all use cases, right, yeah, Like as
289
00:14:08.919 --> 00:14:11.320
a user, I want to be able to blay blah
290
00:14:11.360 --> 00:14:14.279
blah blah, and yeah, yeah, very cool.
291
00:14:14.399 --> 00:14:18.039
Yeah, it was acceptance testing, right, You're supposed to be
292
00:14:18.080 --> 00:14:19.559
able to write it in English, Like I don't know.
293
00:14:19.799 --> 00:14:21.679
I'll include a link to cucumber. Folks want to take
294
00:14:21.679 --> 00:14:23.519
a look at it. It would take a minute for
295
00:14:23.559 --> 00:14:24.919
me to go back and look at this now, just
296
00:14:24.919 --> 00:14:30.080
thinking about what lms have done to this whole space. Sure, anyway, Gattis,
297
00:14:30.080 --> 00:14:31.679
thank you so much for your comment, and a copy
298
00:14:31.679 --> 00:14:33.039
of music code By is on its way to you.
299
00:14:33.039 --> 00:14:34.399
And if you'd like a copy of music cobe I,
300
00:14:34.440 --> 00:14:36.480
write a comment on the website at dot NetRocks dot
301
00:14:36.519 --> 00:14:38.720
com or on the Facebook. We publish every show there,
302
00:14:38.720 --> 00:14:40.080
and if you comment there and I read in the show,
303
00:14:40.120 --> 00:14:41.320
I'll send you copy of music cobe.
304
00:14:41.360 --> 00:14:43.360
I was just using music to code By to prepare
305
00:14:43.399 --> 00:14:47.600
for my talks nice next week, and it's still going strong.
306
00:14:47.679 --> 00:14:52.919
Twenty two tracks, twenty five minutes long, designed for the
307
00:14:53.559 --> 00:14:56.240
Pomodoro technique, but not necessarily. You don't have to have
308
00:14:56.279 --> 00:14:56.679
a clock.
309
00:14:58.360 --> 00:14:58.559
You know.
310
00:14:58.720 --> 00:15:02.559
They're neither boring or too exciting. They're just in that
311
00:15:02.679 --> 00:15:06.679
middle space. They're just too right. Get you into a
312
00:15:06.720 --> 00:15:11.080
state of flow and keep you there, okay. Den de
313
00:15:11.240 --> 00:15:14.519
la Marski is our guest. He is a principal product
314
00:15:14.559 --> 00:15:18.159
engineer currently working at Microsoft, where he helps build developer
315
00:15:18.200 --> 00:15:21.840
tools in AI powered experiences that make engineers more productive.
316
00:15:22.519 --> 00:15:25.440
Den started his engineering journey all the way back in
317
00:15:25.440 --> 00:15:26.080
the nineties.
318
00:15:26.399 --> 00:15:29.799
Oh god, all the way back, all the way back,
319
00:15:29.919 --> 00:15:30.759
a long time ago.
320
00:15:30.799 --> 00:15:32.960
All the way back in the nineties.
321
00:15:33.799 --> 00:15:36.720
I did I tell you that I listened to your
322
00:15:36.759 --> 00:15:38.399
podcast when I was in middle school?
323
00:15:38.679 --> 00:15:39.679
Oh my god.
324
00:15:39.960 --> 00:15:45.039
Yeah, excuse me, take some geritol right now, Hang on
325
00:15:45.080 --> 00:15:45.480
a second.
326
00:15:45.559 --> 00:15:46.720
Yeah, yeah, all right.
327
00:15:46.759 --> 00:15:48.759
So in the nineties with the three eighty six box
328
00:15:48.799 --> 00:15:52.320
that was verily enough to run Doss games. He's upgraded
329
00:15:52.360 --> 00:15:56.159
since then. He has spent plenty of time writing code
330
00:15:56.159 --> 00:15:59.000
and visual basics six oh, but for more than two
331
00:15:59.000 --> 00:16:03.720
decades now he's writing see sharp and Python and there's more. Dan, welcome,
332
00:16:04.080 --> 00:16:06.960
thank you, so happy to be here. I'm such a
333
00:16:06.960 --> 00:16:08.000
fan of Dunn at Rocks.
334
00:16:08.399 --> 00:16:09.240
That's great. Wow.
335
00:16:09.279 --> 00:16:11.120
Well, after reading your bio, I'm a fan of yours
336
00:16:13.399 --> 00:16:15.480
TB six. I mean, I was there, we were there.
337
00:16:15.559 --> 00:16:16.519
I missed those days.
338
00:16:16.720 --> 00:16:19.000
I missed the days of just me like popping an ID,
339
00:16:19.960 --> 00:16:23.480
using the forum, designers, dropping some progress bars on clicking
340
00:16:23.480 --> 00:16:24.879
the buttons and things are.
341
00:16:24.799 --> 00:16:28.399
Just working well and not having to sign into an app.
342
00:16:28.600 --> 00:16:32.399
Nice and not having to sign in Ye, that was
343
00:16:32.440 --> 00:16:34.559
a product that was made fun of. You know, it
344
00:16:34.600 --> 00:16:38.240
wasn't real programming back in the day, and we were
345
00:16:38.279 --> 00:16:41.519
crying all the way to the bank as we knocked
346
00:16:41.519 --> 00:16:44.440
out the things that our customers actually needed in less time.
347
00:16:45.720 --> 00:16:48.919
I was there at BB one. Oh, I was there
348
00:16:49.279 --> 00:16:51.440
and quick Basic com pts Before.
349
00:16:51.200 --> 00:16:53.840
That, Yeah, yeah, no, I spent I did my time
350
00:16:53.879 --> 00:16:58.440
in the in MFC crashing windows repeatedly and wondering what
351
00:16:58.480 --> 00:17:02.240
I was doing wrong. VB showed out like this is better.
352
00:17:03.919 --> 00:17:06.440
What you do is you find yourself an MFCC plus
353
00:17:06.480 --> 00:17:09.039
plus programmer and then you just partner with them to
354
00:17:09.079 --> 00:17:10.480
do the hard stuff.
355
00:17:10.799 --> 00:17:11.319
Yeah.
356
00:17:11.400 --> 00:17:12.960
I gotta say, I just don't know that there was
357
00:17:13.000 --> 00:17:14.920
not that much stuff that was that hard. Like I
358
00:17:15.279 --> 00:17:17.160
love VB six, but you know, the one thing that
359
00:17:17.279 --> 00:17:19.359
just kind of annoyed me about it is when Windows
360
00:17:19.440 --> 00:17:22.519
XP came out and it had all these super nice
361
00:17:22.559 --> 00:17:25.039
styles and everything, and just VV six was constantly stuck
362
00:17:25.079 --> 00:17:26.680
in the Windows ninety five and I was like, oh,
363
00:17:26.799 --> 00:17:29.119
come on, man, Like, can I just get the nice
364
00:17:29.119 --> 00:17:31.759
progress bar, the nice button with the shadow.
365
00:17:31.640 --> 00:17:33.359
And you could if you went third party. They all
366
00:17:33.400 --> 00:17:36.359
adapted their stuff. Yeah, they had read through everything, but.
367
00:17:36.960 --> 00:17:38.960
I was broke and I had no money, I couldn't
368
00:17:38.960 --> 00:17:42.680
get that party. Well, and we didn't know that Microsoft
369
00:17:42.720 --> 00:17:45.319
was changing gears, right, like, yeah, that there wasn't going
370
00:17:45.400 --> 00:17:47.400
to be a VB seven right, Yeah.
371
00:17:47.200 --> 00:17:49.319
Those were the days days of drama.
372
00:17:49.599 --> 00:17:52.960
Yeah. So but that's talk to me about spec driven development,
373
00:17:53.039 --> 00:17:54.960
den What have you been up to here? What is
374
00:17:55.000 --> 00:17:56.039
this all? Right?
375
00:17:56.119 --> 00:17:58.920
So folks might have seen that about a month ago,
376
00:17:59.240 --> 00:18:01.680
we work with our friends at get hub to release
377
00:18:01.720 --> 00:18:04.400
this thing called spec Kit. So if you go to
378
00:18:04.519 --> 00:18:07.720
get up dot com slash, get up slash spec dash Kit.
379
00:18:08.359 --> 00:18:12.799
Spec Kit is nothing super magical. It's basically a set
380
00:18:12.839 --> 00:18:16.279
of templates, prompts, and scripts. And the whole purpose for
381
00:18:16.400 --> 00:18:19.160
that is that when we talk to folks that try
382
00:18:19.160 --> 00:18:22.400
to build software llms, like, there's a large swath of
383
00:18:22.400 --> 00:18:25.319
folks that are just very excited about the fact that, oh,
384
00:18:25.359 --> 00:18:28.119
I don't have to write boilerplate code, I don't have
385
00:18:28.200 --> 00:18:31.680
to write my tests from scratch because I can just
386
00:18:31.839 --> 00:18:34.359
you know, use quad code to do that stuff. So
387
00:18:35.519 --> 00:18:38.440
as we talk to more of these customers, especially customers
388
00:18:38.440 --> 00:18:41.039
and like bigger companies, customers that want to build something
389
00:18:41.079 --> 00:18:45.359
that is going beyond what we refer to as vibe coding. Oh,
390
00:18:45.359 --> 00:18:47.880
I'm building a podcast landing page, like, oh, yeah, you
391
00:18:47.920 --> 00:18:50.440
can vibe code that in the day. If you're building
392
00:18:50.519 --> 00:18:53.400
a i don't know, like a CRM or like a
393
00:18:53.400 --> 00:18:55.599
plugin for a CRM, all of a sudden you're in
394
00:18:55.599 --> 00:18:58.319
the world of hurt because you're getting into this state
395
00:18:58.440 --> 00:19:02.000
of now I need to go and just constantly prompt
396
00:19:02.000 --> 00:19:04.920
for changes, and then things went off the rails and
397
00:19:04.960 --> 00:19:07.480
I need to go back somehow and then redo it.
398
00:19:07.519 --> 00:19:11.319
But now I don't have any history. So for that
399
00:19:11.559 --> 00:19:14.400
we thought, okay, we have an idea for an experiment.
400
00:19:14.839 --> 00:19:20.160
What if all of this stuff can be encoded into specs?
401
00:19:21.000 --> 00:19:23.880
And this is idea as old as time, as kind
402
00:19:23.880 --> 00:19:25.960
of Richard called out like spectrum development and the idea
403
00:19:26.000 --> 00:19:29.079
of writing specs as the underlying kind of the layer
404
00:19:29.119 --> 00:19:31.480
of software is not exactly new like it existed for
405
00:19:31.559 --> 00:19:34.559
some time. This is more of a it's a new
406
00:19:34.599 --> 00:19:38.799
incarnation of it and in this context, and by the way,
407
00:19:38.880 --> 00:19:41.640
a lot of this was also driven by one of
408
00:19:41.640 --> 00:19:44.720
my colleagues, John Lamb, who was inspired.
409
00:19:44.920 --> 00:19:45.200
Yeah.
410
00:19:45.279 --> 00:19:49.359
John Lamb is great from the Iron Python days. For
411
00:19:49.359 --> 00:19:52.319
folks that don't know, Yeah.
412
00:19:51.599 --> 00:19:54.039
From a developmentor before that, I think yes.
413
00:19:54.359 --> 00:19:55.200
Yeah.
414
00:19:55.400 --> 00:19:59.799
So John was somewhat frustrated by the fact that Claude's Sonnet,
415
00:20:00.599 --> 00:20:04.240
the model from Anthropic, was very over eager.
416
00:20:04.319 --> 00:20:05.400
When you'd give it coding test.
417
00:20:05.640 --> 00:20:08.119
You'd be like, oh, can you like I'm building this
418
00:20:08.559 --> 00:20:10.480
new components, like oh, let me write this component, let
419
00:20:10.519 --> 00:20:12.200
me write all to the framework for this component and
420
00:20:12.279 --> 00:20:12.960
everything around it.
421
00:20:13.119 --> 00:20:13.319
Yeah.
422
00:20:13.880 --> 00:20:16.839
So the idea was like, well, can we put guardrails
423
00:20:16.839 --> 00:20:18.440
around it? So make sure that, like if I ask
424
00:20:18.519 --> 00:20:21.599
you to do this, you do just that. So this
425
00:20:22.039 --> 00:20:25.920
is what essentially bootstrapped spec Kit. This was the foundational pieces.
426
00:20:25.920 --> 00:20:27.799
It's like, how do we make the model a little
427
00:20:27.839 --> 00:20:31.480
bit more contained if you will to do the things
428
00:20:31.480 --> 00:20:34.160
that we want. And as we started kind of exploring this.
429
00:20:34.079 --> 00:20:36.759
Couldn't you write a system prompt for Claude just to say, hey,
430
00:20:36.799 --> 00:20:38.799
state your lane and don't do anything I don't tell
431
00:20:38.799 --> 00:20:39.160
you to do.
432
00:20:39.599 --> 00:20:42.240
You could, but then you're just always in this like
433
00:20:42.319 --> 00:20:45.640
cat and mouse game, right, and you're writing system prompts.
434
00:20:46.200 --> 00:20:47.839
So and by the way, it's also like if you
435
00:20:47.880 --> 00:20:49.440
switch models all of a sudden.
436
00:20:49.160 --> 00:20:52.160
Like what what then? Like do I write a system prompt? So?
437
00:20:52.400 --> 00:20:52.680
Okay?
438
00:20:53.279 --> 00:20:54.920
Yeah, And also we live in a world where developer
439
00:20:54.960 --> 00:20:57.160
switch models, like every week there is I'm sure there's
440
00:20:57.160 --> 00:20:58.839
a model came out. Well, we're recording this that we
441
00:20:58.880 --> 00:21:02.759
did not know about this, this is somehow better or different
442
00:21:02.799 --> 00:21:06.960
models for different applications exactly. So Speckett was born out
443
00:21:07.000 --> 00:21:09.960
of that entire need, and as we started kind of
444
00:21:09.960 --> 00:21:14.720
evolving it, things pop top from customer conversations like, oh, well,
445
00:21:15.359 --> 00:21:18.000
if I starting coding requirements, how do I make sure
446
00:21:18.039 --> 00:21:22.720
that my technical requirements are correctly updated if I decided
447
00:21:22.759 --> 00:21:26.119
to change my tech stack. And that actually is one
448
00:21:26.160 --> 00:21:28.799
of the core value props of Speckett and the spectrum
449
00:21:28.839 --> 00:21:32.839
development here is that we're detaching the spect the requirements
450
00:21:32.839 --> 00:21:36.119
from code and from the tech stack, so that if
451
00:21:36.160 --> 00:21:38.640
you're a developer and previously you're like, Okay, I want
452
00:21:38.640 --> 00:21:40.880
to build a web app for my enterprise that does
453
00:21:41.759 --> 00:21:45.839
something like accounting, and I'm not entirely sure which framework
454
00:21:45.920 --> 00:21:48.599
is the most performed, is it next JS? Should I
455
00:21:48.680 --> 00:21:51.279
use Astro? Should I be framework less entirely? Should I
456
00:21:51.279 --> 00:21:56.200
write this in just tailwin CSS for UI, shad CN.
457
00:21:56.559 --> 00:21:59.359
And like, what would you have to do?
458
00:21:59.519 --> 00:22:02.200
You'd have to go and write this in whatever stack
459
00:22:02.319 --> 00:22:04.680
and then maybe do some benchmarks and figure out like
460
00:22:04.720 --> 00:22:09.119
what's the performance. Now, because you have a spec you
461
00:22:09.160 --> 00:22:11.240
can just go and ask it to write you like
462
00:22:11.359 --> 00:22:15.279
three versions out of the same requirements. So you basically
463
00:22:15.319 --> 00:22:18.720
you start speed running the iteration process and saying, oh,
464
00:22:18.799 --> 00:22:22.200
create me like three options that I can choose from.
465
00:22:22.359 --> 00:22:24.559
And that's kind of nice because now you have the requirements,
466
00:22:24.839 --> 00:22:28.200
they're separate from your technical requirements, and the LM can
467
00:22:28.279 --> 00:22:30.000
just build it for you and then you can assess it.
468
00:22:30.319 --> 00:22:30.599
Cool.
469
00:22:31.160 --> 00:22:35.000
So Cucumber plus AI, you could probably think.
470
00:22:34.920 --> 00:22:38.640
It's basically simplify yes, instead of as a user I
471
00:22:38.720 --> 00:22:41.599
can is like as a large language model, I can.
472
00:22:44.039 --> 00:22:44.359
Wow.
473
00:22:44.440 --> 00:22:46.880
But I think you're also skipping over some hard bits here,
474
00:22:46.880 --> 00:22:49.920
which is you really have to granulize the specification. Yes,
475
00:22:50.200 --> 00:22:52.119
you want to take small enough bites at the LM
476
00:22:52.119 --> 00:22:53.519
has a shot at building this thing.
477
00:22:53.359 --> 00:22:56.000
Success absolutely, And I think one of the biggest problems
478
00:22:56.000 --> 00:22:58.119
that we see with people trying to approach spectro of
479
00:22:58.160 --> 00:23:01.079
development is actually, like, first of all, the problem is
480
00:23:01.160 --> 00:23:05.640
under specification because if you are not yet comfortable writing
481
00:23:05.640 --> 00:23:07.720
specs or understanding.
482
00:23:07.319 --> 00:23:09.599
What you're building and why, you're.
483
00:23:09.440 --> 00:23:12.440
Gonna fall into the pit of under specification and what
484
00:23:12.519 --> 00:23:16.359
happens when you underspecify things. The AI starts guessing and
485
00:23:16.400 --> 00:23:18.920
it's like, oh, sure, like you did not tell me
486
00:23:19.039 --> 00:23:21.160
that you do not want the header to be green.
487
00:23:21.839 --> 00:23:24.559
I'll make it like whatever color I choose, right, And
488
00:23:24.599 --> 00:23:26.920
I think this is like it's a it's a mental shift, right.
489
00:23:27.119 --> 00:23:31.000
You previously have to get into the mode of like, oh,
490
00:23:31.039 --> 00:23:33.119
I'll just go and start writing things and see how
491
00:23:33.160 --> 00:23:34.720
it happens. Now you're like, no, no, no, I need to
492
00:23:34.720 --> 00:23:39.400
spend upfront time thinking about this, outlining this. And by
493
00:23:39.440 --> 00:23:41.920
the way, we also support this capability. We added this
494
00:23:42.880 --> 00:23:46.000
prompt inside spec kid that is called clarified and that
495
00:23:46.119 --> 00:23:50.240
is essentially you're using the language model to question your
496
00:23:50.279 --> 00:23:52.680
spec right, So if you're not if you have writer's block,
497
00:23:52.759 --> 00:23:55.839
you're you're not inspired, Uh, you can just ask the
498
00:23:55.920 --> 00:23:57.640
LM to say can you can you ask me quite,
499
00:23:57.680 --> 00:23:59.599
are there any blind spots that I might have? Are
500
00:23:59.640 --> 00:24:02.599
there the things that I don't know?
501
00:24:02.960 --> 00:24:03.960
I don't know? Right?
502
00:24:04.160 --> 00:24:07.119
Right, just keep keep prodding at this and so and
503
00:24:07.119 --> 00:24:11.400
absolutely you're right Richard, like there is a degreeable. So great, Well,
504
00:24:11.240 --> 00:24:13.960
we're going to have this massive specification. It's going to
505
00:24:14.000 --> 00:24:17.480
be massive, like it's going to be massive context windows
506
00:24:17.480 --> 00:24:20.079
for folks that know, like any large language model has
507
00:24:20.119 --> 00:24:24.559
basically a limited set of tokens again process at any
508
00:24:24.599 --> 00:24:26.839
given time before it starts losing track of what you
509
00:24:26.920 --> 00:24:29.640
asked it to do. So the context windows are relatively limited.
510
00:24:29.680 --> 00:24:32.519
So if you start with a giant, massive spec you
511
00:24:32.519 --> 00:24:34.079
can call it a context window. I'm going to call
512
00:24:34.119 --> 00:24:37.480
it a buffer overflush. Sure that's really what's happening. Absolutely, yes,
513
00:24:37.599 --> 00:24:39.039
that that's a very good way of putting it. Like
514
00:24:39.079 --> 00:24:40.279
you're going to get into the world of the buffer
515
00:24:40.319 --> 00:24:43.440
overflow where a lot of your instructions and guardrails are
516
00:24:43.480 --> 00:24:44.920
just going to be tossed out the windows. Like it's
517
00:24:44.920 --> 00:24:45.599
not going to be a plot.
518
00:24:45.640 --> 00:24:48.599
Yeah I heard Sun at four point five has more space.
519
00:24:48.880 --> 00:24:52.680
Yes, yes, modern models have like generally are improving in
520
00:24:52.720 --> 00:24:55.279
terms of like the the buffer overflail problem.
521
00:24:55.400 --> 00:24:56.400
Yeah.
522
00:24:56.519 --> 00:24:59.680
So what we also do here is not only do
523
00:24:59.720 --> 00:25:01.920
we ask you to create the specification, but we'll also
524
00:25:02.000 --> 00:25:04.960
break this down into chunks. So once SUSPEC is ready,
525
00:25:05.119 --> 00:25:09.079
once the technical plan is outlined, we have the capability
526
00:25:09.079 --> 00:25:13.039
to basically split this into consumable tasks. And then this
527
00:25:13.079 --> 00:25:15.160
is where I showed in my videos. I showed in
528
00:25:15.160 --> 00:25:17.960
a blog where it's like you can use slash tasks
529
00:25:17.960 --> 00:25:20.519
to then create a list of tasks that are based
530
00:25:20.519 --> 00:25:23.640
on the spec based on the technical plan, and the
531
00:25:23.759 --> 00:25:25.559
LM can do them in chunks. It's like, Okay, first
532
00:25:25.599 --> 00:25:27.759
of all, you need to bootstrap this project next to yes, okay,
533
00:25:27.839 --> 00:25:29.680
let me go do that. Now you need to create
534
00:25:29.680 --> 00:25:31.839
the CSS, Okay, let me go do that. So you're
535
00:25:31.880 --> 00:25:37.319
going through these controlled stages of creating things and get
536
00:25:37.720 --> 00:25:40.200
to an end result. Now, some of these tasks also
537
00:25:40.240 --> 00:25:42.000
going to be parallelized, and this is something that we
538
00:25:42.039 --> 00:25:46.039
see with coding agents like claud code that support sub agents,
539
00:25:46.119 --> 00:25:48.680
where the agent itself can spin up sub agents with
540
00:25:48.720 --> 00:25:51.839
their own context windows, and you can say, oh, this
541
00:25:51.880 --> 00:25:53.680
agent's going to be writing tests for this component, this
542
00:25:53.720 --> 00:25:55.680
agent's going to be running tests for this other component.
543
00:25:55.720 --> 00:25:58.279
And then you get into this world of kind of
544
00:25:58.559 --> 00:26:01.640
things are happening in parallel but also manageable chunks.
545
00:26:01.799 --> 00:26:04.519
Yeah no, and you sort of see your role as
546
00:26:04.519 --> 00:26:08.319
a shepherd there to push down the specifications in enough
547
00:26:08.400 --> 00:26:12.400
detail that the tools have a chance segregating into portions
548
00:26:12.440 --> 00:26:15.920
with headers that describe this is the context you're going
549
00:26:15.960 --> 00:26:18.480
to be living in. But it's shorter than the overall context.
550
00:26:18.480 --> 00:26:21.319
Now I need you to do this party, and I
551
00:26:21.880 --> 00:26:25.079
everywhere I see this being this approach be successful with
552
00:26:25.720 --> 00:26:29.920
unbelievable levels of testing too, right, I'm always a stun
553
00:26:30.000 --> 00:26:32.519
to llms. Often when given an instruction for a set
554
00:26:32.519 --> 00:26:35.240
of code to generate, get about halfway through and just
555
00:26:35.359 --> 00:26:38.480
kind of stop. It's like, you can finish this. It's
556
00:26:38.480 --> 00:26:40.799
your buffer overflow. I think it's a buffer overflow. And
557
00:26:40.839 --> 00:26:43.839
so so that test approach where I want you to
558
00:26:43.839 --> 00:26:45.720
generate the set of tests and then I want you
559
00:26:45.839 --> 00:26:48.759
to pass all the tests before you stop. It's kind
560
00:26:48.759 --> 00:26:51.880
of a way to again compress that context further right
561
00:26:51.920 --> 00:26:54.799
into these test loops to try and actually get complete
562
00:26:54.839 --> 00:26:57.759
sets of code from it, like the tools take the wrestling.
563
00:26:57.799 --> 00:27:01.200
When that happens. When that happens, though, it's it's really
564
00:27:01.279 --> 00:27:05.079
unnerving because it's in a state where you can't really
565
00:27:05.119 --> 00:27:07.119
debug it because not all the code is there that
566
00:27:07.160 --> 00:27:11.319
it was, yes, you know, spitting out and you ultimately
567
00:27:11.400 --> 00:27:14.559
have to roll stuff back and try again. And I
568
00:27:15.160 --> 00:27:18.279
hate that about code generation in general, is that you know,
569
00:27:18.359 --> 00:27:20.920
now this is intelligent code generation. By the way, John
570
00:27:20.960 --> 00:27:23.799
Lamb's been into code generation since like ninety one.
571
00:27:23.880 --> 00:27:24.799
Before it was cool.
572
00:27:25.039 --> 00:27:28.960
Yeah, but you know the problem of course is that
573
00:27:29.400 --> 00:27:33.559
if it creates something that you don't understand and can't
574
00:27:33.759 --> 00:27:38.720
explain in a meeting, for example, you're you're done for
575
00:27:39.200 --> 00:27:40.200
in my opinion.
576
00:27:39.920 --> 00:27:41.599
Oh absolutely absolutely.
577
00:27:41.799 --> 00:27:43.680
And I think this is an interesting tangent here to
578
00:27:43.880 --> 00:27:49.400
the role of expertise, Like I've heard somebody talk about
579
00:27:49.519 --> 00:27:52.039
kind of the role of the developer moving forward. If
580
00:27:52.559 --> 00:27:56.559
if LM has become really good at cogeneration and producing
581
00:27:56.720 --> 00:28:00.160
just just boatloads of code, what is your role as
582
00:28:00.160 --> 00:28:03.799
a developer on IT team? And I think there's a
583
00:28:03.960 --> 00:28:05.920
hypoth this is that that role is going to shift
584
00:28:05.960 --> 00:28:08.920
more to almost like a Richards. You go out like
585
00:28:08.960 --> 00:28:12.000
the Shepherd reviewer, right, it was like okay, but like
586
00:28:12.880 --> 00:28:15.119
even for you to be able to review things, you
587
00:28:15.240 --> 00:28:19.039
have to have expertise to know what you're looking at, right,
588
00:28:19.119 --> 00:28:21.039
because I've seen this happen. But like Carl, you're talking
589
00:28:21.079 --> 00:28:23.200
about like test or and development, Like to me, this
590
00:28:23.240 --> 00:28:25.319
aspect of like, okay, well, there's a bunch of tests,
591
00:28:25.960 --> 00:28:27.559
and I looked at some of the tests that some
592
00:28:27.599 --> 00:28:30.000
of the models generate, and sometimes like for me to
593
00:28:30.079 --> 00:28:31.440
test for the test to pass.
594
00:28:31.519 --> 00:28:34.319
Oh, let me make a change and just return true. Yeah, right,
595
00:28:34.359 --> 00:28:36.240
and test is passing now, Hey solved it.
596
00:28:36.240 --> 00:28:36.599
Look at it.
597
00:28:36.599 --> 00:28:37.160
It's all green.
598
00:28:37.200 --> 00:28:37.359
Now.
599
00:28:37.519 --> 00:28:41.000
Nice, But you need to have the expertise to actually
600
00:28:41.039 --> 00:28:43.319
look at it and be like, yeah, this ain't it?
601
00:28:43.480 --> 00:28:44.680
No, like I need like I.
602
00:28:44.680 --> 00:28:46.559
Kind of I kind of think of a roll moving
603
00:28:46.599 --> 00:28:50.039
forward as sort of like a general contractor building a house. Right,
604
00:28:50.160 --> 00:28:52.920
the general contractors in charge of all the subcontractors that
605
00:28:53.000 --> 00:28:56.279
have their sub specialties. But any general contractor worth their
606
00:28:56.319 --> 00:28:59.680
weight knows enough about those things to be able to
607
00:28:59.720 --> 00:29:02.759
take over if the electrician is out sick, or to uh,
608
00:29:03.160 --> 00:29:06.960
you know, remove the termite damage from these boards, if
609
00:29:07.359 --> 00:29:10.359
the carpenter doesn't you know, isn't there that day? That
610
00:29:10.440 --> 00:29:13.119
kind of stuff. So so you need to be able
611
00:29:13.160 --> 00:29:15.839
to understand everything that your subs are doing and be
612
00:29:15.920 --> 00:29:18.480
able to jump in when you can, but not necessarily
613
00:29:18.480 --> 00:29:19.960
build the house by yourself.
614
00:29:19.640 --> 00:29:23.400
Right, right, And we see this especially critical with things
615
00:29:23.480 --> 00:29:27.440
like security and awe, oh my goodness, Like I see
616
00:29:27.519 --> 00:29:30.559
so much stuff that is just tossing to get our
617
00:29:30.559 --> 00:29:33.480
bripo that clearly has been just like the AI told
618
00:29:33.519 --> 00:29:36.119
me that this is secure, Like oh no, you're returning
619
00:29:36.119 --> 00:29:38.240
to the two FA code and the adjacent response is
620
00:29:38.279 --> 00:29:41.400
you're expecting it like that's that's that's not going to
621
00:29:41.440 --> 00:29:43.720
be good. So yeah, so the these changes right, like
622
00:29:43.880 --> 00:29:45.880
there's a good degree of that expertise that needs to
623
00:29:45.920 --> 00:29:49.079
be embedded into the process and see that the the
624
00:29:49.200 --> 00:29:52.680
what the LM is generating, whether it's tests, the components,
625
00:29:52.759 --> 00:29:57.799
the structure is actually right and scope through the project
626
00:29:57.799 --> 00:30:01.599
you're building them because LM's go thrills all the time,
627
00:30:01.720 --> 00:30:04.240
right all the time, and they do wild things that
628
00:30:04.319 --> 00:30:07.039
if you don't know, like on a surface, it might
629
00:30:07.079 --> 00:30:09.880
seem like, oh it works. I was recently like rebuilding
630
00:30:09.920 --> 00:30:11.880
some of the stuff would alsope with the help of
631
00:30:11.920 --> 00:30:14.279
spec get on my blog and it's like, oh, I
632
00:30:14.319 --> 00:30:16.759
couldn't understand where your CSS is. I'm just going to
633
00:30:16.839 --> 00:30:19.119
recreate a bunch of CSS files and so I'd have
634
00:30:19.200 --> 00:30:22.200
like a bunch of duplication all of a sudden. Yeah
635
00:30:22.279 --> 00:30:25.359
it works though, but if I didn't know, if I'm
636
00:30:25.359 --> 00:30:27.839
somebody that has to maintain, they'll be like, wait, why
637
00:30:28.240 --> 00:30:32.200
just recreate these two folders for this exact same content.
638
00:30:32.240 --> 00:30:34.599
We're coming up with more and more of these examples
639
00:30:34.640 --> 00:30:39.640
where having the expertise would prevent working code. That's dumb.
640
00:30:39.799 --> 00:30:42.799
Yeah, yeah, yeah. The concept is what's worked, what's actually
641
00:30:42.839 --> 00:30:45.559
working right, and the software clearly has a different perception
642
00:30:45.640 --> 00:30:49.759
of working than you. Yeah right, get good enough guidelines. Hey,
643
00:30:49.759 --> 00:30:53.000
we got to take a break for these very important messages.
644
00:30:55.119 --> 00:30:57.359
Do you have a complex dot net monolith you'd like
645
00:30:57.400 --> 00:31:01.359
to refactor to a micro services architecture? The micro Service
646
00:31:01.480 --> 00:31:05.200
Extractor for dot Net tool visualizes your app and helps
647
00:31:05.240 --> 00:31:09.599
progressively extract code into micro services. Learn more at aws
648
00:31:09.720 --> 00:31:13.319
dot Amazon dot com, slash modernize.
649
00:31:16.680 --> 00:31:18.799
And we're back. It's don A. Rock's Emirateard Campbell. Let's
650
00:31:18.799 --> 00:31:22.559
Carl Franklin. You talking to our friend dem about the
651
00:31:22.680 --> 00:31:26.839
spec kit and this idea of I think essentially formalizing
652
00:31:26.960 --> 00:31:31.359
some practices around harnessing LMS for co generation. You're talking
653
00:31:31.400 --> 00:31:36.920
about uml right, yeah, yeah, that's what I want in
654
00:31:36.920 --> 00:31:37.359
my life.
655
00:31:37.400 --> 00:31:39.200
You're still way back in the nineties.
656
00:31:39.720 --> 00:31:47.240
Yeah, well, you know, it's linguist. It'd be interesting to
657
00:31:47.240 --> 00:31:49.759
get to a point where it was rendering, taking images
658
00:31:49.799 --> 00:31:53.640
and breaking them down into specifications as well. But I
659
00:31:53.640 --> 00:31:55.799
I do you know, now we've got the I'm starting
660
00:31:55.799 --> 00:31:58.480
to see the term work slop, just like AI slop,
661
00:31:58.559 --> 00:32:03.440
but it's hey, you you responded to a mediocre corporate
662
00:32:03.480 --> 00:32:07.160
email with even with generated results of even more mediocre.
663
00:32:07.440 --> 00:32:10.319
And the evil part about this is it takes time
664
00:32:10.400 --> 00:32:13.319
to read that and realize it's garbage, and so you're
665
00:32:13.319 --> 00:32:16.599
literally propagating garbage downward and making everything slower. Like there's
666
00:32:16.599 --> 00:32:22.160
a real risk here about not creating quality, but there
667
00:32:22.200 --> 00:32:24.359
is a way to create quality, like I have seen
668
00:32:24.400 --> 00:32:27.680
these things be successful. So part of this is really
669
00:32:27.880 --> 00:32:30.240
building you know, we talked about what's our job as
670
00:32:30.279 --> 00:32:33.240
the human in the loop here, it's actually having an
671
00:32:33.279 --> 00:32:36.480
eye to quality results that just setting it to true
672
00:32:36.519 --> 00:32:40.640
is non as acceptable that these tests are comprehensive. You know,
673
00:32:40.759 --> 00:32:43.119
you've got it, and but I also think you're going
674
00:32:43.200 --> 00:32:45.680
to be used the tool a lot for this. I
675
00:32:45.880 --> 00:32:49.279
like the idea of co generated from Claude being evaluated,
676
00:32:50.200 --> 00:32:53.640
you know, by open AI and how does it what
677
00:32:53.759 --> 00:32:56.200
its assessment looks like, and going passing back and forth
678
00:32:56.240 --> 00:33:00.160
between them so that you do have other assessments of
679
00:33:00.200 --> 00:33:01.160
everything being made.
680
00:33:01.400 --> 00:33:04.799
Have you guys ever hired somebody who talked to good
681
00:33:04.839 --> 00:33:07.200
talk and then when they sent their code in you
682
00:33:07.200 --> 00:33:08.839
could tell they had no idea what they were doing
683
00:33:08.880 --> 00:33:12.440
and you're just frustrated. You could lose your mind like that,
684
00:33:12.599 --> 00:33:17.240
Like if you're constantly retelling an LLM, No don't you
685
00:33:17.480 --> 00:33:21.559
don't downgrade to dot eight? Was dot nine? Did I
686
00:33:21.599 --> 00:33:22.920
tell you the down grade?
687
00:33:23.000 --> 00:33:23.079
No?
688
00:33:23.200 --> 00:33:25.039
I did not, So why are you doing? You could
689
00:33:25.079 --> 00:33:28.400
actually lose your mind if you know, after a while,
690
00:33:28.400 --> 00:33:31.599
if that's your job and no wonder people want to
691
00:33:31.599 --> 00:33:34.319
write code because at least they're in control of it
692
00:33:34.400 --> 00:33:36.000
and they got no one to blame but themselves.
693
00:33:37.359 --> 00:33:40.319
Yeah, so for that, by the way, like you call
694
00:33:40.359 --> 00:33:42.240
out of a very important point, which is, how do
695
00:33:42.279 --> 00:33:44.119
you set up these kind of requirements that the LM
696
00:33:44.119 --> 00:33:45.759
does not go off the rails in terms of your
697
00:33:45.759 --> 00:33:49.559
technical requirements and would spec it introduced this concept of
698
00:33:50.200 --> 00:33:54.079
the constitution. It sounds very fancy or like the you know,
699
00:33:54.160 --> 00:33:56.279
call it the charter if you will, or the Karda
700
00:33:56.359 --> 00:34:00.799
if you're British. You know, basically outline, it's the fundamental
701
00:34:00.799 --> 00:34:05.359
guys exactly, like the non negotiable things that will absolutely
702
00:34:05.319 --> 00:34:07.039
apply to your project. And this is where we've seen
703
00:34:07.079 --> 00:34:09.639
a lot of successful people coming in and saying I
704
00:34:09.719 --> 00:34:12.079
will write my constitution and say you always use.
705
00:34:11.960 --> 00:34:12.719
Dot net nine.
706
00:34:13.239 --> 00:34:16.079
You never downgrade anything else like, And the Constitution is
707
00:34:16.119 --> 00:34:18.679
grounded in every part of the spec process so that
708
00:34:18.760 --> 00:34:21.360
when it goes through like the technical plan and task breakdown,
709
00:34:21.400 --> 00:34:23.480
it always has to go and check like, what does
710
00:34:23.480 --> 00:34:24.559
the Constitution say about us?
711
00:34:24.559 --> 00:34:24.719
Oh?
712
00:34:24.760 --> 00:34:27.320
Dot net nine? Oops, I put dot net eight. Okay,
713
00:34:27.400 --> 00:34:29.719
can't do that. That's a constitutional violation. I'm gonna go
714
00:34:29.719 --> 00:34:30.519
ahead and redo this.
715
00:34:30.639 --> 00:34:35.639
Get up copilot agent. I think the engine was or
716
00:34:35.719 --> 00:34:38.559
still is in written in dot net eight, and so
717
00:34:38.599 --> 00:34:41.719
it didn't have a dot net nine compiling environment, and
718
00:34:41.800 --> 00:34:45.840
so it would always go downgrade and think it was
719
00:34:45.880 --> 00:34:46.599
doing you a favor.
720
00:34:46.880 --> 00:34:49.599
Right, So theory that's a long training thatta has a
721
00:34:49.639 --> 00:34:52.400
lot of impact on this. That's the long term support version, right,
722
00:34:52.480 --> 00:34:57.559
So there's a case but still but still, but you know,
723
00:34:57.840 --> 00:34:59.920
the only have this great race of context, which is
724
00:35:00.199 --> 00:35:04.920
you know you're describing the Constitution is a prefix prompt, right,
725
00:35:05.039 --> 00:35:07.480
It's like before you do anything, these are the rules.
726
00:35:07.480 --> 00:35:09.960
So a bunch of our context is now consumed by
727
00:35:10.000 --> 00:35:12.599
the prefix yes and no. Then we have the sort
728
00:35:12.639 --> 00:35:15.559
of state of being of the project, and then the
729
00:35:15.800 --> 00:35:18.960
request for what to create I'll say, we do it
730
00:35:19.000 --> 00:35:22.639
a little bit even trickier than that. So the Constitution
731
00:35:22.760 --> 00:35:25.440
is embedded in other prompts where you can essentially say,
732
00:35:25.880 --> 00:35:28.880
if you're building a technical plan, consult the Constitution, and
733
00:35:28.920 --> 00:35:33.039
within the technical plan, create a checklist of constitutional checks
734
00:35:33.079 --> 00:35:34.880
you have to go through before you move forward.
735
00:35:35.280 --> 00:35:37.599
So instead of us embedding the Constitution, the Constitution itself
736
00:35:37.599 --> 00:35:41.239
can say like, oh, okay, this has to be a Net
737
00:35:41.320 --> 00:35:44.360
nine application, this has to be using this library to
738
00:35:44.360 --> 00:35:48.239
connect to Microsoft SQL server. And then when you get
739
00:35:48.239 --> 00:35:51.320
to the implementation stage, before you do an implementation, we
740
00:35:51.360 --> 00:35:54.079
also do a checklist of essentially saying can you cross
741
00:35:54.199 --> 00:35:58.000
check once more the Constitution against the plan, against the task,
742
00:35:58.039 --> 00:36:01.079
against the spec and see if there's any violations. So
743
00:36:01.119 --> 00:36:03.840
you're essentially creating almost unit tests for.
744
00:36:03.840 --> 00:36:05.440
English like that.
745
00:36:05.440 --> 00:36:07.639
That's kind of the framing seris Okay, let me, let
746
00:36:07.679 --> 00:36:09.280
me go and just cross check to make sure that
747
00:36:09.400 --> 00:36:13.039
nothing went off the rails, because too often people fall
748
00:36:13.079 --> 00:36:15.840
into this kind of habit of oh, I've done the spec,
749
00:36:15.880 --> 00:36:18.199
I've done the planet done and task great, go build
750
00:36:18.199 --> 00:36:21.519
this now. But that's like hold on, you still need
751
00:36:21.559 --> 00:36:24.599
to check that what it created actually matches the expectation requirements.
752
00:36:24.599 --> 00:36:26.280
So there's a bit of a process, right, And I
753
00:36:26.320 --> 00:36:27.760
think this is where I was talking about, Like this
754
00:36:27.840 --> 00:36:30.800
is the mental shift that you now have to think
755
00:36:30.840 --> 00:36:33.639
about those things that you did not before, because before
756
00:36:33.639 --> 00:36:35.480
you would just start writing code and be like, oh sure, yeah,
757
00:36:35.559 --> 00:36:37.360
let me bootstrap a dot A nine project and visual
758
00:36:37.400 --> 00:36:40.519
studio at my NuGet packages and be on my merryway.
759
00:36:41.079 --> 00:36:43.559
Here it's like now I need to basically like spell
760
00:36:43.599 --> 00:36:46.199
it out for it. For like, you have an over
761
00:36:46.280 --> 00:36:49.440
eager intern that is very very happy to help you
762
00:36:49.960 --> 00:36:51.639
but has no knowledge of what you're trying to do
763
00:36:51.679 --> 00:36:53.159
and just go like if you don't tell me, I'll
764
00:36:53.199 --> 00:36:55.719
just guess. And this is where you're trying to kind
765
00:36:55.719 --> 00:36:58.119
of like put guardrails and say like can I guide
766
00:36:58.159 --> 00:37:00.199
you to the right thing, to the exactly what I want?
767
00:37:00.280 --> 00:37:03.880
Reminds me of Scooter from Mondays. Mister Miller, shop it
768
00:37:03.960 --> 00:37:08.800
on your pencils, I'll shove you beginning. I didn't find
769
00:37:08.840 --> 00:37:11.079
him with pencils up with cranons in shopping to miss
770
00:37:11.119 --> 00:37:11.480
the Miller.
771
00:37:11.599 --> 00:37:18.079
It's exactly that. It's exactly that. Uh, Now, I gotta
772
00:37:18.119 --> 00:37:20.320
think there's some people listening. Is this even worth it? Then?
773
00:37:20.519 --> 00:37:23.039
Like all of this work to try and get this
774
00:37:23.119 --> 00:37:25.079
code generation to behave properly.
775
00:37:25.679 --> 00:37:28.000
I think it depends. I think I'll say like it
776
00:37:28.039 --> 00:37:30.800
depends right, like it's it's a I I. I'd like
777
00:37:30.880 --> 00:37:32.519
to think the analogy like if you know, if you
778
00:37:32.519 --> 00:37:34.639
have a hammer, everything looks like a nail. So it's
779
00:37:34.679 --> 00:37:35.800
like I don't want to say like you have to
780
00:37:35.880 --> 00:37:40.760
use this for everything, but there's certainly value in getting
781
00:37:40.880 --> 00:37:45.400
from zero to a new feature, to a new component,
782
00:37:45.679 --> 00:37:50.440
to a new entirely new product with this. Even if
783
00:37:50.559 --> 00:37:54.239
you use this essentially scaffold this, just just get the
784
00:37:54.280 --> 00:37:59.960
bulk of the things, get the four pieces of vail,
785
00:38:00.840 --> 00:38:03.119
and then you with your expertise can come in. It's
786
00:38:03.159 --> 00:38:05.000
like you want to go and rewrite this component, go
787
00:38:05.039 --> 00:38:06.440
ahead and do this, you want to add like a
788
00:38:06.480 --> 00:38:08.239
moon and go ahead to do this. But it saves
789
00:38:08.239 --> 00:38:12.519
like a lot of this tediousness. So also a lot
790
00:38:12.519 --> 00:38:15.000
of these models are getting better, Like Sonnet four to
791
00:38:15.039 --> 00:38:17.559
five got released last week, Like GPT five got released
792
00:38:17.599 --> 00:38:20.760
like it was like last month, and like GPT five
793
00:38:20.800 --> 00:38:24.360
compared to GPT four was like night and day when
794
00:38:24.360 --> 00:38:28.519
it comes to coding, right, which like who saw that coming?
795
00:38:28.800 --> 00:38:30.320
Right? But like they're getting better and better.
796
00:38:30.360 --> 00:38:32.840
And I totally see a world where a lot of
797
00:38:32.840 --> 00:38:36.599
these guardrails were just kind of become leaner and it's
798
00:38:36.639 --> 00:38:38.400
not going to be as heavyweight because.
799
00:38:38.199 --> 00:38:39.960
You're not going to bang into them as often.
800
00:38:39.960 --> 00:38:42.480
And yeah, exactly because a lot of the constraints that
801
00:38:42.480 --> 00:38:45.400
we talked about like they wear. The reason they're there
802
00:38:45.480 --> 00:38:48.480
is that they were inspired by Sonnet four being over eager.
803
00:38:48.639 --> 00:38:51.039
Right, Yeah, I know every law is written in blood, right,
804
00:38:51.119 --> 00:38:53.280
like right right, what we're seeing.
805
00:38:53.639 --> 00:38:56.440
But as they become better, a lot of these constraints
806
00:38:56.440 --> 00:38:58.119
will become more lax because like you can just tell
807
00:38:58.159 --> 00:39:00.280
it like it's always dotten at nine is like cool,
808
00:39:00.320 --> 00:39:02.519
I remember it's always done at nine, I'm never touching
809
00:39:02.559 --> 00:39:03.039
anything else.
810
00:39:03.119 --> 00:39:05.760
Yeah, it's just you don't bang against it as much. Yeah,
811
00:39:05.880 --> 00:39:10.119
I just think there's an interesting balancing act for you know,
812
00:39:10.159 --> 00:39:12.519
what really you're saying them is there's a case for waiting.
813
00:39:12.679 --> 00:39:14.559
There's a case for waiting and experimenting.
814
00:39:14.639 --> 00:39:16.440
If I wait, the tools will get better.
815
00:39:16.280 --> 00:39:18.480
And experimenting and seeing what works in a wood doesn't
816
00:39:18.480 --> 00:39:21.320
then because Spekeett itself is an experiment, right, like we are.
817
00:39:21.840 --> 00:39:25.119
We got into the world with the intent of can
818
00:39:25.199 --> 00:39:28.480
you help us verify where this works and where it doesn't. Yeah,
819
00:39:28.519 --> 00:39:31.280
and like we're not making any statements of saying like, oh, yeah,
820
00:39:31.320 --> 00:39:34.320
this is going to absolutely destroy the software engineering career
821
00:39:34.360 --> 00:39:35.760
track is the yeah I got to write the code
822
00:39:35.760 --> 00:39:38.440
for It's like, no, like I want you to test
823
00:39:38.480 --> 00:39:41.719
this and tell me. Yeah, I've tried adding a feature
824
00:39:41.760 --> 00:39:44.360
to my enterprise app and it just completely went off
825
00:39:44.360 --> 00:39:45.920
the rails and it was completely useless.
826
00:39:46.039 --> 00:39:47.559
Like that to me is like super helpful. You back,
827
00:39:47.599 --> 00:39:49.760
I'd love to know that. No. And I saw this
828
00:39:49.840 --> 00:39:54.719
in the early GitHub copilot days where people's behavior changed
829
00:39:54.800 --> 00:39:59.760
in the repository, where there was far more reverts yep. Yeah,
830
00:40:00.119 --> 00:40:01.760
like they would use the tool to generate some core,
831
00:40:01.920 --> 00:40:05.119
they push it up, it would blow up, they would revert. Yeah,
832
00:40:05.360 --> 00:40:07.320
And so you know, we I could definitely tell you
833
00:40:07.320 --> 00:40:09.360
were using the tool because you were using the toolimate
834
00:40:09.400 --> 00:40:11.639
the code and then you weren't really editing much, or
835
00:40:11.760 --> 00:40:13.159
you weren't doing a whole lot. You were just trying.
836
00:40:13.199 --> 00:40:15.679
You were stuffing into the test suite. See what happened,
837
00:40:15.719 --> 00:40:18.159
and what happened was bl you know what, I'm going.
838
00:40:18.079 --> 00:40:21.159
To close this issue and open it again.
839
00:40:22.280 --> 00:40:24.480
Yeah, you know we we can just make that branch
840
00:40:24.559 --> 00:40:26.559
go away again.
841
00:40:27.880 --> 00:40:29.760
And everybody else how we screwed this up.
842
00:40:30.239 --> 00:40:32.239
This was a forcing function for me to actually get
843
00:40:32.320 --> 00:40:36.559
much closer to get interesting, because once I started going
844
00:40:36.559 --> 00:40:38.599
through like the spectrum processes like okay, let me go
845
00:40:39.119 --> 00:40:40.840
create the spec, let me create the plan, let me
846
00:40:40.840 --> 00:40:43.920
break it down and task. Okay, this looks reasonable. Let
847
00:40:43.960 --> 00:40:46.400
me check the SIN. Okay, so now I have the check.
848
00:40:46.480 --> 00:40:48.880
Now let's start generating the code. It's like, okay, I
849
00:40:49.039 --> 00:40:51.199
don't even push. The code I just generated was like, okay,
850
00:40:51.239 --> 00:40:54.800
this component, Okay, now it looks right. Checkpoint check the SIN.
851
00:40:55.400 --> 00:40:58.239
Now continue generating. Oh now it's screwed up. Just blow
852
00:40:58.239 --> 00:40:59.719
it all away. Let's do it again.
853
00:41:00.199 --> 00:41:03.199
The code that worked in the previous build does work
854
00:41:03.280 --> 00:41:06.159
this next build. Yeah, exactly.
855
00:41:06.239 --> 00:41:10.360
But the geit process is super helpful in this context
856
00:41:10.400 --> 00:41:13.039
because it allows me to checkpoint things, and it's like,
857
00:41:13.719 --> 00:41:16.119
all of a sudden, get went from this like, oh yeah,
858
00:41:16.119 --> 00:41:18.519
I just use this toss things into gethub into an
859
00:41:18.559 --> 00:41:21.159
actual like oh, I can checkpoint things, and I can
860
00:41:21.199 --> 00:41:25.079
create multiple branches and multiple implementations across different branches and
861
00:41:25.159 --> 00:41:28.079
then test them separately. Oh I'm curious, what if this
862
00:41:28.199 --> 00:41:30.920
button would instead be this kind of component. Let me
863
00:41:30.920 --> 00:41:33.400
create a new branch and do this and test this right, So,
864
00:41:33.440 --> 00:41:37.440
like you, you go through the process of using get
865
00:41:37.519 --> 00:41:37.800
as an.
866
00:41:37.760 --> 00:41:40.840
Actual helper here, Yeah, no kidding, surprised. Can I go
867
00:41:40.920 --> 00:41:43.360
to the checkpoint code and point the LM at dot
868
00:41:43.440 --> 00:41:46.840
and said, this code works? Why is this changed? Or
869
00:41:47.039 --> 00:41:48.920
you're going to make changes? Make sure it passes the
870
00:41:48.920 --> 00:41:54.719
same test, so you can use your validation skills against
871
00:41:54.760 --> 00:41:57.920
the various pieces of code with these checkpoints and force
872
00:41:58.039 --> 00:42:00.840
the tool down about right, let.
873
00:42:00.760 --> 00:42:02.920
Me change GET testing tests?
874
00:42:03.079 --> 00:42:04.400
Do I just change the tests?
875
00:42:06.000 --> 00:42:08.599
This is like see the lesson for future software engineers
876
00:42:08.599 --> 00:42:10.239
listening to this learn GET.
877
00:42:10.880 --> 00:42:13.480
Yeah, that's like that's gonna be your your your savior.
878
00:42:13.719 --> 00:42:13.960
GET.
879
00:42:14.039 --> 00:42:15.760
This is a tool that will help you. Yeah, but
880
00:42:16.000 --> 00:42:18.360
you know and now you're you're helping me shape my
881
00:42:18.440 --> 00:42:21.800
mind on the how different our work looks like and
882
00:42:21.880 --> 00:42:23.639
the tools that are actually going to help us to
883
00:42:24.079 --> 00:42:27.000
get there. And again with always designed to am I
884
00:42:27.079 --> 00:42:30.679
better off? Is as better results? I've definitely talked to
885
00:42:30.719 --> 00:42:33.039
folks here, So I'm being successful as a tool, but
886
00:42:33.079 --> 00:42:36.239
I'm not having as much fun, right, Yeah, yeah, I can.
887
00:42:36.360 --> 00:42:38.599
I can see this and I think there's a something
888
00:42:38.599 --> 00:42:41.400
to be said about the fact that coding and self
889
00:42:41.519 --> 00:42:44.159
engineering in and of itself is a creative process, right,
890
00:42:44.719 --> 00:42:46.960
Like you're you're sitting down, like, let me think through
891
00:42:47.000 --> 00:42:49.199
this problem, let me figure out how to this. But
892
00:42:49.239 --> 00:42:51.800
also there's no denying that there's like, at least for me,
893
00:42:51.880 --> 00:42:53.400
I know for a fact, that there's a lot of
894
00:42:53.800 --> 00:42:56.480
tedious tasks like oh my goodness, like I just do
895
00:42:56.559 --> 00:42:59.639
not want to deal with this, like writing us like okay,
896
00:42:59.679 --> 00:43:01.159
you need to write one hundred unit test for all
897
00:43:01.199 --> 00:43:04.159
these components, Like oh, like, can I can just somebody
898
00:43:04.159 --> 00:43:05.960
write these for me so I can actually focus on
899
00:43:06.000 --> 00:43:06.679
the components.
900
00:43:07.079 --> 00:43:09.559
One hundred percent coverage is so much more approachable when
901
00:43:09.559 --> 00:43:12.920
you got a tool generating the test solely. Man, Yeah,
902
00:43:13.000 --> 00:43:16.440
what'd you call me? So?
903
00:43:17.199 --> 00:43:21.599
Yeah, it's almost like you know these people who get
904
00:43:21.599 --> 00:43:24.639
their dopamine rush from just a clean compile, right, you know,
905
00:43:25.320 --> 00:43:27.320
you know, I just want to write this feature compiles.
906
00:43:27.320 --> 00:43:29.360
All right, it's good, but I get my dopamine rush
907
00:43:29.440 --> 00:43:32.280
on those weekly meetings where I show the boss what
908
00:43:32.320 --> 00:43:35.519
I've done and it works and everything's good. Yes, that's
909
00:43:35.800 --> 00:43:38.960
I'm holding off for the for my endorphins. To kick
910
00:43:39.000 --> 00:43:41.719
in at that moment. It's delayed gratification.
911
00:43:41.800 --> 00:43:42.679
I think that's that's there.
912
00:43:42.800 --> 00:43:45.840
There's value in that in the sense that we often
913
00:43:45.880 --> 00:43:51.280
can forget what this is in service of, right, Like
914
00:43:51.599 --> 00:43:54.280
you're like looking at me, like the stuff that the
915
00:43:54.320 --> 00:43:55.639
code that I write is in service I.
916
00:43:55.599 --> 00:43:58.360
Want to solve a specific customer problem. Yeah, this is
917
00:43:58.400 --> 00:44:00.960
our whole VB conversation at the of it. Yeah, no,
918
00:44:01.039 --> 00:44:03.840
it wasn't as cool as C plus plus, but boy
919
00:44:03.880 --> 00:44:07.360
is sure did bring solutions to customers faster. Exactly if
920
00:44:07.400 --> 00:44:10.880
this can bring solutions to customers faster, Okay, and how
921
00:44:10.880 --> 00:44:12.840
many of your customers did care that, Like, oh you
922
00:44:12.840 --> 00:44:16.519
didn't write this in C plus plus ooh, well, as
923
00:44:16.519 --> 00:44:19.320
long as it doesn't look like AI slop, right, this
924
00:44:19.360 --> 00:44:22.760
is come down to it. If it's triggering people the
925
00:44:22.840 --> 00:44:25.800
way that AI slop triggers people, then you're not succeeding.
926
00:44:26.199 --> 00:44:27.639
Just say no to AI slope.
927
00:44:27.800 --> 00:44:28.079
There you go.
928
00:44:28.639 --> 00:44:31.480
Yeah, demand quality from these tools. But I'm also you
929
00:44:31.480 --> 00:44:32.920
said this a while ago, and I should have grabbed
930
00:44:32.960 --> 00:44:35.519
onto this earlier down if this thing gets me eighty
931
00:44:35.519 --> 00:44:37.960
percent of the way by dealing with all the scot
932
00:44:38.000 --> 00:44:39.880
work so that I now have to just work on
933
00:44:39.920 --> 00:44:43.159
the twenty, which is arguably the coolest code and the
934
00:44:43.199 --> 00:44:45.679
most important in the project. You did me a favor,
935
00:44:45.760 --> 00:44:47.760
There's no two ways about that. Yeah. You know, if
936
00:44:47.760 --> 00:44:50.840
we could just Prato's law this and get that eighty
937
00:44:50.880 --> 00:44:53.000
out so that we can work on the hard stuff,
938
00:44:53.000 --> 00:44:54.960
we've definitely saved time provided value.
939
00:44:55.039 --> 00:44:57.400
I think that's the goal. Hard stuff is more fun anyway, Yeah,
940
00:44:57.400 --> 00:44:58.039
that's the more fun.
941
00:44:58.239 --> 00:45:01.400
Yeah. Yeah, well it's plus you're going to fight with
942
00:45:01.519 --> 00:45:04.760
the spec and the tokens to get those last few
943
00:45:04.800 --> 00:45:08.039
points so hard it's probably not worth it. Like there's
944
00:45:08.079 --> 00:45:10.679
going to be a point of diminishing returns on this, yeah,
945
00:45:11.000 --> 00:45:12.719
at some point. And I'll say, like, it's also the
946
00:45:15.079 --> 00:45:18.000
mental shift of you thinking ahead of these problems and
947
00:45:18.159 --> 00:45:22.159
having an actual artifact and being more crisp with your
948
00:45:22.199 --> 00:45:25.119
thoughts and more crisp with how the rubber dying effect
949
00:45:25.119 --> 00:45:25.679
here is huge.
950
00:45:25.760 --> 00:45:28.840
Yes, exactly is going to help you down the line
951
00:45:28.880 --> 00:45:31.320
to just create better stuffware, just but just by proxy
952
00:45:31.880 --> 00:45:34.960
of you being able to think about it more and
953
00:45:35.079 --> 00:45:37.199
understand how does this actually work?
954
00:45:37.400 --> 00:45:38.800
Why is it the way that it is?
955
00:45:39.519 --> 00:45:41.000
What are the things that I should be thinking of
956
00:45:41.039 --> 00:45:43.480
that I'm not thinking about You know, we saw this
957
00:45:43.519 --> 00:45:47.280
happen in offshoring when when it got easier to offshore
958
00:45:47.400 --> 00:45:50.440
to low cost markets and you didn't get good results,
959
00:45:50.440 --> 00:45:52.559
and you learned to write better and better specifications and
960
00:45:52.559 --> 00:45:55.960
better and better project plans so that you were successful
961
00:45:56.000 --> 00:45:57.119
with the offshore developers.
962
00:45:57.119 --> 00:45:58.880
It turned out if you took those things on shore,
963
00:45:58.960 --> 00:46:02.079
you got more success to Yeah, shocker, right, Like.
964
00:46:05.639 --> 00:46:08.719
If you're better and specifying your requirements, you get better outputs.
965
00:46:08.840 --> 00:46:12.400
Wow, there is a reality check to this whole thing.
966
00:46:12.440 --> 00:46:16.880
But I really appreciate the idea of don't try. You're
967
00:46:16.880 --> 00:46:18.719
getting one hundred pcent is probably not worth it that
968
00:46:18.960 --> 00:46:21.199
getting And once you get into the eighties, you've had
969
00:46:21.199 --> 00:46:23.119
a win and now you can go do the rest.
970
00:46:23.400 --> 00:46:25.400
Here's the other thing, you know, because my instinct, I'm
971
00:46:25.440 --> 00:46:28.559
going back to code generation responses in the language you've used. Now,
972
00:46:28.559 --> 00:46:30.280
I feel like I'm dealing with the code generator, which
973
00:46:30.360 --> 00:46:33.280
clearly I am. As soon as I touch that code,
974
00:46:33.280 --> 00:46:35.519
I can't touch the code generator again. But that's not
975
00:46:35.639 --> 00:46:39.960
true than l L. No, You're you're collaborating again. You
976
00:46:40.159 --> 00:46:43.199
have an intern in your hands. M hmm. You're working
977
00:46:43.199 --> 00:46:45.760
together to write the code. Yeah, I'm you're going to
978
00:46:45.800 --> 00:46:48.639
resist the anthropomorphic terms there dem like I have a
979
00:46:48.639 --> 00:46:50.840
piece of software that's fair, that's fair.
980
00:46:50.920 --> 00:46:52.760
Yeah, but it sooner or later you're going to have
981
00:46:52.840 --> 00:46:56.360
to agree that the world wants to anthropomorphize these things.
982
00:46:56.400 --> 00:47:00.559
And I know the world wants it. It's just wrong.
983
00:47:01.000 --> 00:47:02.639
It's absolutely fair.
984
00:47:02.679 --> 00:47:04.960
Actually, Like I I can get totally behind that idea,
985
00:47:05.000 --> 00:47:07.880
like we should not entermorphize the AI because like, it's
986
00:47:07.960 --> 00:47:09.599
just an algorithm, it's a computer background.
987
00:47:09.599 --> 00:47:12.480
But it makes it easier for us to understand it
988
00:47:12.639 --> 00:47:15.800
when we put it in human terms, right if when
989
00:47:15.840 --> 00:47:16.280
we I.
990
00:47:16.199 --> 00:47:19.039
Think it makes it easier if a story execuse it inappropriately.
991
00:47:19.440 --> 00:47:21.880
Yes, yes, that I think it's like it gives it
992
00:47:21.920 --> 00:47:23.519
gives us the way of saying like, oh, it's like
993
00:47:23.599 --> 00:47:25.480
it's just it's just like a humans, Like, no, it's
994
00:47:25.480 --> 00:47:26.000
not like a human.
995
00:47:26.079 --> 00:47:27.079
It's not at all like a human.
996
00:47:27.159 --> 00:47:30.000
Right, But if I was going to say what was
997
00:47:30.039 --> 00:47:34.440
it thinking rather than well, what algorithmic sequences brought.
998
00:47:34.199 --> 00:47:36.960
It to the result that it did? Now true?
999
00:47:37.159 --> 00:47:40.880
Which would you rather let me ask you? Right, No, it's.
1000
00:47:40.719 --> 00:47:41.679
True, it's true.
1001
00:47:41.679 --> 00:47:43.920
I think there's there's a kind of shades of grade
1002
00:47:43.960 --> 00:47:47.719
of this it's like where it lands. But I generally
1003
00:47:47.880 --> 00:47:50.239
feel like, yeah, may're they're they're not humans.
1004
00:47:50.639 --> 00:47:53.480
So they're not they're not. We do have to remember that,
1005
00:47:53.760 --> 00:47:57.440
and so they don't have responsibility. They don't you.
1006
00:47:57.360 --> 00:48:00.760
Know, they're not accountable right right, or like if it
1007
00:48:00.800 --> 00:48:03.400
produces your like right, like we as software engineers, we
1008
00:48:03.400 --> 00:48:06.039
all know things like the the RAQ twenty five, right,
1009
00:48:06.039 --> 00:48:09.559
like the incident about the X ray machine. Remind us,
1010
00:48:10.199 --> 00:48:12.719
So there's an incident about with an X ray machine
1011
00:48:12.800 --> 00:48:15.920
where because of a software bug and no hardware interlock,
1012
00:48:16.519 --> 00:48:21.960
it would actually, uh for cancer patients would have basically
1013
00:48:22.039 --> 00:48:25.880
like deadly doses of radiation in under very certain conditions.
1014
00:48:25.920 --> 00:48:28.280
I think this happened like in the eighties. It's litical.
1015
00:48:28.360 --> 00:48:31.159
I think it's like the RAC twenty five. And so
1016
00:48:31.480 --> 00:48:33.679
the idea there is like, right, like, if if you
1017
00:48:33.760 --> 00:48:38.280
have an LM right software that does something dangerous like this,
1018
00:48:39.440 --> 00:48:40.559
who's accountable for that?
1019
00:48:40.760 --> 00:48:43.519
Yeah? Right right? It's not the AI, like you can't
1020
00:48:43.599 --> 00:48:45.800
it isn't. It isn't the equipment yea, yeah.
1021
00:48:45.760 --> 00:48:48.880
It's like, it's not the equipment, it's whoever pushed that software.
1022
00:48:48.920 --> 00:48:51.519
It's the software developer, just like with any other scenario right,
1023
00:48:51.559 --> 00:48:53.679
So to me, it's like, I think it's AI. Is
1024
00:48:53.719 --> 00:48:58.440
that it's it's INTELLISENTI and steroids. Was that Is that
1025
00:48:58.480 --> 00:49:01.039
a good frame to put it here? Like, yeah, that's
1026
00:49:01.079 --> 00:49:01.599
that's good.
1027
00:49:01.760 --> 00:49:04.320
I mean, because we don't answer promorphize and tell a sense,
1028
00:49:04.360 --> 00:49:04.599
do we?
1029
00:49:04.719 --> 00:49:06.840
You try not to? Well, well, you could, says I
1030
00:49:06.880 --> 00:49:10.639
mean the number of times I'm cursing a visual studio.
1031
00:49:10.920 --> 00:49:14.039
What is it thinking?
1032
00:49:14.360 --> 00:49:18.599
What were you thinking? Right?
1033
00:49:18.639 --> 00:49:21.519
But yeah, so I think it's like long story, longer
1034
00:49:21.559 --> 00:49:23.519
to what we talked about. I think that's a definitely
1035
00:49:23.519 --> 00:49:25.639
a mental shift. It's definitely one of those things where
1036
00:49:26.039 --> 00:49:32.239
you you have to treat it essentially as an assistant
1037
00:49:32.320 --> 00:49:37.000
program that allows you to write code faster, but it's
1038
00:49:37.000 --> 00:49:39.360
still up to you to make sure that you you
1039
00:49:39.559 --> 00:49:42.280
review this and you have input, and you can look
1040
00:49:42.320 --> 00:49:45.559
and say this is garbage, that's not what I asked,
1041
00:49:46.039 --> 00:49:47.960
or this test just returns true.
1042
00:49:48.000 --> 00:49:49.159
That's not how you pass a.
1043
00:49:49.119 --> 00:49:52.039
Test like this are supposed to work, right, So you
1044
00:49:52.199 --> 00:49:54.760
your expertise is still valuable. And I think that that's
1045
00:49:54.760 --> 00:49:56.960
what also gets lost in the conversation because folks get
1046
00:49:57.000 --> 00:49:57.519
so excited.
1047
00:49:57.639 --> 00:49:59.360
I'm just I'm trying to de sex you this not
1048
00:49:59.440 --> 00:50:01.119
out of this down this idea that I have a
1049
00:50:01.159 --> 00:50:04.840
re entrant code generator. Yeah, that makes me very happy
1050
00:50:04.880 --> 00:50:06.480
because that's something we haven't able to do before. It
1051
00:50:06.559 --> 00:50:08.760
used to be when you use code generators. Once you
1052
00:50:08.800 --> 00:50:11.239
touch that one way, I never run the generator again. Yeah. Now,
1053
00:50:11.320 --> 00:50:13.920
the idea that I could stick this code generator back
1054
00:50:13.920 --> 00:50:16.119
at the code that i've also that it contributed to
1055
00:50:16.199 --> 00:50:19.719
and I modified and do another iteration, that's a big deal.
1056
00:50:19.800 --> 00:50:21.280
Like this is it's pretty cool.
1057
00:50:21.800 --> 00:50:24.280
Yeah, yeah, exactly because I can come in for a
1058
00:50:24.320 --> 00:50:29.079
specific component and say, okay, this chunk here doesn't quite
1059
00:50:29.159 --> 00:50:31.519
look right. And what I will seen people do, and
1060
00:50:31.559 --> 00:50:33.760
I think this is a super valuable thing, is once
1061
00:50:33.800 --> 00:50:36.960
you started going through the motions of okay, I saw
1062
00:50:37.000 --> 00:50:39.000
where it failed. I saw that it did not create
1063
00:50:39.000 --> 00:50:41.559
this component the way that I wanted. Based on the
1064
00:50:41.559 --> 00:50:44.000
conversation that you had in code that back into the
1065
00:50:44.000 --> 00:50:46.840
spec right and say okay, now that we know this,
1066
00:50:46.920 --> 00:50:48.800
can you put them back in the spectrum technical plan?
1067
00:50:48.920 --> 00:50:51.320
So that way, again, if I come in down the
1068
00:50:51.320 --> 00:50:52.880
line and say, hey, we're going to take on a
1069
00:50:53.079 --> 00:50:57.079
rewrite of the system, can I recreate the behavior that
1070
00:50:57.159 --> 00:50:59.079
I had based on the learnings that I had and
1071
00:50:59.079 --> 00:51:01.760
the iteration that I had in this new format. And
1072
00:51:01.800 --> 00:51:03.280
this is where the speck comes in, because then you
1073
00:51:03.320 --> 00:51:05.400
can say, oh, yeah, totally, I've encoded.
1074
00:51:05.039 --> 00:51:07.440
All the larynx. This is also things that we hated
1075
00:51:07.519 --> 00:51:10.400
doing as developers. Right, It's like, Yo, the spec is wrong,
1076
00:51:10.440 --> 00:51:12.159
but nobody's actually gonna go fix the spec.
1077
00:51:12.199 --> 00:51:15.519
But now oh no, zero people. Now you have a
1078
00:51:15.559 --> 00:51:18.760
tool that you can demand it fix the spec. Yeah, exactly,
1079
00:51:18.800 --> 00:51:20.639
Just do yourself a favor and make sure you check
1080
00:51:20.679 --> 00:51:22.880
it in again. I really appreciate your thinking it will
1081
00:51:22.920 --> 00:51:24.599
save you because it'll mangle your spec.
1082
00:51:24.679 --> 00:51:26.480
Mm hmmmmmmm hmm. Yeah.
1083
00:51:26.639 --> 00:51:28.320
I mean, and you're absolutely right in the sense like
1084
00:51:28.559 --> 00:51:30.639
when I remember, like when I started my career as
1085
00:51:30.679 --> 00:51:34.400
a product manager at Microsoft, you'd write a spec, you'd
1086
00:51:34.480 --> 00:51:37.360
review it on a bunch of meetings, and then once
1087
00:51:37.400 --> 00:51:40.519
a dev the moment the code on the starboard.
1088
00:51:40.480 --> 00:51:41.760
Nobody ever touches that over.
1089
00:51:42.360 --> 00:51:44.840
It's like and then even if you realize like, oh yeah,
1090
00:51:44.880 --> 00:51:47.559
we forgot about like mentioning this, Hey dev, can you
1091
00:51:47.599 --> 00:51:49.679
go fix this thing? Because we had this idea and
1092
00:51:49.679 --> 00:51:51.360
they're like, oh sure, yeah, let's go change it. Like
1093
00:51:51.519 --> 00:51:54.159
nobody goes to the doc and then six months later
1094
00:51:54.199 --> 00:51:55.920
when you look at the doc and be like, product
1095
00:51:55.960 --> 00:51:56.840
doesn't work this way.
1096
00:51:57.079 --> 00:52:00.320
Well, this is how no new people can into the
1097
00:52:00.320 --> 00:52:01.760
project as they start with the document.
1098
00:52:01.800 --> 00:52:04.880
It's wrong exactly, and you and all those documents are
1099
00:52:04.920 --> 00:52:06.280
wrong and they're all all out of date.
1100
00:52:06.360 --> 00:52:08.320
We're trying to avoid that. All right, let's get weirder.
1101
00:52:08.400 --> 00:52:10.880
Let's start taking after we finished making the code. Then
1102
00:52:10.920 --> 00:52:13.639
you demand another tool generate a specification from the code
1103
00:52:13.639 --> 00:52:15.559
you can see and compare against it.
1104
00:52:16.079 --> 00:52:18.719
That's actually a thing, you know, and you know what.
1105
00:52:18.960 --> 00:52:21.000
Where this is super helpful what we refer to as
1106
00:52:21.039 --> 00:52:25.000
brownfield projects because where a lot of the spectrum of
1107
00:52:25.039 --> 00:52:27.880
development stuff kind of falls over a lot of scenarios.
1108
00:52:27.920 --> 00:52:30.800
Is all this is optimized for net new Like I'm
1109
00:52:30.840 --> 00:52:33.280
starting from zero to one, I have nothing, Go get
1110
00:52:33.320 --> 00:52:36.159
me something. But what if I already have a code
1111
00:52:36.159 --> 00:52:39.079
base that is which, let's face it, mostly we do
1112
00:52:39.239 --> 00:52:42.440
tens of thousands of Yeah, there's like can you do this?
1113
00:52:42.599 --> 00:52:44.880
And this is where that reverse process is super helpful.
1114
00:52:44.960 --> 00:52:46.920
Like I want you to write me a spec based
1115
00:52:46.960 --> 00:52:50.480
on how my authorization library is working, and it's like, okay,
1116
00:52:50.519 --> 00:52:52.000
let me go and look at the library that create this,
1117
00:52:52.039 --> 00:52:53.960
and they're like, Okay, now that we have this context,
1118
00:52:54.400 --> 00:52:57.320
can we now add a feature that changes how my
1119
00:52:57.440 --> 00:53:00.000
oft flow works context it's all about content.
1120
00:53:00.280 --> 00:53:02.199
Sure, No, this is a whole there's a whole other
1121
00:53:02.280 --> 00:53:05.559
show here about Brownfield with lllms mm hmm. Just see
1122
00:53:05.639 --> 00:53:08.719
I you know, because it's a great problem space. Right.
1123
00:53:08.800 --> 00:53:10.880
Let's say so we have a ton of applications inside
1124
00:53:10.880 --> 00:53:13.960
of organizations where the original dev team's long gone. Oddly enough,
1125
00:53:14.159 --> 00:53:19.079
the spec is incorrect, but we need new features. Yeah,
1126
00:53:19.119 --> 00:53:21.159
and you have a new team that's trying to take
1127
00:53:21.159 --> 00:53:22.719
that code on. So the idea that you could point
1128
00:53:22.719 --> 00:53:26.639
in ll at it first to generate a correct specification
1129
00:53:26.880 --> 00:53:29.760
in theory, like, you need to validate that. So I
1130
00:53:29.880 --> 00:53:31.880
probably want to iterate on that a few times and
1131
00:53:31.920 --> 00:53:34.880
then start to build a plan around how you would
1132
00:53:34.880 --> 00:53:35.840
make the change you want.
1133
00:53:35.920 --> 00:53:39.880
Well, you could certainly build real documentation of your product
1134
00:53:40.239 --> 00:53:44.199
by just sicken clawed copilot agent or whatever on it
1135
00:53:44.559 --> 00:53:47.800
and it'll do that. I've done it with Jeff Fritz
1136
00:53:47.880 --> 00:53:51.280
encoded with AI episode one and it created a pretty
1137
00:53:51.280 --> 00:53:54.679
good user manual. So I know that's not a spec
1138
00:53:54.719 --> 00:53:57.960
that's not an internal spec but it certainly is of
1139
00:53:58.000 --> 00:54:00.719
that same idea that you take something that it already
1140
00:54:00.800 --> 00:54:03.679
exists and then generate some documentation around it.
1141
00:54:04.400 --> 00:54:06.840
Have you guys heard of this project called deep wiki
1142
00:54:07.079 --> 00:54:11.400
deep wiki, deep wiki, deep wiki that sounds familiar to me.
1143
00:54:11.599 --> 00:54:13.159
So has it been around a long time?
1144
00:54:13.559 --> 00:54:16.280
No, it hasn't, but it's from the I believe it's
1145
00:54:16.280 --> 00:54:18.480
some of the same people that wrote Devin, like the
1146
00:54:18.519 --> 00:54:22.199
Coding Agent. So deep wiki is this place where you
1147
00:54:22.199 --> 00:54:26.320
can actually come in. It's a documentation generator. Basically, it's
1148
00:54:26.320 --> 00:54:28.840
an AI based documentation generator. You can come in and
1149
00:54:28.880 --> 00:54:32.159
you can look at different repositories that already been documented
1150
00:54:32.679 --> 00:54:34.440
or maybe even add your own, but you can just
1151
00:54:34.480 --> 00:54:37.079
plug in the URL and then it's going to generate
1152
00:54:37.119 --> 00:54:40.400
the docs. And to me, the fascinating part about this
1153
00:54:40.519 --> 00:54:44.079
is just how freaking good it is at looking at
1154
00:54:44.079 --> 00:54:47.199
the code base and like, oh vs code. Sure, let
1155
00:54:47.199 --> 00:54:50.119
me look at the architecture and here's a renderer process,
1156
00:54:50.159 --> 00:54:52.239
here's the main process, here's the extension host process. How
1157
00:54:52.239 --> 00:54:54.239
they interact with each other's like none of this stuff
1158
00:54:54.280 --> 00:54:58.239
is actually like encoded in some like there's a viscode
1159
00:54:58.280 --> 00:55:00.360
architecture doc but like it infers it for the code,
1160
00:55:00.360 --> 00:55:01.960
it points you to the lines of code, it generates
1161
00:55:02.000 --> 00:55:05.920
mermaid charts, like it's a fascinating project. It's a deepwiki
1162
00:55:05.960 --> 00:55:06.599
dot com.
1163
00:55:06.840 --> 00:55:10.519
Does it use playwright to get screen captures of the
1164
00:55:10.559 --> 00:55:11.639
application running?
1165
00:55:12.239 --> 00:55:16.960
You can plug it in with any MCP servers, including Playwright.
1166
00:55:17.280 --> 00:55:21.480
So that's what we did with with Visual Studio code
1167
00:55:21.519 --> 00:55:23.960
and the agent. We told it to use the Playwright
1168
00:55:24.079 --> 00:55:26.760
MCP to run the app and actually take screenshots and
1169
00:55:26.800 --> 00:55:29.440
put it in the documentation, which is very, very helpful.
1170
00:55:29.800 --> 00:55:30.039
Yeah.
1171
00:55:30.599 --> 00:55:33.639
Yeah, Playwright MCP is one of my favorite tools hands down.
1172
00:55:33.719 --> 00:55:33.880
Yeah.
1173
00:55:33.880 --> 00:55:37.079
That's unbelievable, is just how good it is about both testing,
1174
00:55:37.199 --> 00:55:42.079
providing screenshots and actually one of the validation steps that
1175
00:55:42.079 --> 00:55:44.199
I've experimented for spect driven by the way it's like
1176
00:55:44.199 --> 00:55:47.039
when it creates the UI, it uses player MCP to
1177
00:55:47.079 --> 00:55:49.840
go and say, are there any components that overlap with
1178
00:55:49.920 --> 00:55:53.000
each other or the UI is funky? And then if not,
1179
00:55:53.280 --> 00:55:54.159
go and fix it.
1180
00:55:54.239 --> 00:55:54.880
That's so cool.
1181
00:55:55.000 --> 00:55:55.199
Wow.
1182
00:55:55.320 --> 00:55:58.000
Right, So you're wiring these things together and we're back
1183
00:55:58.000 --> 00:55:59.639
to the whole idea of like what's the role to
1184
00:55:59.679 --> 00:56:02.639
develop in this? And this is like you are now
1185
00:56:02.679 --> 00:56:07.679
the orchestrator of this fleet of software agents that do
1186
00:56:07.840 --> 00:56:10.239
things for you? How do you make sure that app?
1187
00:56:10.320 --> 00:56:13.159
Yeah? And you see, like I think about the large
1188
00:56:13.159 --> 00:56:15.760
scale problems inside of big organizations right now. It's like
1189
00:56:15.800 --> 00:56:18.119
they got a ton of asp down web form apps
1190
00:56:18.159 --> 00:56:20.679
out there. Nobody wants to work on them anymore. Yeah,
1191
00:56:20.719 --> 00:56:23.079
of course they Everybody wants a mobile client for a
1192
00:56:23.119 --> 00:56:27.320
bunch of them, which is almost impossible, and rewriting them
1193
00:56:27.360 --> 00:56:29.559
takes time and money. Yeah, And so the idea that
1194
00:56:29.599 --> 00:56:33.199
I could fire up these llms use stuff like playwright
1195
00:56:33.280 --> 00:56:35.960
to screenshot the whole app and then fire it through
1196
00:56:36.000 --> 00:56:38.360
a generator to make it other version of the app.
1197
00:56:38.400 --> 00:56:41.599
Now me, my twisted mind, what's my automatic reaction? It's like,
1198
00:56:41.639 --> 00:56:44.159
let's make photocopies of photocopies. So I'm going to take
1199
00:56:44.199 --> 00:56:45.800
this app, I'm going to generate a spec. Then I'm
1200
00:56:45.800 --> 00:56:47.639
going to generate an app from the spec. Then I'm
1201
00:56:47.639 --> 00:56:49.880
going to generate a spec from that version of the app.
1202
00:56:50.039 --> 00:56:51.760
I don't see where we get to, because I bet
1203
00:56:51.840 --> 00:56:54.960
you're going to hit a floor, yeah, of functionality at
1204
00:56:54.960 --> 00:56:59.039
some point right where, because the compiler always has a say,
1205
00:56:59.280 --> 00:57:02.239
because the app ultimately has a set of core functionality.
1206
00:57:02.320 --> 00:57:04.119
Like I wonder if you'd end up with the most
1207
00:57:04.159 --> 00:57:05.960
distilled version of an app if you did a bunch
1208
00:57:05.960 --> 00:57:08.199
of iterations like that. Probably probably right.
1209
00:57:08.239 --> 00:57:11.480
But also like we know that software there's more to
1210
00:57:11.519 --> 00:57:14.400
building software than just carbon copy of things. Yes, right,
1211
00:57:14.440 --> 00:57:17.239
And this is where like I see people posting on
1212
00:57:17.679 --> 00:57:19.599
social media as like, oh, with the help of LM,
1213
00:57:19.840 --> 00:57:24.199
I recreated docuside in three days. It's like, well, sure,
1214
00:57:24.199 --> 00:57:27.119
pretty sure you didn't like yeah, but like it's you
1215
00:57:27.159 --> 00:57:29.800
got to realize that there's more docusine than like just
1216
00:57:29.880 --> 00:57:33.599
the uy of docusine, right, And that's part of it,
1217
00:57:33.639 --> 00:57:35.159
is like we're really starting to just still into what
1218
00:57:35.280 --> 00:57:37.119
are the important bits of software and what's the thing
1219
00:57:37.159 --> 00:57:39.519
that should have our primary attention.
1220
00:57:39.920 --> 00:57:45.599
Didn't some guy just recently tell uh and chat gipt
1221
00:57:45.760 --> 00:57:53.119
or whatever to rebuild and recreate Kubernetes anthropic. It was anthropic,
1222
00:57:53.159 --> 00:57:56.800
He said, rebuild me Kubernetes in Rust or something like that.
1223
00:57:57.519 --> 00:58:02.280
And it's spent so many tokens that it costs anthropic
1224
00:58:02.360 --> 00:58:06.079
four hundred thousand dollars and he only paid his two
1225
00:58:06.199 --> 00:58:07.360
hundred dollars for the month.
1226
00:58:07.840 --> 00:58:12.079
Yeah, but the question is did it did it recreate Kubernetes.
1227
00:58:12.239 --> 00:58:14.920
Well, it spent four hundred thousand dollars worth of token.
1228
00:58:14.679 --> 00:58:18.840
So it did something maybe nothing, that's in the end.
1229
00:58:18.880 --> 00:58:20.679
What did that four hundred thousand dollars do but heat
1230
00:58:20.719 --> 00:58:23.840
up a bunch of rocks? Yeah right, Yeah, the sand
1231
00:58:24.000 --> 00:58:29.840
is working hard. Yes, made the rocks warm today.
1232
00:58:31.400 --> 00:58:34.159
But I was genuinely curious, Like Carl, you were so
1233
00:58:34.199 --> 00:58:36.159
excited about it, and I was like, but did it
1234
00:58:36.199 --> 00:58:39.280
actually work? It's like that that that meme about like
1235
00:58:39.320 --> 00:58:42.400
I rewrote my app in like one day, this massive
1236
00:58:42.480 --> 00:58:44.679
enterprise scale things, like none of it worked, but did
1237
00:58:44.760 --> 00:58:45.599
sure look pretty?
1238
00:58:45.760 --> 00:58:49.440
Yeah? It was just another version of AI slop. But
1239
00:58:49.519 --> 00:58:51.320
you know, now you're pressing us the next issue here,
1240
00:58:51.400 --> 00:58:55.039
which is is this cost effective in the end, Like
1241
00:58:55.079 --> 00:58:58.119
when we eventually have to pay the real costs because
1242
00:58:58.480 --> 00:59:01.360
we know we're not so far. I mean we actually
1243
00:59:01.400 --> 00:59:03.079
have to pay the real cost for the compute, for
1244
00:59:03.119 --> 00:59:05.199
the tokens and so forth. Like now we're gonna have
1245
00:59:05.199 --> 00:59:06.880
another layer on running this tool where it's going to
1246
00:59:06.920 --> 00:59:09.320
now assess the token. Let's do an estimate before we
1247
00:59:09.400 --> 00:59:12.239
run this. You know, no different than I do when
1248
00:59:12.239 --> 00:59:15.760
I start provisioning apps into Azure we understand how much
1249
00:59:15.800 --> 00:59:17.760
infrastructure we need to run, and I can throw at
1250
00:59:17.760 --> 00:59:19.840
the CFO it's going to be this much a month. Yeah,
1251
00:59:20.079 --> 00:59:22.239
you know, to operate this like that. Those are the
1252
00:59:22.239 --> 00:59:23.719
trade offs are going to make, for sure, and it
1253
00:59:23.760 --> 00:59:27.239
will get more efficient to a degree that these are
1254
00:59:27.320 --> 00:59:28.960
going to be the trades, Yeah, for sure.
1255
00:59:29.039 --> 00:59:32.920
And I see a world too where we can use them,
1256
00:59:32.920 --> 00:59:36.000
maybe even a combination of things of what is actually
1257
00:59:37.880 --> 00:59:40.280
net new stuff that needs to be delegated to a
1258
00:59:40.320 --> 00:59:43.280
powerful generalized model versus something that can run locally on
1259
00:59:43.360 --> 00:59:45.599
my machine. Call right, It's like, oh, this is a
1260
00:59:45.840 --> 00:59:48.880
model that's trained specifically on ASB dot net core. It
1261
00:59:49.000 --> 00:59:51.039
is excellent for ASP dot net core and nothing else.
1262
00:59:51.079 --> 00:59:53.440
Can I potentially use that to go and write me
1263
00:59:53.440 --> 00:59:54.679
the ASP dot net core code?
1264
00:59:54.719 --> 00:59:57.440
Sure? Right. I also wonder about training model specific to
1265
00:59:57.480 --> 00:59:59.760
an application, Like You've got a mature piece of software
1266
01:00:00.239 --> 01:00:02.880
that's an awful lot of knowledge about what the software does,
1267
01:00:03.719 --> 01:00:05.079
and so if I can have that run in a
1268
01:00:05.079 --> 01:00:07.000
local model and just you know, let's not go out
1269
01:00:07.039 --> 01:00:08.880
of scope here, I just want to add these features
1270
01:00:08.960 --> 01:00:12.159
to it. So and yeah, the idea that these monster
1271
01:00:12.239 --> 01:00:15.679
models are the only way to do things sistantly not true, right, right?
1272
01:00:16.079 --> 01:00:18.039
And John and I were actually talking about John John
1273
01:00:18.079 --> 01:00:22.480
Lamb again our good friend, about this concept of a
1274
01:00:22.559 --> 01:00:26.320
prompt compiler, and the idea here is that with a
1275
01:00:26.360 --> 01:00:28.880
lot of the contexts that we're passing to models, there's
1276
01:00:28.920 --> 01:00:32.239
this context overload. There's just too much, like Richard used
1277
01:00:32.360 --> 01:00:34.599
the concept like the buffer overflows like that, that's like
1278
01:00:34.599 --> 01:00:36.119
we're trying to prevent. And it's like, and if I'm
1279
01:00:36.199 --> 01:00:39.719
building an ASP do a net application with a specific
1280
01:00:39.960 --> 01:00:45.119
like API structure, how do I encode just the relevant
1281
01:00:45.159 --> 01:00:47.320
context from the spect it? So I don't just give
1282
01:00:47.320 --> 01:00:49.079
it like, oh, here's all the front end pieces and
1283
01:00:49.079 --> 01:00:50.800
everything else that you need to consider. But by the way,
1284
01:00:50.840 --> 01:00:53.519
just build the apia like, right, can I just select
1285
01:00:53.559 --> 01:00:55.800
the pieces that it needs for my task?
1286
01:00:56.079 --> 01:00:58.400
Yeah? And maybe there is again, like a either a
1287
01:00:58.400 --> 01:01:01.039
local model or something else that pre emptively can select
1288
01:01:01.119 --> 01:01:03.800
these things and say okay, you only need this to
1289
01:01:03.920 --> 01:01:07.440
execute this task and nothing else, and that drives some
1290
01:01:07.519 --> 01:01:10.519
of the efficiency. So I think definitely we're we're right
1291
01:01:10.559 --> 01:01:12.840
now in the space where all of this is like
1292
01:01:13.239 --> 01:01:16.079
it feels like free money, right, Oh, four hundred thousand
1293
01:01:16.079 --> 01:01:20.159
dollars of Kubernetes tokens for two hundred dollars a month, Like, yeah, sure,
1294
01:01:20.400 --> 01:01:23.559
we're in the bubble of you know, the first wave
1295
01:01:23.679 --> 01:01:27.159
of this stuff right right, This bubble will end, but
1296
01:01:27.320 --> 01:01:29.320
you know, just no different than the dot com boom
1297
01:01:29.360 --> 01:01:32.000
and the end of that, you still have an Internet afterwards,
1298
01:01:32.039 --> 01:01:34.159
Like there will these tools will still exist, but we'll
1299
01:01:34.159 --> 01:01:37.639
start to rationalize it. I'm real happy to be talking
1300
01:01:37.679 --> 01:01:41.079
about the post bubble rationalizations.
1301
01:01:41.320 --> 01:01:41.639
Yeah.
1302
01:01:41.679 --> 01:01:44.119
Absolutely, yeah, I think this is where the whole conversation
1303
01:01:44.159 --> 01:01:48.840
about the bubble misses the point that the utility of
1304
01:01:48.880 --> 01:01:52.880
this is undeniable. Yes, Like I'm looking at the models
1305
01:01:52.880 --> 01:01:55.119
that we have today, like from Anthropic, from open Ai,
1306
01:01:55.239 --> 01:01:57.239
from like, and think about it, like if if the
1307
01:01:57.280 --> 01:01:59.960
evolution of those model stops today, like if after two
1308
01:02:00.400 --> 01:02:03.239
the refoard of the show nothing else ever gets released.
1309
01:02:03.800 --> 01:02:06.239
There is still a ton of value behind them and
1310
01:02:06.360 --> 01:02:09.079
building suffware and being able to like reduce the toil. Right,
1311
01:02:09.559 --> 01:02:12.360
nothing changes, it does not improve at all, and there's
1312
01:02:12.400 --> 01:02:13.320
still a lot of value in this.
1313
01:02:13.480 --> 01:02:13.679
Now.
1314
01:02:14.000 --> 01:02:15.880
Is there a lot of hype for things that are
1315
01:02:15.960 --> 01:02:18.320
like chat GBT wrappers around in the wild, like all
1316
01:02:18.360 --> 01:02:22.119
these like random startups Like absolutely, yeah, But the utility
1317
01:02:22.599 --> 01:02:25.840
for the core underlying models and the capabilities that they
1318
01:02:25.920 --> 01:02:28.480
offer for software development was like again to me, is undeniable.
1319
01:02:28.639 --> 01:02:31.440
Yeah, I'm with you then, and I'm just you know,
1320
01:02:31.679 --> 01:02:35.199
we can still get better, but yeah, it's certainly worthwhile,
1321
01:02:35.320 --> 01:02:37.920
and I appreciate thing you're building, these kinds of tools
1322
01:02:37.960 --> 01:02:41.079
to help us rein in the sort of randomness and
1323
01:02:41.119 --> 01:02:45.079
start to think more coherently about what modern dev practices
1324
01:02:45.159 --> 01:02:47.320
with these cod generators are going to look like going forward.
1325
01:02:47.599 --> 01:02:50.679
Absolutely well, Dan, thank you very much. It's been great
1326
01:02:50.719 --> 01:02:53.440
talking to you. Wow, blowing our minds over here.
1327
01:02:53.480 --> 01:02:55.840
Thank you for having me. Yeah, my dream came true.
1328
01:02:55.840 --> 01:02:56.920
I was in dot net rocks.
1329
01:02:56.920 --> 01:02:57.360
That's great.
1330
01:02:57.360 --> 01:02:59.840
There you go. And and we went for a ride too, friend,
1331
01:03:00.119 --> 01:03:01.960
going to call that meaty goodness.
1332
01:03:01.840 --> 01:03:05.920
Yet goodness absolutely all right, Thanks again to Den Delamarski,
1333
01:03:06.039 --> 01:03:09.519
and we'll talk to you next time, dear listener on
1334
01:03:09.719 --> 01:03:32.760
dot net rocks. Dot net Rocks is brought to you
1335
01:03:32.800 --> 01:03:36.800
by Franklin's Net and produced by Pop Studios, a full
1336
01:03:36.880 --> 01:03:41.039
service audio, video and post production facility located physically in
1337
01:03:41.119 --> 01:03:44.880
New London, Connecticut, and of course in the cloud online
1338
01:03:44.920 --> 01:03:47.320
at pwop dot com.
1339
01:03:47.519 --> 01:03:48.719
Visit our website at d.
1340
01:03:48.719 --> 01:03:50.719
O T N E t R O c k S
1341
01:03:50.800 --> 01:03:55.840
dot com for RSS feeds, downloads, mobile apps, comments, and
1342
01:03:55.920 --> 01:03:59.199
access to the full archives going back to show number one,
1343
01:03:59.400 --> 01:04:02.639
recorded September two thousand and two. And make sure you
1344
01:04:02.760 --> 01:04:05.840
check out our sponsors. They keep us in business. Now,
1345
01:04:05.880 --> 01:04:09.360
go write some code. See you next time. You got
1346
01:04:09.440 --> 01:04:18.599
your middle vans. This is home, then my Texes
1
00:00:01.080 --> 00:00:03.000
How'd you like to listen to dot net rocks with
2
00:00:03.040 --> 00:00:07.879
no ads? Easy? Become a patron For just five dollars
3
00:00:07.919 --> 00:00:10.800
a month, you get access to a private RSS feed
4
00:00:10.839 --> 00:00:14.039
where all the shows have no ads. Twenty dollars a
5
00:00:14.039 --> 00:00:16.559
month will get you that and a special dot net
6
00:00:16.640 --> 00:00:20.399
Rocks patron mug. Sign up now at Patreon dot dot
7
00:00:20.440 --> 00:00:36.479
NetRocks dot com. Hey, welcome back to dot net rocks.
8
00:00:36.520 --> 00:00:39.320
I'm Carl Franklin and A'mirchrid Campbell, and we're recording this
9
00:00:39.439 --> 00:00:42.920
right before we leave for dev Intersection in Orlando. But
10
00:00:43.439 --> 00:00:44.479
you are not home, sir.
11
00:00:44.759 --> 00:00:47.439
No, No, It'll all have been over by then. It'll
12
00:00:47.439 --> 00:00:51.439
almost be, you know, Halloween, so right, I'll be in
13
00:00:51.439 --> 00:00:53.520
the Netherlands when this publishes, so something.
14
00:00:53.600 --> 00:00:55.039
But right now, you're not at home, are you?
15
00:00:55.240 --> 00:00:57.560
I am, Yeah, I'm leaving. Oh you are. Literally we're
16
00:00:57.560 --> 00:00:59.159
recording a show and then I'm packing up to head
17
00:00:59.200 --> 00:01:03.039
to the mainland tomorrow. Okay, see you in Orlando, dude.
18
00:01:02.880 --> 00:01:05.439
All right, Okay, I thought you were on a trip before.
19
00:01:06.159 --> 00:01:06.680
Maybe you were.
20
00:01:06.719 --> 00:01:08.239
I don't know. I can't keep track of you. I
21
00:01:08.280 --> 00:01:09.000
don't even want to.
22
00:01:09.079 --> 00:01:11.040
Yeah, me neither. I don't even know where I am,
23
00:01:11.640 --> 00:01:12.359
Wait a minute, are you?
24
00:01:13.040 --> 00:01:14.519
Who are you? What'd you do with Richard Mind?
25
00:01:15.040 --> 00:01:16.000
I'm just another AI.
26
00:01:16.480 --> 00:01:20.200
Yeah right, uh well, let's you know, since this is
27
00:01:20.359 --> 00:01:24.040
episode nineteen seventy four, let's talk about what happened that year,
28
00:01:24.200 --> 00:01:25.799
shall we before we do anything else.
29
00:01:25.959 --> 00:01:29.040
Oh, it's an exciting year. It's an exciting year. Nixon.
30
00:01:29.120 --> 00:01:30.560
Bye bye, Where do you want to start?
31
00:01:30.599 --> 00:01:33.159
Bye bye Nixon. Yeah, he's not a crook, but he
32
00:01:33.239 --> 00:01:33.799
is resigning.
33
00:01:33.879 --> 00:01:35.760
Are you sure? I don't know, I sound so sure?
34
00:01:35.760 --> 00:01:39.560
Well he said so, yeah, okay, And you know, after
35
00:01:39.680 --> 00:01:42.280
that day, we didn't have Dick Nixon to kick around anymore.
36
00:01:42.480 --> 00:01:46.040
So I think he did for a while longer, but yeah,
37
00:01:46.400 --> 00:01:48.760
oh yeah, yeah, as long as I miss was alive,
38
00:01:48.799 --> 00:01:50.439
he was getting kicked on a daily basis.
39
00:01:50.480 --> 00:01:51.719
Yeah.
40
00:01:51.760 --> 00:01:55.280
The Turkish military invaded Cyprus following a coup, leading to
41
00:01:55.319 --> 00:02:00.359
a division of the island and increased international tensions.
42
00:02:00.040 --> 00:02:03.000
Which still persists this day. That division in Cyprus.
43
00:02:03.280 --> 00:02:07.840
The Carnation Revolution occurred in Portugal. That's a coup resulting
44
00:02:07.840 --> 00:02:12.759
in the overthrow of the authoritarian regime. So the FIFA
45
00:02:12.879 --> 00:02:15.879
World Cup took place in West Germany, where the host
46
00:02:15.960 --> 00:02:18.919
nation defeated the Netherlands two to one to win the championship.
47
00:02:19.439 --> 00:02:23.240
Just in case you were wondering, the boxing match known
48
00:02:23.280 --> 00:02:26.759
as the Rumble in the Jungle featured Muhammad Ali defeating
49
00:02:26.879 --> 00:02:33.199
George Foreman in Zaire. Ali would go forward to have
50
00:02:33.280 --> 00:02:36.240
a great after career life in George Foreman sold grills.
51
00:02:37.280 --> 00:02:39.280
He did a lot more than that. He had seven kids,
52
00:02:39.319 --> 00:02:46.039
all named George. The Swedish pop group Abba won the
53
00:02:46.080 --> 00:02:49.560
Eurovision Song Contest with their song Waterloo, making the start
54
00:02:49.599 --> 00:02:53.280
of their successful career. Have you seen the Eurovision Song
55
00:02:53.360 --> 00:02:54.639
Contest recently, Richard?
56
00:02:54.800 --> 00:02:57.360
Not recently, No, but I'm aware of it. You don't
57
00:02:57.360 --> 00:02:58.919
want to, okay.
58
00:02:59.280 --> 00:03:03.080
Some significant the film's release include The Godfather Part two, Chinatown,
59
00:03:03.120 --> 00:03:06.639
and Blazing Saddles, all movies that probably couldn't be made
60
00:03:06.639 --> 00:03:12.400
today in my opinion. I'm going to talk about the
61
00:03:12.520 --> 00:03:17.599
Terracotta Warriors. The first of those were discovering Jiang, China, unbelievable,
62
00:03:17.680 --> 00:03:20.919
leading to significant archaeological finds. What do you know about
63
00:03:20.960 --> 00:03:22.520
the terracotta warriors, Richard.
64
00:03:22.400 --> 00:03:25.360
I've been there, but just you know, I know that
65
00:03:25.360 --> 00:03:27.039
once they were exposed, they started to decay, like a
66
00:03:27.039 --> 00:03:28.319
lot of the paint was still on them. When they
67
00:03:28.319 --> 00:03:30.280
first were found, but.
68
00:03:30.280 --> 00:03:33.599
They were made to with the with the emperor, I
69
00:03:33.599 --> 00:03:37.639
suppose in the grave to protect him, right.
70
00:03:37.520 --> 00:03:40.360
Yeah, that's the that's the idea. Like nobody really knows
71
00:03:40.400 --> 00:03:43.960
for sure, but the Yeah, you'd have to see this thing.
72
00:03:43.960 --> 00:03:47.000
It's unbelievably vast. Yeah, and the crazy part is, like
73
00:03:47.120 --> 00:03:49.639
archaeology is not a huge thing in China, They've only
74
00:03:49.639 --> 00:03:52.479
done a little. There's so much more to be found there.
75
00:03:53.080 --> 00:03:56.680
And this is a culture that's been around literally for millennia. Yeah,
76
00:03:56.719 --> 00:03:58.919
you're talking these things are what two thousand or so
77
00:03:59.039 --> 00:04:00.800
years old, but there's so much more.
78
00:04:01.240 --> 00:04:03.599
I think the crazy part is that people actually built
79
00:04:03.639 --> 00:04:06.560
thousands of terracotta warriors and stuffed them in a grave. Yeah,
80
00:04:06.680 --> 00:04:07.560
that's kind of crazy.
81
00:04:07.680 --> 00:04:11.080
It speaks to the wealth of that country at that time,
82
00:04:11.199 --> 00:04:12.960
right that they could afford to do such just like
83
00:04:13.000 --> 00:04:16.160
building pyramids. Like, clearly you have too much money, right
84
00:04:16.319 --> 00:04:19.360
if you can build these things. But that, yeah, it's
85
00:04:19.439 --> 00:04:20.560
another example of that.
86
00:04:20.800 --> 00:04:23.600
So what happened in science and Tech and seventy four Richard.
87
00:04:24.240 --> 00:04:27.879
Not a big space year. Mariner ten made it to Mercury,
88
00:04:27.920 --> 00:04:29.879
the first probe to ever do that, actually do two
89
00:04:29.879 --> 00:04:33.600
flybys of Mercury, and that would be the only visit
90
00:04:33.720 --> 00:04:35.839
to Mercury in the twentieth century. That would be the
91
00:04:35.879 --> 00:04:40.040
Messenger spacecraft in the twenty first century. And that's about it.
92
00:04:40.079 --> 00:04:42.120
There's a couple of soused flights to sal you there's
93
00:04:42.120 --> 00:04:44.279
the plans for the Apollo Soy use missions, but they
94
00:04:44.279 --> 00:04:47.360
won't happen until the next year, so not a big
95
00:04:47.439 --> 00:04:48.240
year in space.
96
00:04:48.519 --> 00:04:51.759
And like Venus, Mercury is not a very hospitable planet.
97
00:04:51.839 --> 00:04:54.759
Well, it's awfully close to the Sun. It's very very hot,
98
00:04:54.839 --> 00:04:58.240
no atmosphere at all. Yeah, but still interesting, you know,
99
00:04:58.600 --> 00:05:02.720
and certainly something so we're studying further tricky to get
100
00:05:02.759 --> 00:05:04.519
to takes a lot of energy to get there.
101
00:05:04.560 --> 00:05:06.920
Do we actually get data from it before it burned up?
102
00:05:07.000 --> 00:05:09.600
Oh yeah, No, it's not that close. Was able to
103
00:05:09.720 --> 00:05:13.319
orbit around fly bys Mercury. You know, going into orbit
104
00:05:13.360 --> 00:05:15.120
around Mercury is very challenging. We won't do that for
105
00:05:15.160 --> 00:05:15.720
quite some time.
106
00:05:16.839 --> 00:05:19.920
The first reporting on the destruction of the ozone layer
107
00:05:20.680 --> 00:05:24.279
nineteen seventy four and will lead in a few years
108
00:05:24.279 --> 00:05:26.639
to the thing called the Montreal Accords. Well, we'll band
109
00:05:26.680 --> 00:05:29.920
CFC's and ultimate allow the ozone layer to repair itself
110
00:05:29.920 --> 00:05:32.319
a successful story and turns out it worked. It worked.
111
00:05:32.519 --> 00:05:35.839
Yeah, I'm giving away the ending. We can do those
112
00:05:35.920 --> 00:05:38.639
kinds of things, people, We can. We absolutely can. And
113
00:05:39.000 --> 00:05:40.720
I use that as an example when we talk about the
114
00:05:40.800 --> 00:05:45.600
current crisses. The first edition of Dungeons and Dragons is published.
115
00:05:45.680 --> 00:05:50.360
Gary Gygax and Dave Arnison from TSR derived from an
116
00:05:50.399 --> 00:05:53.680
earlier game played with miniatures and went.
117
00:05:53.560 --> 00:05:56.759
On to make geeks even geek here for many, many years.
118
00:05:56.800 --> 00:05:59.160
Oh yeah, but and I would say this is by
119
00:05:59.199 --> 00:06:01.199
far from in our part of the world. The most
120
00:06:01.199 --> 00:06:03.959
important thing happened in seventy four. Right at the end
121
00:06:03.959 --> 00:06:07.600
of nineteen seventy four, the mits altear eighty eight hundred.
122
00:06:08.639 --> 00:06:11.639
So this was not the only personal computer at the time.
123
00:06:11.680 --> 00:06:14.000
There were kits you could buy that would just be
124
00:06:14.120 --> 00:06:15.639
give you and you'd have to put together the parts
125
00:06:15.680 --> 00:06:19.120
and so forth. This was the first assembled machine based
126
00:06:19.120 --> 00:06:21.800
on the Intel eighty eighty. The design would largely lead
127
00:06:21.800 --> 00:06:24.720
to the S one hundred bus machine. In general, you
128
00:06:24.759 --> 00:06:26.720
could only had to set at LEDs on the front end.
129
00:06:26.759 --> 00:06:28.959
You would program it with switches, or you could add
130
00:06:28.959 --> 00:06:31.079
a serial card to it to have a teletype interface.
131
00:06:31.079 --> 00:06:34.199
Otherwise just not display no keyboard under that stuff. Yeah,
132
00:06:34.240 --> 00:06:38.879
and it was popular electronics. Is this magazine that was
133
00:06:38.920 --> 00:06:43.439
actually driving One of their rival magazines had published this
134
00:06:43.639 --> 00:06:45.759
kit on their cover, and they wanted to make sure
135
00:06:45.800 --> 00:06:47.560
they had something as well. So they were pushing and
136
00:06:47.680 --> 00:06:50.279
my admits to get this thing done in time. And
137
00:06:50.360 --> 00:06:52.399
so nominally it was on the cover of the January
138
00:06:52.480 --> 00:06:56.279
nineteen seventy five edition, but it was actually put on
139
00:06:56.319 --> 00:06:58.199
new stands in December seventy four, so I included the
140
00:06:58.240 --> 00:07:02.560
seventy four And why is it important? This is Microsoft's
141
00:07:02.600 --> 00:07:06.720
founding product. That cover is the thing that got Gates
142
00:07:06.720 --> 00:07:11.800
to drop out of Harvard and moved to Albuquerque and
143
00:07:12.000 --> 00:07:14.000
write a version of Basic would later be known as
144
00:07:14.040 --> 00:07:16.720
the Altar Basic, which was Microsoft's very first.
145
00:07:16.480 --> 00:07:18.160
Product, and he wrote it with the Altair.
146
00:07:18.639 --> 00:07:20.279
He used the alt He actually wrote it on a
147
00:07:20.319 --> 00:07:23.160
different machine because he didn't have one. He wrote it
148
00:07:22.439 --> 00:07:26.199
on a machine at Harvard, a lot of it by
149
00:07:26.279 --> 00:07:28.600
hand and by hand figured it all out because they
150
00:07:28.600 --> 00:07:31.600
had to run in four K, and then brought it
151
00:07:31.639 --> 00:07:34.279
down there and coated it in to test it. But
152
00:07:34.360 --> 00:07:36.079
the first time he already had it written before the
153
00:07:36.120 --> 00:07:37.920
first time he actually laid hand on an altar because
154
00:07:37.920 --> 00:07:39.839
there wasn't any of them, and the name Altar actually
155
00:07:39.879 --> 00:07:43.759
comes from the star Alta, although there's an apocryphal or
156
00:07:43.800 --> 00:07:47.079
adjacent story of the fact that around that same time,
157
00:07:47.120 --> 00:07:50.439
in the late seventies, the television show Star Trek had
158
00:07:50.439 --> 00:07:52.560
an episode on a mock time where they go to
159
00:07:52.600 --> 00:07:56.519
Altair six, and since it was a star of a technology,
160
00:07:56.560 --> 00:07:58.560
they ought to have a cool name, not just a number,
161
00:07:58.560 --> 00:07:59.079
so they called it.
162
00:07:59.199 --> 00:08:01.680
So I've seen pick of the Altear and you're right.
163
00:08:01.720 --> 00:08:04.439
It has like switches where you can turns the zeros
164
00:08:04.480 --> 00:08:07.920
into the ones on and then press the button to
165
00:08:08.079 --> 00:08:10.040
write it into memory. It kind of reminds me of
166
00:08:10.040 --> 00:08:13.279
a pressure cooker, you know, like, well, it's just a box, right,
167
00:08:13.319 --> 00:08:16.399
it's a issue here is it's turning over. It's before
168
00:08:16.519 --> 00:08:21.079
RAM exists. Yeah, so you had to hand key the bootloader. Wow,
169
00:08:21.199 --> 00:08:23.720
it was like one hundred and seventeen bytes something like that.
170
00:08:23.800 --> 00:08:27.439
So you literally so booed up was a process. Was
171
00:08:27.480 --> 00:08:29.519
literally once you got that thing running, you didn't want
172
00:08:29.519 --> 00:08:31.000
to turn it off. Power goes out.
173
00:08:31.079 --> 00:08:34.240
No, Yeah, and this is they weren't even using cassette
174
00:08:34.240 --> 00:08:36.639
tapes at this point. The first versions of Basic were
175
00:08:36.679 --> 00:08:41.360
on this paper tape with holes punched in it that
176
00:08:41.399 --> 00:08:43.759
they that the thing could read in to load up
177
00:08:43.759 --> 00:08:45.480
the version of Basic. It was a very small version
178
00:08:45.480 --> 00:08:47.039
of Basic because there's only four k RAM and you
179
00:08:47.039 --> 00:08:50.600
still have to run your program too, right, So.
180
00:08:50.200 --> 00:08:53.320
They really only had mainframes before that, right, main four
181
00:08:53.399 --> 00:08:53.679
or less.
182
00:08:53.679 --> 00:08:56.440
And many the PDPs are around, right, the mini computers,
183
00:08:57.080 --> 00:08:57.720
but they're all.
184
00:08:57.639 --> 00:09:00.080
Using cards, so it makes sense that they would be
185
00:09:00.240 --> 00:09:01.679
using that technology.
186
00:09:02.000 --> 00:09:05.519
He uses paper tape. And there's no copy of the
187
00:09:05.559 --> 00:09:09.159
original ALTA Basic. I think it exists anywhere. There is
188
00:09:09.200 --> 00:09:12.960
a version of the advanced version of that Basic in
189
00:09:13.039 --> 00:09:17.320
the Computer History Museum in the Silicon Valley, signed by Gates,
190
00:09:17.360 --> 00:09:20.200
and I think it was Gates's actual copy of it.
191
00:09:20.320 --> 00:09:20.720
Wow.
192
00:09:20.840 --> 00:09:24.039
And so yeah, yeah, the original original it starts the
193
00:09:24.039 --> 00:09:24.720
whole company.
194
00:09:25.000 --> 00:09:27.679
I think it's gone. That's pretty crazy. Yeah, so the
195
00:09:27.759 --> 00:09:30.519
history of dot net starts in nineteen seventy four, doesn't.
196
00:09:30.399 --> 00:09:34.039
Theoretically, I mean it's beginning of Microsoft. But yeah, yeah,
197
00:09:34.159 --> 00:09:36.919
all right in Albuquerque. Wow, good one.
198
00:09:38.039 --> 00:09:41.200
So let's start then next with better no framework?
199
00:09:41.240 --> 00:09:41.600
Awesome?
200
00:09:49.240 --> 00:09:51.960
Al what you got? Do you use bitwarden? So do?
201
00:09:52.039 --> 00:09:54.440
I I love Bitwarden? Did you know that you can
202
00:09:54.519 --> 00:09:55.919
run it on prem Yeah.
203
00:09:56.039 --> 00:09:58.519
Yeah, the open source product, right as it should be.
204
00:09:58.600 --> 00:10:01.399
Yeah, I didn't know this, and then I found the
205
00:10:01.399 --> 00:10:07.759
Bitwarden server get repository and apparently you know, so, like
206
00:10:07.799 --> 00:10:09.039
I said, I didn't know it. I thought it was
207
00:10:09.039 --> 00:10:11.559
a product that you subscribe to, and it is. But
208
00:10:11.600 --> 00:10:12.879
if you want to run it yourself in.
209
00:10:12.840 --> 00:10:14.799
There, you can use it for free or you can
210
00:10:14.799 --> 00:10:15.399
pay them like.
211
00:10:15.360 --> 00:10:18.159
You and so what's really cool about this is that
212
00:10:18.399 --> 00:10:22.039
you know, hey, maybe we don't even want to trust
213
00:10:22.080 --> 00:10:25.440
bitwarden dot com with our passwords. Maybe we want to
214
00:10:25.720 --> 00:10:28.519
you know, keep all our data behind the firewall and
215
00:10:28.840 --> 00:10:32.320
wherever we want to put it, and you know, to
216
00:10:32.399 --> 00:10:35.320
be more secure. I mean, whether it is or not,
217
00:10:35.440 --> 00:10:37.559
I don't know, but at least that's an option. So
218
00:10:37.679 --> 00:10:41.600
you can download the server. It has all the APIs
219
00:10:41.679 --> 00:10:44.440
and everything that you need to run it. You can
220
00:10:44.480 --> 00:10:46.759
even run it on a Windows machine. You can run
221
00:10:46.799 --> 00:10:50.200
it in Docker containers on a Windows machine if you
222
00:10:50.240 --> 00:10:53.000
want to. Of course, Linux and Mac it's all there.
223
00:10:53.279 --> 00:10:54.799
It's really really cool and.
224
00:10:54.759 --> 00:10:57.279
If we have made it clear, it's a password manager. Yes,
225
00:10:58.039 --> 00:11:02.000
you know, you can buy commercial products like one passes
226
00:11:02.039 --> 00:11:06.080
and so forth. But This is also one I've fallen
227
00:11:06.120 --> 00:11:07.960
on too. I had to leave last pass when last
228
00:11:07.960 --> 00:11:10.279
pass went insane. Me too, Yeah, which, by the way,
229
00:11:10.360 --> 00:11:12.960
I found migrating off the last pass less painful than
230
00:11:13.000 --> 00:11:15.919
I thought. Yep, I was dreading it. But the only
231
00:11:16.000 --> 00:11:18.559
real problem with a migrating from between password managers is
232
00:11:18.559 --> 00:11:20.440
at some point you're going to generate a CSV file
233
00:11:20.480 --> 00:11:23.240
of every single password in your life, and that will
234
00:11:23.240 --> 00:11:25.320
be upsetting. Well, the real way to do it is
235
00:11:25.399 --> 00:11:29.759
to just find the list of domains that you have
236
00:11:29.840 --> 00:11:32.440
passwords for in last past and go to each one
237
00:11:32.480 --> 00:11:34.679
of them and say, hey, I forgot my password, and
238
00:11:34.759 --> 00:11:37.440
go through the whole process of generation. Yeah. I mean,
239
00:11:38.120 --> 00:11:39.879
it's a terrible thing to do if you've got hundreds
240
00:11:39.879 --> 00:11:41.919
of them, but you know, in the reality is you
241
00:11:42.000 --> 00:11:44.000
can migrate your passwords over the other one, but you
242
00:11:44.039 --> 00:11:45.919
should probably change me after that and do yourself a
243
00:11:45.960 --> 00:11:48.919
favor delete that file when you're done. Absolutely, that file
244
00:11:48.960 --> 00:11:53.279
shouldn't exist. That files bad. What file? Yeah, and I'm
245
00:11:53.399 --> 00:11:55.799
super keen to get to pass keys. I just think
246
00:11:55.799 --> 00:11:58.000
passkey's still a half baked so.
247
00:11:58.039 --> 00:12:02.080
Yeah, they're not quite there yet. I like one global
248
00:12:02.120 --> 00:12:03.639
authenticator app would be really good.
249
00:12:03.679 --> 00:12:04.679
For me. Yeah, I don't know.
250
00:12:04.919 --> 00:12:06.960
Not nine authenticator apps, not ten?
251
00:12:07.120 --> 00:12:07.799
Good luck with that.
252
00:12:08.240 --> 00:12:09.399
Just one is all I want.
253
00:12:09.480 --> 00:12:11.600
I think there's a I's pretty sure there's an SKCD
254
00:12:12.360 --> 00:12:15.120
cartoon about this. It's like, we need a standard for everything.
255
00:12:15.200 --> 00:12:21.919
Now there's ten. Yay, Yeah, that's right. Remember scuzzy SCSI. Yeah,
256
00:12:22.159 --> 00:12:26.240
wasn't one of the SA's standing for standard. Yes, that's yeah.
257
00:12:26.279 --> 00:12:28.519
You know, how would that work out? No, there are
258
00:12:28.679 --> 00:12:30.679
no standards. Everybody fights against them.
259
00:12:30.879 --> 00:12:32.840
All right, Well that's what I got. Richard, who's talking to.
260
00:12:32.840 --> 00:12:35.000
Us today, jumped into the wayback machine because we haven't
261
00:12:35.000 --> 00:12:38.279
talked about stuff like specification driven development in a long time,
262
00:12:38.320 --> 00:12:40.519
but we have talked about it. And I grabbed a
263
00:12:40.559 --> 00:12:43.480
comment off a show nine to twenty one. Wow, this
264
00:12:43.559 --> 00:12:48.919
is when we talked about the product Cucumber working with
265
00:12:49.360 --> 00:12:52.799
behavior driven development Matt Wins show back in twenty thirteen.
266
00:12:52.919 --> 00:12:55.240
We've got a ton of comments on that show. Not surprising. Yeah,
267
00:12:55.279 --> 00:12:58.279
and gap has a Utz had this commed. He said, well,
268
00:12:58.279 --> 00:13:01.120
I had no real world experience with to driven development
269
00:13:01.159 --> 00:13:03.279
until now I've to use it on a new, relatively
270
00:13:03.320 --> 00:13:09.360
small project and we're now working on I'm really I'm
271
00:13:09.360 --> 00:13:11.759
trying to get to the place is what he's talking about,
272
00:13:11.840 --> 00:13:15.600
where you have an executical specification. And I just thought
273
00:13:15.600 --> 00:13:17.759
this comment was really relevant because we think about what
274
00:13:17.799 --> 00:13:22.360
we're doing with prompting with lllms these days, as could
275
00:13:22.360 --> 00:13:26.279
almost be an executable specification rather than having a separate document.
276
00:13:26.320 --> 00:13:28.159
It's supposed to document what the system does, but it's
277
00:13:28.279 --> 00:13:31.279
always out of sync, like what's the what do we
278
00:13:31.320 --> 00:13:34.159
make rules around all of this? But it would be
279
00:13:34.840 --> 00:13:37.279
cool to actually get on these large projects that we
280
00:13:37.320 --> 00:13:40.720
have a set of documentation that in this game were
281
00:13:40.720 --> 00:13:43.559
talking about. Cucumber generated the test to say does the
282
00:13:43.600 --> 00:13:47.919
software does what it's supposed to do? But I, you know, now,
283
00:13:47.960 --> 00:13:51.159
thinking ten years on looking at gatus as common, I'm like, wow,
284
00:13:51.440 --> 00:13:54.240
look where we are right now with the next generation
285
00:13:54.320 --> 00:13:58.600
of tools and another way of thinking about how we
286
00:13:58.639 --> 00:14:02.360
write a specification about an application and then how that
287
00:14:02.440 --> 00:14:04.559
specification turns into executable code.
288
00:14:04.600 --> 00:14:08.879
Cucumber was like all use cases, right, yeah, Like as
289
00:14:08.919 --> 00:14:11.320
a user, I want to be able to blay blah
290
00:14:11.360 --> 00:14:14.279
blah blah, and yeah, yeah, very cool.
291
00:14:14.399 --> 00:14:18.039
Yeah, it was acceptance testing, right, You're supposed to be
292
00:14:18.080 --> 00:14:19.559
able to write it in English, Like I don't know.
293
00:14:19.799 --> 00:14:21.679
I'll include a link to cucumber. Folks want to take
294
00:14:21.679 --> 00:14:23.519
a look at it. It would take a minute for
295
00:14:23.559 --> 00:14:24.919
me to go back and look at this now, just
296
00:14:24.919 --> 00:14:30.080
thinking about what lms have done to this whole space. Sure, anyway, Gattis,
297
00:14:30.080 --> 00:14:31.679
thank you so much for your comment, and a copy
298
00:14:31.679 --> 00:14:33.039
of music code By is on its way to you.
299
00:14:33.039 --> 00:14:34.399
And if you'd like a copy of music cobe I,
300
00:14:34.440 --> 00:14:36.480
write a comment on the website at dot NetRocks dot
301
00:14:36.519 --> 00:14:38.720
com or on the Facebook. We publish every show there,
302
00:14:38.720 --> 00:14:40.080
and if you comment there and I read in the show,
303
00:14:40.120 --> 00:14:41.320
I'll send you copy of music cobe.
304
00:14:41.360 --> 00:14:43.360
I was just using music to code By to prepare
305
00:14:43.399 --> 00:14:47.600
for my talks nice next week, and it's still going strong.
306
00:14:47.679 --> 00:14:52.919
Twenty two tracks, twenty five minutes long, designed for the
307
00:14:53.559 --> 00:14:56.240
Pomodoro technique, but not necessarily. You don't have to have
308
00:14:56.279 --> 00:14:56.679
a clock.
309
00:14:58.360 --> 00:14:58.559
You know.
310
00:14:58.720 --> 00:15:02.559
They're neither boring or too exciting. They're just in that
311
00:15:02.679 --> 00:15:06.679
middle space. They're just too right. Get you into a
312
00:15:06.720 --> 00:15:11.080
state of flow and keep you there, okay. Den de
313
00:15:11.240 --> 00:15:14.519
la Marski is our guest. He is a principal product
314
00:15:14.559 --> 00:15:18.159
engineer currently working at Microsoft, where he helps build developer
315
00:15:18.200 --> 00:15:21.840
tools in AI powered experiences that make engineers more productive.
316
00:15:22.519 --> 00:15:25.440
Den started his engineering journey all the way back in
317
00:15:25.440 --> 00:15:26.080
the nineties.
318
00:15:26.399 --> 00:15:29.799
Oh god, all the way back, all the way back,
319
00:15:29.919 --> 00:15:30.759
a long time ago.
320
00:15:30.799 --> 00:15:32.960
All the way back in the nineties.
321
00:15:33.799 --> 00:15:36.720
I did I tell you that I listened to your
322
00:15:36.759 --> 00:15:38.399
podcast when I was in middle school?
323
00:15:38.679 --> 00:15:39.679
Oh my god.
324
00:15:39.960 --> 00:15:45.039
Yeah, excuse me, take some geritol right now, Hang on
325
00:15:45.080 --> 00:15:45.480
a second.
326
00:15:45.559 --> 00:15:46.720
Yeah, yeah, all right.
327
00:15:46.759 --> 00:15:48.759
So in the nineties with the three eighty six box
328
00:15:48.799 --> 00:15:52.320
that was verily enough to run Doss games. He's upgraded
329
00:15:52.360 --> 00:15:56.159
since then. He has spent plenty of time writing code
330
00:15:56.159 --> 00:15:59.000
and visual basics six oh, but for more than two
331
00:15:59.000 --> 00:16:03.720
decades now he's writing see sharp and Python and there's more. Dan, welcome,
332
00:16:04.080 --> 00:16:06.960
thank you, so happy to be here. I'm such a
333
00:16:06.960 --> 00:16:08.000
fan of Dunn at Rocks.
334
00:16:08.399 --> 00:16:09.240
That's great. Wow.
335
00:16:09.279 --> 00:16:11.120
Well, after reading your bio, I'm a fan of yours
336
00:16:13.399 --> 00:16:15.480
TB six. I mean, I was there, we were there.
337
00:16:15.559 --> 00:16:16.519
I missed those days.
338
00:16:16.720 --> 00:16:19.000
I missed the days of just me like popping an ID,
339
00:16:19.960 --> 00:16:23.480
using the forum, designers, dropping some progress bars on clicking
340
00:16:23.480 --> 00:16:24.879
the buttons and things are.
341
00:16:24.799 --> 00:16:28.399
Just working well and not having to sign into an app.
342
00:16:28.600 --> 00:16:32.399
Nice and not having to sign in Ye, that was
343
00:16:32.440 --> 00:16:34.559
a product that was made fun of. You know, it
344
00:16:34.600 --> 00:16:38.240
wasn't real programming back in the day, and we were
345
00:16:38.279 --> 00:16:41.519
crying all the way to the bank as we knocked
346
00:16:41.519 --> 00:16:44.440
out the things that our customers actually needed in less time.
347
00:16:45.720 --> 00:16:48.919
I was there at BB one. Oh, I was there
348
00:16:49.279 --> 00:16:51.440
and quick Basic com pts Before.
349
00:16:51.200 --> 00:16:53.840
That, Yeah, yeah, no, I spent I did my time
350
00:16:53.879 --> 00:16:58.440
in the in MFC crashing windows repeatedly and wondering what
351
00:16:58.480 --> 00:17:02.240
I was doing wrong. VB showed out like this is better.
352
00:17:03.919 --> 00:17:06.440
What you do is you find yourself an MFCC plus
353
00:17:06.480 --> 00:17:09.039
plus programmer and then you just partner with them to
354
00:17:09.079 --> 00:17:10.480
do the hard stuff.
355
00:17:10.799 --> 00:17:11.319
Yeah.
356
00:17:11.400 --> 00:17:12.960
I gotta say, I just don't know that there was
357
00:17:13.000 --> 00:17:14.920
not that much stuff that was that hard. Like I
358
00:17:15.279 --> 00:17:17.160
love VB six, but you know, the one thing that
359
00:17:17.279 --> 00:17:19.359
just kind of annoyed me about it is when Windows
360
00:17:19.440 --> 00:17:22.519
XP came out and it had all these super nice
361
00:17:22.559 --> 00:17:25.039
styles and everything, and just VV six was constantly stuck
362
00:17:25.079 --> 00:17:26.680
in the Windows ninety five and I was like, oh,
363
00:17:26.799 --> 00:17:29.119
come on, man, Like, can I just get the nice
364
00:17:29.119 --> 00:17:31.759
progress bar, the nice button with the shadow.
365
00:17:31.640 --> 00:17:33.359
And you could if you went third party. They all
366
00:17:33.400 --> 00:17:36.359
adapted their stuff. Yeah, they had read through everything, but.
367
00:17:36.960 --> 00:17:38.960
I was broke and I had no money, I couldn't
368
00:17:38.960 --> 00:17:42.680
get that party. Well, and we didn't know that Microsoft
369
00:17:42.720 --> 00:17:45.319
was changing gears, right, like, yeah, that there wasn't going
370
00:17:45.400 --> 00:17:47.400
to be a VB seven right, Yeah.
371
00:17:47.200 --> 00:17:49.319
Those were the days days of drama.
372
00:17:49.599 --> 00:17:52.960
Yeah. So but that's talk to me about spec driven development,
373
00:17:53.039 --> 00:17:54.960
den What have you been up to here? What is
374
00:17:55.000 --> 00:17:56.039
this all? Right?
375
00:17:56.119 --> 00:17:58.920
So folks might have seen that about a month ago,
376
00:17:59.240 --> 00:18:01.680
we work with our friends at get hub to release
377
00:18:01.720 --> 00:18:04.400
this thing called spec Kit. So if you go to
378
00:18:04.519 --> 00:18:07.720
get up dot com slash, get up slash spec dash Kit.
379
00:18:08.359 --> 00:18:12.799
Spec Kit is nothing super magical. It's basically a set
380
00:18:12.839 --> 00:18:16.279
of templates, prompts, and scripts. And the whole purpose for
381
00:18:16.400 --> 00:18:19.160
that is that when we talk to folks that try
382
00:18:19.160 --> 00:18:22.400
to build software llms, like, there's a large swath of
383
00:18:22.400 --> 00:18:25.319
folks that are just very excited about the fact that, oh,
384
00:18:25.359 --> 00:18:28.119
I don't have to write boilerplate code, I don't have
385
00:18:28.200 --> 00:18:31.680
to write my tests from scratch because I can just
386
00:18:31.839 --> 00:18:34.359
you know, use quad code to do that stuff. So
387
00:18:35.519 --> 00:18:38.440
as we talk to more of these customers, especially customers
388
00:18:38.440 --> 00:18:41.039
and like bigger companies, customers that want to build something
389
00:18:41.079 --> 00:18:45.359
that is going beyond what we refer to as vibe coding. Oh,
390
00:18:45.359 --> 00:18:47.880
I'm building a podcast landing page, like, oh, yeah, you
391
00:18:47.920 --> 00:18:50.440
can vibe code that in the day. If you're building
392
00:18:50.519 --> 00:18:53.400
a i don't know, like a CRM or like a
393
00:18:53.400 --> 00:18:55.599
plugin for a CRM, all of a sudden you're in
394
00:18:55.599 --> 00:18:58.319
the world of hurt because you're getting into this state
395
00:18:58.440 --> 00:19:02.000
of now I need to go and just constantly prompt
396
00:19:02.000 --> 00:19:04.920
for changes, and then things went off the rails and
397
00:19:04.960 --> 00:19:07.480
I need to go back somehow and then redo it.
398
00:19:07.519 --> 00:19:11.319
But now I don't have any history. So for that
399
00:19:11.559 --> 00:19:14.400
we thought, okay, we have an idea for an experiment.
400
00:19:14.839 --> 00:19:20.160
What if all of this stuff can be encoded into specs?
401
00:19:21.000 --> 00:19:23.880
And this is idea as old as time, as kind
402
00:19:23.880 --> 00:19:25.960
of Richard called out like spectrum development and the idea
403
00:19:26.000 --> 00:19:29.079
of writing specs as the underlying kind of the layer
404
00:19:29.119 --> 00:19:31.480
of software is not exactly new like it existed for
405
00:19:31.559 --> 00:19:34.559
some time. This is more of a it's a new
406
00:19:34.599 --> 00:19:38.799
incarnation of it and in this context, and by the way,
407
00:19:38.880 --> 00:19:41.640
a lot of this was also driven by one of
408
00:19:41.640 --> 00:19:44.720
my colleagues, John Lamb, who was inspired.
409
00:19:44.920 --> 00:19:45.200
Yeah.
410
00:19:45.279 --> 00:19:49.359
John Lamb is great from the Iron Python days. For
411
00:19:49.359 --> 00:19:52.319
folks that don't know, Yeah.
412
00:19:51.599 --> 00:19:54.039
From a developmentor before that, I think yes.
413
00:19:54.359 --> 00:19:55.200
Yeah.
414
00:19:55.400 --> 00:19:59.799
So John was somewhat frustrated by the fact that Claude's Sonnet,
415
00:20:00.599 --> 00:20:04.240
the model from Anthropic, was very over eager.
416
00:20:04.319 --> 00:20:05.400
When you'd give it coding test.
417
00:20:05.640 --> 00:20:08.119
You'd be like, oh, can you like I'm building this
418
00:20:08.559 --> 00:20:10.480
new components, like oh, let me write this component, let
419
00:20:10.519 --> 00:20:12.200
me write all to the framework for this component and
420
00:20:12.279 --> 00:20:12.960
everything around it.
421
00:20:13.119 --> 00:20:13.319
Yeah.
422
00:20:13.880 --> 00:20:16.839
So the idea was like, well, can we put guardrails
423
00:20:16.839 --> 00:20:18.440
around it? So make sure that, like if I ask
424
00:20:18.519 --> 00:20:21.599
you to do this, you do just that. So this
425
00:20:22.039 --> 00:20:25.920
is what essentially bootstrapped spec Kit. This was the foundational pieces.
426
00:20:25.920 --> 00:20:27.799
It's like, how do we make the model a little
427
00:20:27.839 --> 00:20:31.480
bit more contained if you will to do the things
428
00:20:31.480 --> 00:20:34.160
that we want. And as we started kind of exploring this.
429
00:20:34.079 --> 00:20:36.759
Couldn't you write a system prompt for Claude just to say, hey,
430
00:20:36.799 --> 00:20:38.799
state your lane and don't do anything I don't tell
431
00:20:38.799 --> 00:20:39.160
you to do.
432
00:20:39.599 --> 00:20:42.240
You could, but then you're just always in this like
433
00:20:42.319 --> 00:20:45.640
cat and mouse game, right, and you're writing system prompts.
434
00:20:46.200 --> 00:20:47.839
So and by the way, it's also like if you
435
00:20:47.880 --> 00:20:49.440
switch models all of a sudden.
436
00:20:49.160 --> 00:20:52.160
Like what what then? Like do I write a system prompt? So?
437
00:20:52.400 --> 00:20:52.680
Okay?
438
00:20:53.279 --> 00:20:54.920
Yeah, And also we live in a world where developer
439
00:20:54.960 --> 00:20:57.160
switch models, like every week there is I'm sure there's
440
00:20:57.160 --> 00:20:58.839
a model came out. Well, we're recording this that we
441
00:20:58.880 --> 00:21:02.759
did not know about this, this is somehow better or different
442
00:21:02.799 --> 00:21:06.960
models for different applications exactly. So Speckett was born out
443
00:21:07.000 --> 00:21:09.960
of that entire need, and as we started kind of
444
00:21:09.960 --> 00:21:14.720
evolving it, things pop top from customer conversations like, oh, well,
445
00:21:15.359 --> 00:21:18.000
if I starting coding requirements, how do I make sure
446
00:21:18.039 --> 00:21:22.720
that my technical requirements are correctly updated if I decided
447
00:21:22.759 --> 00:21:26.119
to change my tech stack. And that actually is one
448
00:21:26.160 --> 00:21:28.799
of the core value props of Speckett and the spectrum
449
00:21:28.839 --> 00:21:32.839
development here is that we're detaching the spect the requirements
450
00:21:32.839 --> 00:21:36.119
from code and from the tech stack, so that if
451
00:21:36.160 --> 00:21:38.640
you're a developer and previously you're like, Okay, I want
452
00:21:38.640 --> 00:21:40.880
to build a web app for my enterprise that does
453
00:21:41.759 --> 00:21:45.839
something like accounting, and I'm not entirely sure which framework
454
00:21:45.920 --> 00:21:48.599
is the most performed, is it next JS? Should I
455
00:21:48.680 --> 00:21:51.279
use Astro? Should I be framework less entirely? Should I
456
00:21:51.279 --> 00:21:56.200
write this in just tailwin CSS for UI, shad CN.
457
00:21:56.559 --> 00:21:59.359
And like, what would you have to do?
458
00:21:59.519 --> 00:22:02.200
You'd have to go and write this in whatever stack
459
00:22:02.319 --> 00:22:04.680
and then maybe do some benchmarks and figure out like
460
00:22:04.720 --> 00:22:09.119
what's the performance. Now, because you have a spec you
461
00:22:09.160 --> 00:22:11.240
can just go and ask it to write you like
462
00:22:11.359 --> 00:22:15.279
three versions out of the same requirements. So you basically
463
00:22:15.319 --> 00:22:18.720
you start speed running the iteration process and saying, oh,
464
00:22:18.799 --> 00:22:22.200
create me like three options that I can choose from.
465
00:22:22.359 --> 00:22:24.559
And that's kind of nice because now you have the requirements,
466
00:22:24.839 --> 00:22:28.200
they're separate from your technical requirements, and the LM can
467
00:22:28.279 --> 00:22:30.000
just build it for you and then you can assess it.
468
00:22:30.319 --> 00:22:30.599
Cool.
469
00:22:31.160 --> 00:22:35.000
So Cucumber plus AI, you could probably think.
470
00:22:34.920 --> 00:22:38.640
It's basically simplify yes, instead of as a user I
471
00:22:38.720 --> 00:22:41.599
can is like as a large language model, I can.
472
00:22:44.039 --> 00:22:44.359
Wow.
473
00:22:44.440 --> 00:22:46.880
But I think you're also skipping over some hard bits here,
474
00:22:46.880 --> 00:22:49.920
which is you really have to granulize the specification. Yes,
475
00:22:50.200 --> 00:22:52.119
you want to take small enough bites at the LM
476
00:22:52.119 --> 00:22:53.519
has a shot at building this thing.
477
00:22:53.359 --> 00:22:56.000
Success absolutely, And I think one of the biggest problems
478
00:22:56.000 --> 00:22:58.119
that we see with people trying to approach spectro of
479
00:22:58.160 --> 00:23:01.079
development is actually, like, first of all, the problem is
480
00:23:01.160 --> 00:23:05.640
under specification because if you are not yet comfortable writing
481
00:23:05.640 --> 00:23:07.720
specs or understanding.
482
00:23:07.319 --> 00:23:09.599
What you're building and why, you're.
483
00:23:09.440 --> 00:23:12.440
Gonna fall into the pit of under specification and what
484
00:23:12.519 --> 00:23:16.359
happens when you underspecify things. The AI starts guessing and
485
00:23:16.400 --> 00:23:18.920
it's like, oh, sure, like you did not tell me
486
00:23:19.039 --> 00:23:21.160
that you do not want the header to be green.
487
00:23:21.839 --> 00:23:24.559
I'll make it like whatever color I choose, right, And
488
00:23:24.599 --> 00:23:26.920
I think this is like it's a it's a mental shift, right.
489
00:23:27.119 --> 00:23:31.000
You previously have to get into the mode of like, oh,
490
00:23:31.039 --> 00:23:33.119
I'll just go and start writing things and see how
491
00:23:33.160 --> 00:23:34.720
it happens. Now you're like, no, no, no, I need to
492
00:23:34.720 --> 00:23:39.400
spend upfront time thinking about this, outlining this. And by
493
00:23:39.440 --> 00:23:41.920
the way, we also support this capability. We added this
494
00:23:42.880 --> 00:23:46.000
prompt inside spec kid that is called clarified and that
495
00:23:46.119 --> 00:23:50.240
is essentially you're using the language model to question your
496
00:23:50.279 --> 00:23:52.680
spec right, So if you're not if you have writer's block,
497
00:23:52.759 --> 00:23:55.839
you're you're not inspired, Uh, you can just ask the
498
00:23:55.920 --> 00:23:57.640
LM to say can you can you ask me quite,
499
00:23:57.680 --> 00:23:59.599
are there any blind spots that I might have? Are
500
00:23:59.640 --> 00:24:02.599
there the things that I don't know?
501
00:24:02.960 --> 00:24:03.960
I don't know? Right?
502
00:24:04.160 --> 00:24:07.119
Right, just keep keep prodding at this and so and
503
00:24:07.119 --> 00:24:11.400
absolutely you're right Richard, like there is a degreeable. So great, Well,
504
00:24:11.240 --> 00:24:13.960
we're going to have this massive specification. It's going to
505
00:24:14.000 --> 00:24:17.480
be massive, like it's going to be massive context windows
506
00:24:17.480 --> 00:24:20.079
for folks that know, like any large language model has
507
00:24:20.119 --> 00:24:24.559
basically a limited set of tokens again process at any
508
00:24:24.599 --> 00:24:26.839
given time before it starts losing track of what you
509
00:24:26.920 --> 00:24:29.640
asked it to do. So the context windows are relatively limited.
510
00:24:29.680 --> 00:24:32.519
So if you start with a giant, massive spec you
511
00:24:32.519 --> 00:24:34.079
can call it a context window. I'm going to call
512
00:24:34.119 --> 00:24:37.480
it a buffer overflush. Sure that's really what's happening. Absolutely, yes,
513
00:24:37.599 --> 00:24:39.039
that that's a very good way of putting it. Like
514
00:24:39.079 --> 00:24:40.279
you're going to get into the world of the buffer
515
00:24:40.319 --> 00:24:43.440
overflow where a lot of your instructions and guardrails are
516
00:24:43.480 --> 00:24:44.920
just going to be tossed out the windows. Like it's
517
00:24:44.920 --> 00:24:45.599
not going to be a plot.
518
00:24:45.640 --> 00:24:48.599
Yeah I heard Sun at four point five has more space.
519
00:24:48.880 --> 00:24:52.680
Yes, yes, modern models have like generally are improving in
520
00:24:52.720 --> 00:24:55.279
terms of like the the buffer overflail problem.
521
00:24:55.400 --> 00:24:56.400
Yeah.
522
00:24:56.519 --> 00:24:59.680
So what we also do here is not only do
523
00:24:59.720 --> 00:25:01.920
we ask you to create the specification, but we'll also
524
00:25:02.000 --> 00:25:04.960
break this down into chunks. So once SUSPEC is ready,
525
00:25:05.119 --> 00:25:09.079
once the technical plan is outlined, we have the capability
526
00:25:09.079 --> 00:25:13.039
to basically split this into consumable tasks. And then this
527
00:25:13.079 --> 00:25:15.160
is where I showed in my videos. I showed in
528
00:25:15.160 --> 00:25:17.960
a blog where it's like you can use slash tasks
529
00:25:17.960 --> 00:25:20.519
to then create a list of tasks that are based
530
00:25:20.519 --> 00:25:23.640
on the spec based on the technical plan, and the
531
00:25:23.759 --> 00:25:25.559
LM can do them in chunks. It's like, Okay, first
532
00:25:25.599 --> 00:25:27.759
of all, you need to bootstrap this project next to yes, okay,
533
00:25:27.839 --> 00:25:29.680
let me go do that. Now you need to create
534
00:25:29.680 --> 00:25:31.839
the CSS, Okay, let me go do that. So you're
535
00:25:31.880 --> 00:25:37.319
going through these controlled stages of creating things and get
536
00:25:37.720 --> 00:25:40.200
to an end result. Now, some of these tasks also
537
00:25:40.240 --> 00:25:42.000
going to be parallelized, and this is something that we
538
00:25:42.039 --> 00:25:46.039
see with coding agents like claud code that support sub agents,
539
00:25:46.119 --> 00:25:48.680
where the agent itself can spin up sub agents with
540
00:25:48.720 --> 00:25:51.839
their own context windows, and you can say, oh, this
541
00:25:51.880 --> 00:25:53.680
agent's going to be writing tests for this component, this
542
00:25:53.720 --> 00:25:55.680
agent's going to be running tests for this other component.
543
00:25:55.720 --> 00:25:58.279
And then you get into this world of kind of
544
00:25:58.559 --> 00:26:01.640
things are happening in parallel but also manageable chunks.
545
00:26:01.799 --> 00:26:04.519
Yeah no, and you sort of see your role as
546
00:26:04.519 --> 00:26:08.319
a shepherd there to push down the specifications in enough
547
00:26:08.400 --> 00:26:12.400
detail that the tools have a chance segregating into portions
548
00:26:12.440 --> 00:26:15.920
with headers that describe this is the context you're going
549
00:26:15.960 --> 00:26:18.480
to be living in. But it's shorter than the overall context.
550
00:26:18.480 --> 00:26:21.319
Now I need you to do this party, and I
551
00:26:21.880 --> 00:26:25.079
everywhere I see this being this approach be successful with
552
00:26:25.720 --> 00:26:29.920
unbelievable levels of testing too, right, I'm always a stun
553
00:26:30.000 --> 00:26:32.519
to llms. Often when given an instruction for a set
554
00:26:32.519 --> 00:26:35.240
of code to generate, get about halfway through and just
555
00:26:35.359 --> 00:26:38.480
kind of stop. It's like, you can finish this. It's
556
00:26:38.480 --> 00:26:40.799
your buffer overflow. I think it's a buffer overflow. And
557
00:26:40.839 --> 00:26:43.839
so so that test approach where I want you to
558
00:26:43.839 --> 00:26:45.720
generate the set of tests and then I want you
559
00:26:45.839 --> 00:26:48.759
to pass all the tests before you stop. It's kind
560
00:26:48.759 --> 00:26:51.880
of a way to again compress that context further right
561
00:26:51.920 --> 00:26:54.799
into these test loops to try and actually get complete
562
00:26:54.839 --> 00:26:57.759
sets of code from it, like the tools take the wrestling.
563
00:26:57.799 --> 00:27:01.200
When that happens. When that happens, though, it's it's really
564
00:27:01.279 --> 00:27:05.079
unnerving because it's in a state where you can't really
565
00:27:05.119 --> 00:27:07.119
debug it because not all the code is there that
566
00:27:07.160 --> 00:27:11.319
it was, yes, you know, spitting out and you ultimately
567
00:27:11.400 --> 00:27:14.559
have to roll stuff back and try again. And I
568
00:27:15.160 --> 00:27:18.279
hate that about code generation in general, is that you know,
569
00:27:18.359 --> 00:27:20.920
now this is intelligent code generation. By the way, John
570
00:27:20.960 --> 00:27:23.799
Lamb's been into code generation since like ninety one.
571
00:27:23.880 --> 00:27:24.799
Before it was cool.
572
00:27:25.039 --> 00:27:28.960
Yeah, but you know the problem of course is that
573
00:27:29.400 --> 00:27:33.559
if it creates something that you don't understand and can't
574
00:27:33.759 --> 00:27:38.720
explain in a meeting, for example, you're you're done for
575
00:27:39.200 --> 00:27:40.200
in my opinion.
576
00:27:39.920 --> 00:27:41.599
Oh absolutely absolutely.
577
00:27:41.799 --> 00:27:43.680
And I think this is an interesting tangent here to
578
00:27:43.880 --> 00:27:49.400
the role of expertise, Like I've heard somebody talk about
579
00:27:49.519 --> 00:27:52.039
kind of the role of the developer moving forward. If
580
00:27:52.559 --> 00:27:56.559
if LM has become really good at cogeneration and producing
581
00:27:56.720 --> 00:28:00.160
just just boatloads of code, what is your role as
582
00:28:00.160 --> 00:28:03.799
a developer on IT team? And I think there's a
583
00:28:03.960 --> 00:28:05.920
hypoth this is that that role is going to shift
584
00:28:05.960 --> 00:28:08.920
more to almost like a Richards. You go out like
585
00:28:08.960 --> 00:28:12.000
the Shepherd reviewer, right, it was like okay, but like
586
00:28:12.880 --> 00:28:15.119
even for you to be able to review things, you
587
00:28:15.240 --> 00:28:19.039
have to have expertise to know what you're looking at, right,
588
00:28:19.119 --> 00:28:21.039
because I've seen this happen. But like Carl, you're talking
589
00:28:21.079 --> 00:28:23.200
about like test or and development, Like to me, this
590
00:28:23.240 --> 00:28:25.319
aspect of like, okay, well, there's a bunch of tests,
591
00:28:25.960 --> 00:28:27.559
and I looked at some of the tests that some
592
00:28:27.599 --> 00:28:30.000
of the models generate, and sometimes like for me to
593
00:28:30.079 --> 00:28:31.440
test for the test to pass.
594
00:28:31.519 --> 00:28:34.319
Oh, let me make a change and just return true. Yeah, right,
595
00:28:34.359 --> 00:28:36.240
and test is passing now, Hey solved it.
596
00:28:36.240 --> 00:28:36.599
Look at it.
597
00:28:36.599 --> 00:28:37.160
It's all green.
598
00:28:37.200 --> 00:28:37.359
Now.
599
00:28:37.519 --> 00:28:41.000
Nice, But you need to have the expertise to actually
600
00:28:41.039 --> 00:28:43.319
look at it and be like, yeah, this ain't it?
601
00:28:43.480 --> 00:28:44.680
No, like I need like I.
602
00:28:44.680 --> 00:28:46.559
Kind of I kind of think of a roll moving
603
00:28:46.599 --> 00:28:50.039
forward as sort of like a general contractor building a house. Right,
604
00:28:50.160 --> 00:28:52.920
the general contractors in charge of all the subcontractors that
605
00:28:53.000 --> 00:28:56.279
have their sub specialties. But any general contractor worth their
606
00:28:56.319 --> 00:28:59.680
weight knows enough about those things to be able to
607
00:28:59.720 --> 00:29:02.759
take over if the electrician is out sick, or to uh,
608
00:29:03.160 --> 00:29:06.960
you know, remove the termite damage from these boards, if
609
00:29:07.359 --> 00:29:10.359
the carpenter doesn't you know, isn't there that day? That
610
00:29:10.440 --> 00:29:13.119
kind of stuff. So so you need to be able
611
00:29:13.160 --> 00:29:15.839
to understand everything that your subs are doing and be
612
00:29:15.920 --> 00:29:18.480
able to jump in when you can, but not necessarily
613
00:29:18.480 --> 00:29:19.960
build the house by yourself.
614
00:29:19.640 --> 00:29:23.400
Right, right, And we see this especially critical with things
615
00:29:23.480 --> 00:29:27.440
like security and awe, oh my goodness, Like I see
616
00:29:27.519 --> 00:29:30.559
so much stuff that is just tossing to get our
617
00:29:30.559 --> 00:29:33.480
bripo that clearly has been just like the AI told
618
00:29:33.519 --> 00:29:36.119
me that this is secure, Like oh no, you're returning
619
00:29:36.119 --> 00:29:38.240
to the two FA code and the adjacent response is
620
00:29:38.279 --> 00:29:41.400
you're expecting it like that's that's that's not going to
621
00:29:41.440 --> 00:29:43.720
be good. So yeah, so the these changes right, like
622
00:29:43.880 --> 00:29:45.880
there's a good degree of that expertise that needs to
623
00:29:45.920 --> 00:29:49.079
be embedded into the process and see that the the
624
00:29:49.200 --> 00:29:52.680
what the LM is generating, whether it's tests, the components,
625
00:29:52.759 --> 00:29:57.799
the structure is actually right and scope through the project
626
00:29:57.799 --> 00:30:01.599
you're building them because LM's go thrills all the time,
627
00:30:01.720 --> 00:30:04.240
right all the time, and they do wild things that
628
00:30:04.319 --> 00:30:07.039
if you don't know, like on a surface, it might
629
00:30:07.079 --> 00:30:09.880
seem like, oh it works. I was recently like rebuilding
630
00:30:09.920 --> 00:30:11.880
some of the stuff would alsope with the help of
631
00:30:11.920 --> 00:30:14.279
spec get on my blog and it's like, oh, I
632
00:30:14.319 --> 00:30:16.759
couldn't understand where your CSS is. I'm just going to
633
00:30:16.839 --> 00:30:19.119
recreate a bunch of CSS files and so I'd have
634
00:30:19.200 --> 00:30:22.200
like a bunch of duplication all of a sudden. Yeah
635
00:30:22.279 --> 00:30:25.359
it works though, but if I didn't know, if I'm
636
00:30:25.359 --> 00:30:27.839
somebody that has to maintain, they'll be like, wait, why
637
00:30:28.240 --> 00:30:32.200
just recreate these two folders for this exact same content.
638
00:30:32.240 --> 00:30:34.599
We're coming up with more and more of these examples
639
00:30:34.640 --> 00:30:39.640
where having the expertise would prevent working code. That's dumb.
640
00:30:39.799 --> 00:30:42.799
Yeah, yeah, yeah. The concept is what's worked, what's actually
641
00:30:42.839 --> 00:30:45.559
working right, and the software clearly has a different perception
642
00:30:45.640 --> 00:30:49.759
of working than you. Yeah right, get good enough guidelines. Hey,
643
00:30:49.759 --> 00:30:53.000
we got to take a break for these very important messages.
644
00:30:55.119 --> 00:30:57.359
Do you have a complex dot net monolith you'd like
645
00:30:57.400 --> 00:31:01.359
to refactor to a micro services architecture? The micro Service
646
00:31:01.480 --> 00:31:05.200
Extractor for dot Net tool visualizes your app and helps
647
00:31:05.240 --> 00:31:09.599
progressively extract code into micro services. Learn more at aws
648
00:31:09.720 --> 00:31:13.319
dot Amazon dot com, slash modernize.
649
00:31:16.680 --> 00:31:18.799
And we're back. It's don A. Rock's Emirateard Campbell. Let's
650
00:31:18.799 --> 00:31:22.559
Carl Franklin. You talking to our friend dem about the
651
00:31:22.680 --> 00:31:26.839
spec kit and this idea of I think essentially formalizing
652
00:31:26.960 --> 00:31:31.359
some practices around harnessing LMS for co generation. You're talking
653
00:31:31.400 --> 00:31:36.920
about uml right, yeah, yeah, that's what I want in
654
00:31:36.920 --> 00:31:37.359
my life.
655
00:31:37.400 --> 00:31:39.200
You're still way back in the nineties.
656
00:31:39.720 --> 00:31:47.240
Yeah, well, you know, it's linguist. It'd be interesting to
657
00:31:47.240 --> 00:31:49.759
get to a point where it was rendering, taking images
658
00:31:49.799 --> 00:31:53.640
and breaking them down into specifications as well. But I
659
00:31:53.640 --> 00:31:55.799
I do you know, now we've got the I'm starting
660
00:31:55.799 --> 00:31:58.480
to see the term work slop, just like AI slop,
661
00:31:58.559 --> 00:32:03.440
but it's hey, you you responded to a mediocre corporate
662
00:32:03.480 --> 00:32:07.160
email with even with generated results of even more mediocre.
663
00:32:07.440 --> 00:32:10.319
And the evil part about this is it takes time
664
00:32:10.400 --> 00:32:13.319
to read that and realize it's garbage, and so you're
665
00:32:13.319 --> 00:32:16.599
literally propagating garbage downward and making everything slower. Like there's
666
00:32:16.599 --> 00:32:22.160
a real risk here about not creating quality, but there
667
00:32:22.200 --> 00:32:24.359
is a way to create quality, like I have seen
668
00:32:24.400 --> 00:32:27.680
these things be successful. So part of this is really
669
00:32:27.880 --> 00:32:30.240
building you know, we talked about what's our job as
670
00:32:30.279 --> 00:32:33.240
the human in the loop here, it's actually having an
671
00:32:33.279 --> 00:32:36.480
eye to quality results that just setting it to true
672
00:32:36.519 --> 00:32:40.640
is non as acceptable that these tests are comprehensive. You know,
673
00:32:40.759 --> 00:32:43.119
you've got it, and but I also think you're going
674
00:32:43.200 --> 00:32:45.680
to be used the tool a lot for this. I
675
00:32:45.880 --> 00:32:49.279
like the idea of co generated from Claude being evaluated,
676
00:32:50.200 --> 00:32:53.640
you know, by open AI and how does it what
677
00:32:53.759 --> 00:32:56.200
its assessment looks like, and going passing back and forth
678
00:32:56.240 --> 00:33:00.160
between them so that you do have other assessments of
679
00:33:00.200 --> 00:33:01.160
everything being made.
680
00:33:01.400 --> 00:33:04.799
Have you guys ever hired somebody who talked to good
681
00:33:04.839 --> 00:33:07.200
talk and then when they sent their code in you
682
00:33:07.200 --> 00:33:08.839
could tell they had no idea what they were doing
683
00:33:08.880 --> 00:33:12.440
and you're just frustrated. You could lose your mind like that,
684
00:33:12.599 --> 00:33:17.240
Like if you're constantly retelling an LLM, No don't you
685
00:33:17.480 --> 00:33:21.559
don't downgrade to dot eight? Was dot nine? Did I
686
00:33:21.599 --> 00:33:22.920
tell you the down grade?
687
00:33:23.000 --> 00:33:23.079
No?
688
00:33:23.200 --> 00:33:25.039
I did not, So why are you doing? You could
689
00:33:25.079 --> 00:33:28.400
actually lose your mind if you know, after a while,
690
00:33:28.400 --> 00:33:31.599
if that's your job and no wonder people want to
691
00:33:31.599 --> 00:33:34.319
write code because at least they're in control of it
692
00:33:34.400 --> 00:33:36.000
and they got no one to blame but themselves.
693
00:33:37.359 --> 00:33:40.319
Yeah, so for that, by the way, like you call
694
00:33:40.359 --> 00:33:42.240
out of a very important point, which is, how do
695
00:33:42.279 --> 00:33:44.119
you set up these kind of requirements that the LM
696
00:33:44.119 --> 00:33:45.759
does not go off the rails in terms of your
697
00:33:45.759 --> 00:33:49.559
technical requirements and would spec it introduced this concept of
698
00:33:50.200 --> 00:33:54.079
the constitution. It sounds very fancy or like the you know,
699
00:33:54.160 --> 00:33:56.279
call it the charter if you will, or the Karda
700
00:33:56.359 --> 00:34:00.799
if you're British. You know, basically outline, it's the fundamental
701
00:34:00.799 --> 00:34:05.359
guys exactly, like the non negotiable things that will absolutely
702
00:34:05.319 --> 00:34:07.039
apply to your project. And this is where we've seen
703
00:34:07.079 --> 00:34:09.639
a lot of successful people coming in and saying I
704
00:34:09.719 --> 00:34:12.079
will write my constitution and say you always use.
705
00:34:11.960 --> 00:34:12.719
Dot net nine.
706
00:34:13.239 --> 00:34:16.079
You never downgrade anything else like, And the Constitution is
707
00:34:16.119 --> 00:34:18.679
grounded in every part of the spec process so that
708
00:34:18.760 --> 00:34:21.360
when it goes through like the technical plan and task breakdown,
709
00:34:21.400 --> 00:34:23.480
it always has to go and check like, what does
710
00:34:23.480 --> 00:34:24.559
the Constitution say about us?
711
00:34:24.559 --> 00:34:24.719
Oh?
712
00:34:24.760 --> 00:34:27.320
Dot net nine? Oops, I put dot net eight. Okay,
713
00:34:27.400 --> 00:34:29.719
can't do that. That's a constitutional violation. I'm gonna go
714
00:34:29.719 --> 00:34:30.519
ahead and redo this.
715
00:34:30.639 --> 00:34:35.639
Get up copilot agent. I think the engine was or
716
00:34:35.719 --> 00:34:38.559
still is in written in dot net eight, and so
717
00:34:38.599 --> 00:34:41.719
it didn't have a dot net nine compiling environment, and
718
00:34:41.800 --> 00:34:45.840
so it would always go downgrade and think it was
719
00:34:45.880 --> 00:34:46.599
doing you a favor.
720
00:34:46.880 --> 00:34:49.599
Right, So theory that's a long training thatta has a
721
00:34:49.639 --> 00:34:52.400
lot of impact on this. That's the long term support version, right,
722
00:34:52.480 --> 00:34:57.559
So there's a case but still but still, but you know,
723
00:34:57.840 --> 00:34:59.920
the only have this great race of context, which is
724
00:35:00.199 --> 00:35:04.920
you know you're describing the Constitution is a prefix prompt, right,
725
00:35:05.039 --> 00:35:07.480
It's like before you do anything, these are the rules.
726
00:35:07.480 --> 00:35:09.960
So a bunch of our context is now consumed by
727
00:35:10.000 --> 00:35:12.599
the prefix yes and no. Then we have the sort
728
00:35:12.639 --> 00:35:15.559
of state of being of the project, and then the
729
00:35:15.800 --> 00:35:18.960
request for what to create I'll say, we do it
730
00:35:19.000 --> 00:35:22.639
a little bit even trickier than that. So the Constitution
731
00:35:22.760 --> 00:35:25.440
is embedded in other prompts where you can essentially say,
732
00:35:25.880 --> 00:35:28.880
if you're building a technical plan, consult the Constitution, and
733
00:35:28.920 --> 00:35:33.039
within the technical plan, create a checklist of constitutional checks
734
00:35:33.079 --> 00:35:34.880
you have to go through before you move forward.
735
00:35:35.280 --> 00:35:37.599
So instead of us embedding the Constitution, the Constitution itself
736
00:35:37.599 --> 00:35:41.239
can say like, oh, okay, this has to be a Net
737
00:35:41.320 --> 00:35:44.360
nine application, this has to be using this library to
738
00:35:44.360 --> 00:35:48.239
connect to Microsoft SQL server. And then when you get
739
00:35:48.239 --> 00:35:51.320
to the implementation stage, before you do an implementation, we
740
00:35:51.360 --> 00:35:54.079
also do a checklist of essentially saying can you cross
741
00:35:54.199 --> 00:35:58.000
check once more the Constitution against the plan, against the task,
742
00:35:58.039 --> 00:36:01.079
against the spec and see if there's any violations. So
743
00:36:01.119 --> 00:36:03.840
you're essentially creating almost unit tests for.
744
00:36:03.840 --> 00:36:05.440
English like that.
745
00:36:05.440 --> 00:36:07.639
That's kind of the framing seris Okay, let me, let
746
00:36:07.679 --> 00:36:09.280
me go and just cross check to make sure that
747
00:36:09.400 --> 00:36:13.039
nothing went off the rails, because too often people fall
748
00:36:13.079 --> 00:36:15.840
into this kind of habit of oh, I've done the spec,
749
00:36:15.880 --> 00:36:18.199
I've done the planet done and task great, go build
750
00:36:18.199 --> 00:36:21.519
this now. But that's like hold on, you still need
751
00:36:21.559 --> 00:36:24.599
to check that what it created actually matches the expectation requirements.
752
00:36:24.599 --> 00:36:26.280
So there's a bit of a process, right, And I
753
00:36:26.320 --> 00:36:27.760
think this is where I was talking about, Like this
754
00:36:27.840 --> 00:36:30.800
is the mental shift that you now have to think
755
00:36:30.840 --> 00:36:33.639
about those things that you did not before, because before
756
00:36:33.639 --> 00:36:35.480
you would just start writing code and be like, oh sure, yeah,
757
00:36:35.559 --> 00:36:37.360
let me bootstrap a dot A nine project and visual
758
00:36:37.400 --> 00:36:40.519
studio at my NuGet packages and be on my merryway.
759
00:36:41.079 --> 00:36:43.559
Here it's like now I need to basically like spell
760
00:36:43.599 --> 00:36:46.199
it out for it. For like, you have an over
761
00:36:46.280 --> 00:36:49.440
eager intern that is very very happy to help you
762
00:36:49.960 --> 00:36:51.639
but has no knowledge of what you're trying to do
763
00:36:51.679 --> 00:36:53.159
and just go like if you don't tell me, I'll
764
00:36:53.199 --> 00:36:55.719
just guess. And this is where you're trying to kind
765
00:36:55.719 --> 00:36:58.119
of like put guardrails and say like can I guide
766
00:36:58.159 --> 00:37:00.199
you to the right thing, to the exactly what I want?
767
00:37:00.280 --> 00:37:03.880
Reminds me of Scooter from Mondays. Mister Miller, shop it
768
00:37:03.960 --> 00:37:08.800
on your pencils, I'll shove you beginning. I didn't find
769
00:37:08.840 --> 00:37:11.079
him with pencils up with cranons in shopping to miss
770
00:37:11.119 --> 00:37:11.480
the Miller.
771
00:37:11.599 --> 00:37:18.079
It's exactly that. It's exactly that. Uh, Now, I gotta
772
00:37:18.119 --> 00:37:20.320
think there's some people listening. Is this even worth it? Then?
773
00:37:20.519 --> 00:37:23.039
Like all of this work to try and get this
774
00:37:23.119 --> 00:37:25.079
code generation to behave properly.
775
00:37:25.679 --> 00:37:28.000
I think it depends. I think I'll say like it
776
00:37:28.039 --> 00:37:30.800
depends right, like it's it's a I I. I'd like
777
00:37:30.880 --> 00:37:32.519
to think the analogy like if you know, if you
778
00:37:32.519 --> 00:37:34.639
have a hammer, everything looks like a nail. So it's
779
00:37:34.679 --> 00:37:35.800
like I don't want to say like you have to
780
00:37:35.880 --> 00:37:40.760
use this for everything, but there's certainly value in getting
781
00:37:40.880 --> 00:37:45.400
from zero to a new feature, to a new component,
782
00:37:45.679 --> 00:37:50.440
to a new entirely new product with this. Even if
783
00:37:50.559 --> 00:37:54.239
you use this essentially scaffold this, just just get the
784
00:37:54.280 --> 00:37:59.960
bulk of the things, get the four pieces of vail,
785
00:38:00.840 --> 00:38:03.119
and then you with your expertise can come in. It's
786
00:38:03.159 --> 00:38:05.000
like you want to go and rewrite this component, go
787
00:38:05.039 --> 00:38:06.440
ahead and do this, you want to add like a
788
00:38:06.480 --> 00:38:08.239
moon and go ahead to do this. But it saves
789
00:38:08.239 --> 00:38:12.519
like a lot of this tediousness. So also a lot
790
00:38:12.519 --> 00:38:15.000
of these models are getting better, Like Sonnet four to
791
00:38:15.039 --> 00:38:17.559
five got released last week, Like GPT five got released
792
00:38:17.599 --> 00:38:20.760
like it was like last month, and like GPT five
793
00:38:20.800 --> 00:38:24.360
compared to GPT four was like night and day when
794
00:38:24.360 --> 00:38:28.519
it comes to coding, right, which like who saw that coming?
795
00:38:28.800 --> 00:38:30.320
Right? But like they're getting better and better.
796
00:38:30.360 --> 00:38:32.840
And I totally see a world where a lot of
797
00:38:32.840 --> 00:38:36.599
these guardrails were just kind of become leaner and it's
798
00:38:36.639 --> 00:38:38.400
not going to be as heavyweight because.
799
00:38:38.199 --> 00:38:39.960
You're not going to bang into them as often.
800
00:38:39.960 --> 00:38:42.480
And yeah, exactly because a lot of the constraints that
801
00:38:42.480 --> 00:38:45.400
we talked about like they wear. The reason they're there
802
00:38:45.480 --> 00:38:48.480
is that they were inspired by Sonnet four being over eager.
803
00:38:48.639 --> 00:38:51.039
Right, Yeah, I know every law is written in blood, right,
804
00:38:51.119 --> 00:38:53.280
like right right, what we're seeing.
805
00:38:53.639 --> 00:38:56.440
But as they become better, a lot of these constraints
806
00:38:56.440 --> 00:38:58.119
will become more lax because like you can just tell
807
00:38:58.159 --> 00:39:00.280
it like it's always dotten at nine is like cool,
808
00:39:00.320 --> 00:39:02.519
I remember it's always done at nine, I'm never touching
809
00:39:02.559 --> 00:39:03.039
anything else.
810
00:39:03.119 --> 00:39:05.760
Yeah, it's just you don't bang against it as much. Yeah,
811
00:39:05.880 --> 00:39:10.119
I just think there's an interesting balancing act for you know,
812
00:39:10.159 --> 00:39:12.519
what really you're saying them is there's a case for waiting.
813
00:39:12.679 --> 00:39:14.559
There's a case for waiting and experimenting.
814
00:39:14.639 --> 00:39:16.440
If I wait, the tools will get better.
815
00:39:16.280 --> 00:39:18.480
And experimenting and seeing what works in a wood doesn't
816
00:39:18.480 --> 00:39:21.320
then because Spekeett itself is an experiment, right, like we are.
817
00:39:21.840 --> 00:39:25.119
We got into the world with the intent of can
818
00:39:25.199 --> 00:39:28.480
you help us verify where this works and where it doesn't. Yeah,
819
00:39:28.519 --> 00:39:31.280
and like we're not making any statements of saying like, oh, yeah,
820
00:39:31.320 --> 00:39:34.320
this is going to absolutely destroy the software engineering career
821
00:39:34.360 --> 00:39:35.760
track is the yeah I got to write the code
822
00:39:35.760 --> 00:39:38.440
for It's like, no, like I want you to test
823
00:39:38.480 --> 00:39:41.719
this and tell me. Yeah, I've tried adding a feature
824
00:39:41.760 --> 00:39:44.360
to my enterprise app and it just completely went off
825
00:39:44.360 --> 00:39:45.920
the rails and it was completely useless.
826
00:39:46.039 --> 00:39:47.559
Like that to me is like super helpful. You back,
827
00:39:47.599 --> 00:39:49.760
I'd love to know that. No. And I saw this
828
00:39:49.840 --> 00:39:54.719
in the early GitHub copilot days where people's behavior changed
829
00:39:54.800 --> 00:39:59.760
in the repository, where there was far more reverts yep. Yeah,
830
00:40:00.119 --> 00:40:01.760
like they would use the tool to generate some core,
831
00:40:01.920 --> 00:40:05.119
they push it up, it would blow up, they would revert. Yeah,
832
00:40:05.360 --> 00:40:07.320
And so you know, we I could definitely tell you
833
00:40:07.320 --> 00:40:09.360
were using the tool because you were using the toolimate
834
00:40:09.400 --> 00:40:11.639
the code and then you weren't really editing much, or
835
00:40:11.760 --> 00:40:13.159
you weren't doing a whole lot. You were just trying.
836
00:40:13.199 --> 00:40:15.679
You were stuffing into the test suite. See what happened,
837
00:40:15.719 --> 00:40:18.159
and what happened was bl you know what, I'm going.
838
00:40:18.079 --> 00:40:21.159
To close this issue and open it again.
839
00:40:22.280 --> 00:40:24.480
Yeah, you know we we can just make that branch
840
00:40:24.559 --> 00:40:26.559
go away again.
841
00:40:27.880 --> 00:40:29.760
And everybody else how we screwed this up.
842
00:40:30.239 --> 00:40:32.239
This was a forcing function for me to actually get
843
00:40:32.320 --> 00:40:36.559
much closer to get interesting, because once I started going
844
00:40:36.559 --> 00:40:38.599
through like the spectrum processes like okay, let me go
845
00:40:39.119 --> 00:40:40.840
create the spec, let me create the plan, let me
846
00:40:40.840 --> 00:40:43.920
break it down and task. Okay, this looks reasonable. Let
847
00:40:43.960 --> 00:40:46.400
me check the SIN. Okay, so now I have the check.
848
00:40:46.480 --> 00:40:48.880
Now let's start generating the code. It's like, okay, I
849
00:40:49.039 --> 00:40:51.199
don't even push. The code I just generated was like, okay,
850
00:40:51.239 --> 00:40:54.800
this component, Okay, now it looks right. Checkpoint check the SIN.
851
00:40:55.400 --> 00:40:58.239
Now continue generating. Oh now it's screwed up. Just blow
852
00:40:58.239 --> 00:40:59.719
it all away. Let's do it again.
853
00:41:00.199 --> 00:41:03.199
The code that worked in the previous build does work
854
00:41:03.280 --> 00:41:06.159
this next build. Yeah, exactly.
855
00:41:06.239 --> 00:41:10.360
But the geit process is super helpful in this context
856
00:41:10.400 --> 00:41:13.039
because it allows me to checkpoint things, and it's like,
857
00:41:13.719 --> 00:41:16.119
all of a sudden, get went from this like, oh yeah,
858
00:41:16.119 --> 00:41:18.519
I just use this toss things into gethub into an
859
00:41:18.559 --> 00:41:21.159
actual like oh, I can checkpoint things, and I can
860
00:41:21.199 --> 00:41:25.079
create multiple branches and multiple implementations across different branches and
861
00:41:25.159 --> 00:41:28.079
then test them separately. Oh I'm curious, what if this
862
00:41:28.199 --> 00:41:30.920
button would instead be this kind of component. Let me
863
00:41:30.920 --> 00:41:33.400
create a new branch and do this and test this right, So,
864
00:41:33.440 --> 00:41:37.440
like you, you go through the process of using get
865
00:41:37.519 --> 00:41:37.800
as an.
866
00:41:37.760 --> 00:41:40.840
Actual helper here, Yeah, no kidding, surprised. Can I go
867
00:41:40.920 --> 00:41:43.360
to the checkpoint code and point the LM at dot
868
00:41:43.440 --> 00:41:46.840
and said, this code works? Why is this changed? Or
869
00:41:47.039 --> 00:41:48.920
you're going to make changes? Make sure it passes the
870
00:41:48.920 --> 00:41:54.719
same test, so you can use your validation skills against
871
00:41:54.760 --> 00:41:57.920
the various pieces of code with these checkpoints and force
872
00:41:58.039 --> 00:42:00.840
the tool down about right, let.
873
00:42:00.760 --> 00:42:02.920
Me change GET testing tests?
874
00:42:03.079 --> 00:42:04.400
Do I just change the tests?
875
00:42:06.000 --> 00:42:08.599
This is like see the lesson for future software engineers
876
00:42:08.599 --> 00:42:10.239
listening to this learn GET.
877
00:42:10.880 --> 00:42:13.480
Yeah, that's like that's gonna be your your your savior.
878
00:42:13.719 --> 00:42:13.960
GET.
879
00:42:14.039 --> 00:42:15.760
This is a tool that will help you. Yeah, but
880
00:42:16.000 --> 00:42:18.360
you know and now you're you're helping me shape my
881
00:42:18.440 --> 00:42:21.800
mind on the how different our work looks like and
882
00:42:21.880 --> 00:42:23.639
the tools that are actually going to help us to
883
00:42:24.079 --> 00:42:27.000
get there. And again with always designed to am I
884
00:42:27.079 --> 00:42:30.679
better off? Is as better results? I've definitely talked to
885
00:42:30.719 --> 00:42:33.039
folks here, So I'm being successful as a tool, but
886
00:42:33.079 --> 00:42:36.239
I'm not having as much fun, right, Yeah, yeah, I can.
887
00:42:36.360 --> 00:42:38.599
I can see this and I think there's a something
888
00:42:38.599 --> 00:42:41.400
to be said about the fact that coding and self
889
00:42:41.519 --> 00:42:44.159
engineering in and of itself is a creative process, right,
890
00:42:44.719 --> 00:42:46.960
Like you're you're sitting down, like, let me think through
891
00:42:47.000 --> 00:42:49.199
this problem, let me figure out how to this. But
892
00:42:49.239 --> 00:42:51.800
also there's no denying that there's like, at least for me,
893
00:42:51.880 --> 00:42:53.400
I know for a fact, that there's a lot of
894
00:42:53.800 --> 00:42:56.480
tedious tasks like oh my goodness, like I just do
895
00:42:56.559 --> 00:42:59.639
not want to deal with this, like writing us like okay,
896
00:42:59.679 --> 00:43:01.159
you need to write one hundred unit test for all
897
00:43:01.199 --> 00:43:04.159
these components, Like oh, like, can I can just somebody
898
00:43:04.159 --> 00:43:05.960
write these for me so I can actually focus on
899
00:43:06.000 --> 00:43:06.679
the components.
900
00:43:07.079 --> 00:43:09.559
One hundred percent coverage is so much more approachable when
901
00:43:09.559 --> 00:43:12.920
you got a tool generating the test solely. Man, Yeah,
902
00:43:13.000 --> 00:43:16.440
what'd you call me? So?
903
00:43:17.199 --> 00:43:21.599
Yeah, it's almost like you know these people who get
904
00:43:21.599 --> 00:43:24.639
their dopamine rush from just a clean compile, right, you know,
905
00:43:25.320 --> 00:43:27.320
you know, I just want to write this feature compiles.
906
00:43:27.320 --> 00:43:29.360
All right, it's good, but I get my dopamine rush
907
00:43:29.440 --> 00:43:32.280
on those weekly meetings where I show the boss what
908
00:43:32.320 --> 00:43:35.519
I've done and it works and everything's good. Yes, that's
909
00:43:35.800 --> 00:43:38.960
I'm holding off for the for my endorphins. To kick
910
00:43:39.000 --> 00:43:41.719
in at that moment. It's delayed gratification.
911
00:43:41.800 --> 00:43:42.679
I think that's that's there.
912
00:43:42.800 --> 00:43:45.840
There's value in that in the sense that we often
913
00:43:45.880 --> 00:43:51.280
can forget what this is in service of, right, Like
914
00:43:51.599 --> 00:43:54.280
you're like looking at me, like the stuff that the
915
00:43:54.320 --> 00:43:55.639
code that I write is in service I.
916
00:43:55.599 --> 00:43:58.360
Want to solve a specific customer problem. Yeah, this is
917
00:43:58.400 --> 00:44:00.960
our whole VB conversation at the of it. Yeah, no,
918
00:44:01.039 --> 00:44:03.840
it wasn't as cool as C plus plus, but boy
919
00:44:03.880 --> 00:44:07.360
is sure did bring solutions to customers faster. Exactly if
920
00:44:07.400 --> 00:44:10.880
this can bring solutions to customers faster, Okay, and how
921
00:44:10.880 --> 00:44:12.840
many of your customers did care that, Like, oh you
922
00:44:12.840 --> 00:44:16.519
didn't write this in C plus plus ooh, well, as
923
00:44:16.519 --> 00:44:19.320
long as it doesn't look like AI slop, right, this
924
00:44:19.360 --> 00:44:22.760
is come down to it. If it's triggering people the
925
00:44:22.840 --> 00:44:25.800
way that AI slop triggers people, then you're not succeeding.
926
00:44:26.199 --> 00:44:27.639
Just say no to AI slope.
927
00:44:27.800 --> 00:44:28.079
There you go.
928
00:44:28.639 --> 00:44:31.480
Yeah, demand quality from these tools. But I'm also you
929
00:44:31.480 --> 00:44:32.920
said this a while ago, and I should have grabbed
930
00:44:32.960 --> 00:44:35.519
onto this earlier down if this thing gets me eighty
931
00:44:35.519 --> 00:44:37.960
percent of the way by dealing with all the scot
932
00:44:38.000 --> 00:44:39.880
work so that I now have to just work on
933
00:44:39.920 --> 00:44:43.159
the twenty, which is arguably the coolest code and the
934
00:44:43.199 --> 00:44:45.679
most important in the project. You did me a favor,
935
00:44:45.760 --> 00:44:47.760
There's no two ways about that. Yeah. You know, if
936
00:44:47.760 --> 00:44:50.840
we could just Prato's law this and get that eighty
937
00:44:50.880 --> 00:44:53.000
out so that we can work on the hard stuff,
938
00:44:53.000 --> 00:44:54.960
we've definitely saved time provided value.
939
00:44:55.039 --> 00:44:57.400
I think that's the goal. Hard stuff is more fun anyway, Yeah,
940
00:44:57.400 --> 00:44:58.039
that's the more fun.
941
00:44:58.239 --> 00:45:01.400
Yeah. Yeah, well it's plus you're going to fight with
942
00:45:01.519 --> 00:45:04.760
the spec and the tokens to get those last few
943
00:45:04.800 --> 00:45:08.039
points so hard it's probably not worth it. Like there's
944
00:45:08.079 --> 00:45:10.679
going to be a point of diminishing returns on this, yeah,
945
00:45:11.000 --> 00:45:12.719
at some point. And I'll say, like, it's also the
946
00:45:15.079 --> 00:45:18.000
mental shift of you thinking ahead of these problems and
947
00:45:18.159 --> 00:45:22.159
having an actual artifact and being more crisp with your
948
00:45:22.199 --> 00:45:25.119
thoughts and more crisp with how the rubber dying effect
949
00:45:25.119 --> 00:45:25.679
here is huge.
950
00:45:25.760 --> 00:45:28.840
Yes, exactly is going to help you down the line
951
00:45:28.880 --> 00:45:31.320
to just create better stuffware, just but just by proxy
952
00:45:31.880 --> 00:45:34.960
of you being able to think about it more and
953
00:45:35.079 --> 00:45:37.199
understand how does this actually work?
954
00:45:37.400 --> 00:45:38.800
Why is it the way that it is?
955
00:45:39.519 --> 00:45:41.000
What are the things that I should be thinking of
956
00:45:41.039 --> 00:45:43.480
that I'm not thinking about You know, we saw this
957
00:45:43.519 --> 00:45:47.280
happen in offshoring when when it got easier to offshore
958
00:45:47.400 --> 00:45:50.440
to low cost markets and you didn't get good results,
959
00:45:50.440 --> 00:45:52.559
and you learned to write better and better specifications and
960
00:45:52.559 --> 00:45:55.960
better and better project plans so that you were successful
961
00:45:56.000 --> 00:45:57.119
with the offshore developers.
962
00:45:57.119 --> 00:45:58.880
It turned out if you took those things on shore,
963
00:45:58.960 --> 00:46:02.079
you got more success to Yeah, shocker, right, Like.
964
00:46:05.639 --> 00:46:08.719
If you're better and specifying your requirements, you get better outputs.
965
00:46:08.840 --> 00:46:12.400
Wow, there is a reality check to this whole thing.
966
00:46:12.440 --> 00:46:16.880
But I really appreciate the idea of don't try. You're
967
00:46:16.880 --> 00:46:18.719
getting one hundred pcent is probably not worth it that
968
00:46:18.960 --> 00:46:21.199
getting And once you get into the eighties, you've had
969
00:46:21.199 --> 00:46:23.119
a win and now you can go do the rest.
970
00:46:23.400 --> 00:46:25.400
Here's the other thing, you know, because my instinct, I'm
971
00:46:25.440 --> 00:46:28.559
going back to code generation responses in the language you've used. Now,
972
00:46:28.559 --> 00:46:30.280
I feel like I'm dealing with the code generator, which
973
00:46:30.360 --> 00:46:33.280
clearly I am. As soon as I touch that code,
974
00:46:33.280 --> 00:46:35.519
I can't touch the code generator again. But that's not
975
00:46:35.639 --> 00:46:39.960
true than l L. No, You're you're collaborating again. You
976
00:46:40.159 --> 00:46:43.199
have an intern in your hands. M hmm. You're working
977
00:46:43.199 --> 00:46:45.760
together to write the code. Yeah, I'm you're going to
978
00:46:45.800 --> 00:46:48.639
resist the anthropomorphic terms there dem like I have a
979
00:46:48.639 --> 00:46:50.840
piece of software that's fair, that's fair.
980
00:46:50.920 --> 00:46:52.760
Yeah, but it sooner or later you're going to have
981
00:46:52.840 --> 00:46:56.360
to agree that the world wants to anthropomorphize these things.
982
00:46:56.400 --> 00:47:00.559
And I know the world wants it. It's just wrong.
983
00:47:01.000 --> 00:47:02.639
It's absolutely fair.
984
00:47:02.679 --> 00:47:04.960
Actually, Like I I can get totally behind that idea,
985
00:47:05.000 --> 00:47:07.880
like we should not entermorphize the AI because like, it's
986
00:47:07.960 --> 00:47:09.599
just an algorithm, it's a computer background.
987
00:47:09.599 --> 00:47:12.480
But it makes it easier for us to understand it
988
00:47:12.639 --> 00:47:15.800
when we put it in human terms, right if when
989
00:47:15.840 --> 00:47:16.280
we I.
990
00:47:16.199 --> 00:47:19.039
Think it makes it easier if a story execuse it inappropriately.
991
00:47:19.440 --> 00:47:21.880
Yes, yes, that I think it's like it gives it
992
00:47:21.920 --> 00:47:23.519
gives us the way of saying like, oh, it's like
993
00:47:23.599 --> 00:47:25.480
it's just it's just like a humans, Like, no, it's
994
00:47:25.480 --> 00:47:26.000
not like a human.
995
00:47:26.079 --> 00:47:27.079
It's not at all like a human.
996
00:47:27.159 --> 00:47:30.000
Right, But if I was going to say what was
997
00:47:30.039 --> 00:47:34.440
it thinking rather than well, what algorithmic sequences brought.
998
00:47:34.199 --> 00:47:36.960
It to the result that it did? Now true?
999
00:47:37.159 --> 00:47:40.880
Which would you rather let me ask you? Right, No, it's.
1000
00:47:40.719 --> 00:47:41.679
True, it's true.
1001
00:47:41.679 --> 00:47:43.920
I think there's there's a kind of shades of grade
1002
00:47:43.960 --> 00:47:47.719
of this it's like where it lands. But I generally
1003
00:47:47.880 --> 00:47:50.239
feel like, yeah, may're they're they're not humans.
1004
00:47:50.639 --> 00:47:53.480
So they're not they're not. We do have to remember that,
1005
00:47:53.760 --> 00:47:57.440
and so they don't have responsibility. They don't you.
1006
00:47:57.360 --> 00:48:00.760
Know, they're not accountable right right, or like if it
1007
00:48:00.800 --> 00:48:03.400
produces your like right, like we as software engineers, we
1008
00:48:03.400 --> 00:48:06.039
all know things like the the RAQ twenty five, right,
1009
00:48:06.039 --> 00:48:09.559
like the incident about the X ray machine. Remind us,
1010
00:48:10.199 --> 00:48:12.719
So there's an incident about with an X ray machine
1011
00:48:12.800 --> 00:48:15.920
where because of a software bug and no hardware interlock,
1012
00:48:16.519 --> 00:48:21.960
it would actually, uh for cancer patients would have basically
1013
00:48:22.039 --> 00:48:25.880
like deadly doses of radiation in under very certain conditions.
1014
00:48:25.920 --> 00:48:28.280
I think this happened like in the eighties. It's litical.
1015
00:48:28.360 --> 00:48:31.159
I think it's like the RAC twenty five. And so
1016
00:48:31.480 --> 00:48:33.679
the idea there is like, right, like, if if you
1017
00:48:33.760 --> 00:48:38.280
have an LM right software that does something dangerous like this,
1018
00:48:39.440 --> 00:48:40.559
who's accountable for that?
1019
00:48:40.760 --> 00:48:43.519
Yeah? Right right? It's not the AI, like you can't
1020
00:48:43.599 --> 00:48:45.800
it isn't. It isn't the equipment yea, yeah.
1021
00:48:45.760 --> 00:48:48.880
It's like, it's not the equipment, it's whoever pushed that software.
1022
00:48:48.920 --> 00:48:51.519
It's the software developer, just like with any other scenario right,
1023
00:48:51.559 --> 00:48:53.679
So to me, it's like, I think it's AI. Is
1024
00:48:53.719 --> 00:48:58.440
that it's it's INTELLISENTI and steroids. Was that Is that
1025
00:48:58.480 --> 00:49:01.039
a good frame to put it here? Like, yeah, that's
1026
00:49:01.079 --> 00:49:01.599
that's good.
1027
00:49:01.760 --> 00:49:04.320
I mean, because we don't answer promorphize and tell a sense,
1028
00:49:04.360 --> 00:49:04.599
do we?
1029
00:49:04.719 --> 00:49:06.840
You try not to? Well, well, you could, says I
1030
00:49:06.880 --> 00:49:10.639
mean the number of times I'm cursing a visual studio.
1031
00:49:10.920 --> 00:49:14.039
What is it thinking?
1032
00:49:14.360 --> 00:49:18.599
What were you thinking? Right?
1033
00:49:18.639 --> 00:49:21.519
But yeah, so I think it's like long story, longer
1034
00:49:21.559 --> 00:49:23.519
to what we talked about. I think that's a definitely
1035
00:49:23.519 --> 00:49:25.639
a mental shift. It's definitely one of those things where
1036
00:49:26.039 --> 00:49:32.239
you you have to treat it essentially as an assistant
1037
00:49:32.320 --> 00:49:37.000
program that allows you to write code faster, but it's
1038
00:49:37.000 --> 00:49:39.360
still up to you to make sure that you you
1039
00:49:39.559 --> 00:49:42.280
review this and you have input, and you can look
1040
00:49:42.320 --> 00:49:45.559
and say this is garbage, that's not what I asked,
1041
00:49:46.039 --> 00:49:47.960
or this test just returns true.
1042
00:49:48.000 --> 00:49:49.159
That's not how you pass a.
1043
00:49:49.119 --> 00:49:52.039
Test like this are supposed to work, right, So you
1044
00:49:52.199 --> 00:49:54.760
your expertise is still valuable. And I think that that's
1045
00:49:54.760 --> 00:49:56.960
what also gets lost in the conversation because folks get
1046
00:49:57.000 --> 00:49:57.519
so excited.
1047
00:49:57.639 --> 00:49:59.360
I'm just I'm trying to de sex you this not
1048
00:49:59.440 --> 00:50:01.119
out of this down this idea that I have a
1049
00:50:01.159 --> 00:50:04.840
re entrant code generator. Yeah, that makes me very happy
1050
00:50:04.880 --> 00:50:06.480
because that's something we haven't able to do before. It
1051
00:50:06.559 --> 00:50:08.760
used to be when you use code generators. Once you
1052
00:50:08.800 --> 00:50:11.239
touch that one way, I never run the generator again. Yeah. Now,
1053
00:50:11.320 --> 00:50:13.920
the idea that I could stick this code generator back
1054
00:50:13.920 --> 00:50:16.119
at the code that i've also that it contributed to
1055
00:50:16.199 --> 00:50:19.719
and I modified and do another iteration, that's a big deal.
1056
00:50:19.800 --> 00:50:21.280
Like this is it's pretty cool.
1057
00:50:21.800 --> 00:50:24.280
Yeah, yeah, exactly because I can come in for a
1058
00:50:24.320 --> 00:50:29.079
specific component and say, okay, this chunk here doesn't quite
1059
00:50:29.159 --> 00:50:31.519
look right. And what I will seen people do, and
1060
00:50:31.559 --> 00:50:33.760
I think this is a super valuable thing, is once
1061
00:50:33.800 --> 00:50:36.960
you started going through the motions of okay, I saw
1062
00:50:37.000 --> 00:50:39.000
where it failed. I saw that it did not create
1063
00:50:39.000 --> 00:50:41.559
this component the way that I wanted. Based on the
1064
00:50:41.559 --> 00:50:44.000
conversation that you had in code that back into the
1065
00:50:44.000 --> 00:50:46.840
spec right and say okay, now that we know this,
1066
00:50:46.920 --> 00:50:48.800
can you put them back in the spectrum technical plan?
1067
00:50:48.920 --> 00:50:51.320
So that way, again, if I come in down the
1068
00:50:51.320 --> 00:50:52.880
line and say, hey, we're going to take on a
1069
00:50:53.079 --> 00:50:57.079
rewrite of the system, can I recreate the behavior that
1070
00:50:57.159 --> 00:50:59.079
I had based on the learnings that I had and
1071
00:50:59.079 --> 00:51:01.760
the iteration that I had in this new format. And
1072
00:51:01.800 --> 00:51:03.280
this is where the speck comes in, because then you
1073
00:51:03.320 --> 00:51:05.400
can say, oh, yeah, totally, I've encoded.
1074
00:51:05.039 --> 00:51:07.440
All the larynx. This is also things that we hated
1075
00:51:07.519 --> 00:51:10.400
doing as developers. Right, It's like, Yo, the spec is wrong,
1076
00:51:10.440 --> 00:51:12.159
but nobody's actually gonna go fix the spec.
1077
00:51:12.199 --> 00:51:15.519
But now oh no, zero people. Now you have a
1078
00:51:15.559 --> 00:51:18.760
tool that you can demand it fix the spec. Yeah, exactly,
1079
00:51:18.800 --> 00:51:20.639
Just do yourself a favor and make sure you check
1080
00:51:20.679 --> 00:51:22.880
it in again. I really appreciate your thinking it will
1081
00:51:22.920 --> 00:51:24.599
save you because it'll mangle your spec.
1082
00:51:24.679 --> 00:51:26.480
Mm hmmmmmmm hmm. Yeah.
1083
00:51:26.639 --> 00:51:28.320
I mean, and you're absolutely right in the sense like
1084
00:51:28.559 --> 00:51:30.639
when I remember, like when I started my career as
1085
00:51:30.679 --> 00:51:34.400
a product manager at Microsoft, you'd write a spec, you'd
1086
00:51:34.480 --> 00:51:37.360
review it on a bunch of meetings, and then once
1087
00:51:37.400 --> 00:51:40.519
a dev the moment the code on the starboard.
1088
00:51:40.480 --> 00:51:41.760
Nobody ever touches that over.
1089
00:51:42.360 --> 00:51:44.840
It's like and then even if you realize like, oh yeah,
1090
00:51:44.880 --> 00:51:47.559
we forgot about like mentioning this, Hey dev, can you
1091
00:51:47.599 --> 00:51:49.679
go fix this thing? Because we had this idea and
1092
00:51:49.679 --> 00:51:51.360
they're like, oh sure, yeah, let's go change it. Like
1093
00:51:51.519 --> 00:51:54.159
nobody goes to the doc and then six months later
1094
00:51:54.199 --> 00:51:55.920
when you look at the doc and be like, product
1095
00:51:55.960 --> 00:51:56.840
doesn't work this way.
1096
00:51:57.079 --> 00:52:00.320
Well, this is how no new people can into the
1097
00:52:00.320 --> 00:52:01.760
project as they start with the document.
1098
00:52:01.800 --> 00:52:04.880
It's wrong exactly, and you and all those documents are
1099
00:52:04.920 --> 00:52:06.280
wrong and they're all all out of date.
1100
00:52:06.360 --> 00:52:08.320
We're trying to avoid that. All right, let's get weirder.
1101
00:52:08.400 --> 00:52:10.880
Let's start taking after we finished making the code. Then
1102
00:52:10.920 --> 00:52:13.639
you demand another tool generate a specification from the code
1103
00:52:13.639 --> 00:52:15.559
you can see and compare against it.
1104
00:52:16.079 --> 00:52:18.719
That's actually a thing, you know, and you know what.
1105
00:52:18.960 --> 00:52:21.000
Where this is super helpful what we refer to as
1106
00:52:21.039 --> 00:52:25.000
brownfield projects because where a lot of the spectrum of
1107
00:52:25.039 --> 00:52:27.880
development stuff kind of falls over a lot of scenarios.
1108
00:52:27.920 --> 00:52:30.800
Is all this is optimized for net new Like I'm
1109
00:52:30.840 --> 00:52:33.280
starting from zero to one, I have nothing, Go get
1110
00:52:33.320 --> 00:52:36.159
me something. But what if I already have a code
1111
00:52:36.159 --> 00:52:39.079
base that is which, let's face it, mostly we do
1112
00:52:39.239 --> 00:52:42.440
tens of thousands of Yeah, there's like can you do this?
1113
00:52:42.599 --> 00:52:44.880
And this is where that reverse process is super helpful.
1114
00:52:44.960 --> 00:52:46.920
Like I want you to write me a spec based
1115
00:52:46.960 --> 00:52:50.480
on how my authorization library is working, and it's like, okay,
1116
00:52:50.519 --> 00:52:52.000
let me go and look at the library that create this,
1117
00:52:52.039 --> 00:52:53.960
and they're like, Okay, now that we have this context,
1118
00:52:54.400 --> 00:52:57.320
can we now add a feature that changes how my
1119
00:52:57.440 --> 00:53:00.000
oft flow works context it's all about content.
1120
00:53:00.280 --> 00:53:02.199
Sure, No, this is a whole there's a whole other
1121
00:53:02.280 --> 00:53:05.559
show here about Brownfield with lllms mm hmm. Just see
1122
00:53:05.639 --> 00:53:08.719
I you know, because it's a great problem space. Right.
1123
00:53:08.800 --> 00:53:10.880
Let's say so we have a ton of applications inside
1124
00:53:10.880 --> 00:53:13.960
of organizations where the original dev team's long gone. Oddly enough,
1125
00:53:14.159 --> 00:53:19.079
the spec is incorrect, but we need new features. Yeah,
1126
00:53:19.119 --> 00:53:21.159
and you have a new team that's trying to take
1127
00:53:21.159 --> 00:53:22.719
that code on. So the idea that you could point
1128
00:53:22.719 --> 00:53:26.639
in ll at it first to generate a correct specification
1129
00:53:26.880 --> 00:53:29.760
in theory, like, you need to validate that. So I
1130
00:53:29.880 --> 00:53:31.880
probably want to iterate on that a few times and
1131
00:53:31.920 --> 00:53:34.880
then start to build a plan around how you would
1132
00:53:34.880 --> 00:53:35.840
make the change you want.
1133
00:53:35.920 --> 00:53:39.880
Well, you could certainly build real documentation of your product
1134
00:53:40.239 --> 00:53:44.199
by just sicken clawed copilot agent or whatever on it
1135
00:53:44.559 --> 00:53:47.800
and it'll do that. I've done it with Jeff Fritz
1136
00:53:47.880 --> 00:53:51.280
encoded with AI episode one and it created a pretty
1137
00:53:51.280 --> 00:53:54.679
good user manual. So I know that's not a spec
1138
00:53:54.719 --> 00:53:57.960
that's not an internal spec but it certainly is of
1139
00:53:58.000 --> 00:54:00.719
that same idea that you take something that it already
1140
00:54:00.800 --> 00:54:03.679
exists and then generate some documentation around it.
1141
00:54:04.400 --> 00:54:06.840
Have you guys heard of this project called deep wiki
1142
00:54:07.079 --> 00:54:11.400
deep wiki, deep wiki, deep wiki that sounds familiar to me.
1143
00:54:11.599 --> 00:54:13.159
So has it been around a long time?
1144
00:54:13.559 --> 00:54:16.280
No, it hasn't, but it's from the I believe it's
1145
00:54:16.280 --> 00:54:18.480
some of the same people that wrote Devin, like the
1146
00:54:18.519 --> 00:54:22.199
Coding Agent. So deep wiki is this place where you
1147
00:54:22.199 --> 00:54:26.320
can actually come in. It's a documentation generator. Basically, it's
1148
00:54:26.320 --> 00:54:28.840
an AI based documentation generator. You can come in and
1149
00:54:28.880 --> 00:54:32.159
you can look at different repositories that already been documented
1150
00:54:32.679 --> 00:54:34.440
or maybe even add your own, but you can just
1151
00:54:34.480 --> 00:54:37.079
plug in the URL and then it's going to generate
1152
00:54:37.119 --> 00:54:40.400
the docs. And to me, the fascinating part about this
1153
00:54:40.519 --> 00:54:44.079
is just how freaking good it is at looking at
1154
00:54:44.079 --> 00:54:47.199
the code base and like, oh vs code. Sure, let
1155
00:54:47.199 --> 00:54:50.119
me look at the architecture and here's a renderer process,
1156
00:54:50.159 --> 00:54:52.239
here's the main process, here's the extension host process. How
1157
00:54:52.239 --> 00:54:54.239
they interact with each other's like none of this stuff
1158
00:54:54.280 --> 00:54:58.239
is actually like encoded in some like there's a viscode
1159
00:54:58.280 --> 00:55:00.360
architecture doc but like it infers it for the code,
1160
00:55:00.360 --> 00:55:01.960
it points you to the lines of code, it generates
1161
00:55:02.000 --> 00:55:05.920
mermaid charts, like it's a fascinating project. It's a deepwiki
1162
00:55:05.960 --> 00:55:06.599
dot com.
1163
00:55:06.840 --> 00:55:10.519
Does it use playwright to get screen captures of the
1164
00:55:10.559 --> 00:55:11.639
application running?
1165
00:55:12.239 --> 00:55:16.960
You can plug it in with any MCP servers, including Playwright.
1166
00:55:17.280 --> 00:55:21.480
So that's what we did with with Visual Studio code
1167
00:55:21.519 --> 00:55:23.960
and the agent. We told it to use the Playwright
1168
00:55:24.079 --> 00:55:26.760
MCP to run the app and actually take screenshots and
1169
00:55:26.800 --> 00:55:29.440
put it in the documentation, which is very, very helpful.
1170
00:55:29.800 --> 00:55:30.039
Yeah.
1171
00:55:30.599 --> 00:55:33.639
Yeah, Playwright MCP is one of my favorite tools hands down.
1172
00:55:33.719 --> 00:55:33.880
Yeah.
1173
00:55:33.880 --> 00:55:37.079
That's unbelievable, is just how good it is about both testing,
1174
00:55:37.199 --> 00:55:42.079
providing screenshots and actually one of the validation steps that
1175
00:55:42.079 --> 00:55:44.199
I've experimented for spect driven by the way it's like
1176
00:55:44.199 --> 00:55:47.039
when it creates the UI, it uses player MCP to
1177
00:55:47.079 --> 00:55:49.840
go and say, are there any components that overlap with
1178
00:55:49.920 --> 00:55:53.000
each other or the UI is funky? And then if not,
1179
00:55:53.280 --> 00:55:54.159
go and fix it.
1180
00:55:54.239 --> 00:55:54.880
That's so cool.
1181
00:55:55.000 --> 00:55:55.199
Wow.
1182
00:55:55.320 --> 00:55:58.000
Right, So you're wiring these things together and we're back
1183
00:55:58.000 --> 00:55:59.639
to the whole idea of like what's the role to
1184
00:55:59.679 --> 00:56:02.639
develop in this? And this is like you are now
1185
00:56:02.679 --> 00:56:07.679
the orchestrator of this fleet of software agents that do
1186
00:56:07.840 --> 00:56:10.239
things for you? How do you make sure that app?
1187
00:56:10.320 --> 00:56:13.159
Yeah? And you see, like I think about the large
1188
00:56:13.159 --> 00:56:15.760
scale problems inside of big organizations right now. It's like
1189
00:56:15.800 --> 00:56:18.119
they got a ton of asp down web form apps
1190
00:56:18.159 --> 00:56:20.679
out there. Nobody wants to work on them anymore. Yeah,
1191
00:56:20.719 --> 00:56:23.079
of course they Everybody wants a mobile client for a
1192
00:56:23.119 --> 00:56:27.320
bunch of them, which is almost impossible, and rewriting them
1193
00:56:27.360 --> 00:56:29.559
takes time and money. Yeah, And so the idea that
1194
00:56:29.599 --> 00:56:33.199
I could fire up these llms use stuff like playwright
1195
00:56:33.280 --> 00:56:35.960
to screenshot the whole app and then fire it through
1196
00:56:36.000 --> 00:56:38.360
a generator to make it other version of the app.
1197
00:56:38.400 --> 00:56:41.599
Now me, my twisted mind, what's my automatic reaction? It's like,
1198
00:56:41.639 --> 00:56:44.159
let's make photocopies of photocopies. So I'm going to take
1199
00:56:44.199 --> 00:56:45.800
this app, I'm going to generate a spec. Then I'm
1200
00:56:45.800 --> 00:56:47.639
going to generate an app from the spec. Then I'm
1201
00:56:47.639 --> 00:56:49.880
going to generate a spec from that version of the app.
1202
00:56:50.039 --> 00:56:51.760
I don't see where we get to, because I bet
1203
00:56:51.840 --> 00:56:54.960
you're going to hit a floor, yeah, of functionality at
1204
00:56:54.960 --> 00:56:59.039
some point right where, because the compiler always has a say,
1205
00:56:59.280 --> 00:57:02.239
because the app ultimately has a set of core functionality.
1206
00:57:02.320 --> 00:57:04.119
Like I wonder if you'd end up with the most
1207
00:57:04.159 --> 00:57:05.960
distilled version of an app if you did a bunch
1208
00:57:05.960 --> 00:57:08.199
of iterations like that. Probably probably right.
1209
00:57:08.239 --> 00:57:11.480
But also like we know that software there's more to
1210
00:57:11.519 --> 00:57:14.400
building software than just carbon copy of things. Yes, right,
1211
00:57:14.440 --> 00:57:17.239
And this is where like I see people posting on
1212
00:57:17.679 --> 00:57:19.599
social media as like, oh, with the help of LM,
1213
00:57:19.840 --> 00:57:24.199
I recreated docuside in three days. It's like, well, sure,
1214
00:57:24.199 --> 00:57:27.119
pretty sure you didn't like yeah, but like it's you
1215
00:57:27.159 --> 00:57:29.800
got to realize that there's more docusine than like just
1216
00:57:29.880 --> 00:57:33.599
the uy of docusine, right, And that's part of it,
1217
00:57:33.639 --> 00:57:35.159
is like we're really starting to just still into what
1218
00:57:35.280 --> 00:57:37.119
are the important bits of software and what's the thing
1219
00:57:37.159 --> 00:57:39.519
that should have our primary attention.
1220
00:57:39.920 --> 00:57:45.599
Didn't some guy just recently tell uh and chat gipt
1221
00:57:45.760 --> 00:57:53.119
or whatever to rebuild and recreate Kubernetes anthropic. It was anthropic,
1222
00:57:53.159 --> 00:57:56.800
He said, rebuild me Kubernetes in Rust or something like that.
1223
00:57:57.519 --> 00:58:02.280
And it's spent so many tokens that it costs anthropic
1224
00:58:02.360 --> 00:58:06.079
four hundred thousand dollars and he only paid his two
1225
00:58:06.199 --> 00:58:07.360
hundred dollars for the month.
1226
00:58:07.840 --> 00:58:12.079
Yeah, but the question is did it did it recreate Kubernetes.
1227
00:58:12.239 --> 00:58:14.920
Well, it spent four hundred thousand dollars worth of token.
1228
00:58:14.679 --> 00:58:18.840
So it did something maybe nothing, that's in the end.
1229
00:58:18.880 --> 00:58:20.679
What did that four hundred thousand dollars do but heat
1230
00:58:20.719 --> 00:58:23.840
up a bunch of rocks? Yeah right, Yeah, the sand
1231
00:58:24.000 --> 00:58:29.840
is working hard. Yes, made the rocks warm today.
1232
00:58:31.400 --> 00:58:34.159
But I was genuinely curious, Like Carl, you were so
1233
00:58:34.199 --> 00:58:36.159
excited about it, and I was like, but did it
1234
00:58:36.199 --> 00:58:39.280
actually work? It's like that that that meme about like
1235
00:58:39.320 --> 00:58:42.400
I rewrote my app in like one day, this massive
1236
00:58:42.480 --> 00:58:44.679
enterprise scale things, like none of it worked, but did
1237
00:58:44.760 --> 00:58:45.599
sure look pretty?
1238
00:58:45.760 --> 00:58:49.440
Yeah? It was just another version of AI slop. But
1239
00:58:49.519 --> 00:58:51.320
you know, now you're pressing us the next issue here,
1240
00:58:51.400 --> 00:58:55.039
which is is this cost effective in the end, Like
1241
00:58:55.079 --> 00:58:58.119
when we eventually have to pay the real costs because
1242
00:58:58.480 --> 00:59:01.360
we know we're not so far. I mean we actually
1243
00:59:01.400 --> 00:59:03.079
have to pay the real cost for the compute, for
1244
00:59:03.119 --> 00:59:05.199
the tokens and so forth. Like now we're gonna have
1245
00:59:05.199 --> 00:59:06.880
another layer on running this tool where it's going to
1246
00:59:06.920 --> 00:59:09.320
now assess the token. Let's do an estimate before we
1247
00:59:09.400 --> 00:59:12.239
run this. You know, no different than I do when
1248
00:59:12.239 --> 00:59:15.760
I start provisioning apps into Azure we understand how much
1249
00:59:15.800 --> 00:59:17.760
infrastructure we need to run, and I can throw at
1250
00:59:17.760 --> 00:59:19.840
the CFO it's going to be this much a month. Yeah,
1251
00:59:20.079 --> 00:59:22.239
you know, to operate this like that. Those are the
1252
00:59:22.239 --> 00:59:23.719
trade offs are going to make, for sure, and it
1253
00:59:23.760 --> 00:59:27.239
will get more efficient to a degree that these are
1254
00:59:27.320 --> 00:59:28.960
going to be the trades, Yeah, for sure.
1255
00:59:29.039 --> 00:59:32.920
And I see a world too where we can use them,
1256
00:59:32.920 --> 00:59:36.000
maybe even a combination of things of what is actually
1257
00:59:37.880 --> 00:59:40.280
net new stuff that needs to be delegated to a
1258
00:59:40.320 --> 00:59:43.280
powerful generalized model versus something that can run locally on
1259
00:59:43.360 --> 00:59:45.599
my machine. Call right, It's like, oh, this is a
1260
00:59:45.840 --> 00:59:48.880
model that's trained specifically on ASB dot net core. It
1261
00:59:49.000 --> 00:59:51.039
is excellent for ASP dot net core and nothing else.
1262
00:59:51.079 --> 00:59:53.440
Can I potentially use that to go and write me
1263
00:59:53.440 --> 00:59:54.679
the ASP dot net core code?
1264
00:59:54.719 --> 00:59:57.440
Sure? Right. I also wonder about training model specific to
1265
00:59:57.480 --> 00:59:59.760
an application, Like You've got a mature piece of software
1266
01:00:00.239 --> 01:00:02.880
that's an awful lot of knowledge about what the software does,
1267
01:00:03.719 --> 01:00:05.079
and so if I can have that run in a
1268
01:00:05.079 --> 01:00:07.000
local model and just you know, let's not go out
1269
01:00:07.039 --> 01:00:08.880
of scope here, I just want to add these features
1270
01:00:08.960 --> 01:00:12.159
to it. So and yeah, the idea that these monster
1271
01:00:12.239 --> 01:00:15.679
models are the only way to do things sistantly not true, right, right?
1272
01:00:16.079 --> 01:00:18.039
And John and I were actually talking about John John
1273
01:00:18.079 --> 01:00:22.480
Lamb again our good friend, about this concept of a
1274
01:00:22.559 --> 01:00:26.320
prompt compiler, and the idea here is that with a
1275
01:00:26.360 --> 01:00:28.880
lot of the contexts that we're passing to models, there's
1276
01:00:28.920 --> 01:00:32.239
this context overload. There's just too much, like Richard used
1277
01:00:32.360 --> 01:00:34.599
the concept like the buffer overflows like that, that's like
1278
01:00:34.599 --> 01:00:36.119
we're trying to prevent. And it's like, and if I'm
1279
01:00:36.199 --> 01:00:39.719
building an ASP do a net application with a specific
1280
01:00:39.960 --> 01:00:45.119
like API structure, how do I encode just the relevant
1281
01:00:45.159 --> 01:00:47.320
context from the spect it? So I don't just give
1282
01:00:47.320 --> 01:00:49.079
it like, oh, here's all the front end pieces and
1283
01:00:49.079 --> 01:00:50.800
everything else that you need to consider. But by the way,
1284
01:00:50.840 --> 01:00:53.519
just build the apia like, right, can I just select
1285
01:00:53.559 --> 01:00:55.800
the pieces that it needs for my task?
1286
01:00:56.079 --> 01:00:58.400
Yeah? And maybe there is again, like a either a
1287
01:00:58.400 --> 01:01:01.039
local model or something else that pre emptively can select
1288
01:01:01.119 --> 01:01:03.800
these things and say okay, you only need this to
1289
01:01:03.920 --> 01:01:07.440
execute this task and nothing else, and that drives some
1290
01:01:07.519 --> 01:01:10.519
of the efficiency. So I think definitely we're we're right
1291
01:01:10.559 --> 01:01:12.840
now in the space where all of this is like
1292
01:01:13.239 --> 01:01:16.079
it feels like free money, right, Oh, four hundred thousand
1293
01:01:16.079 --> 01:01:20.159
dollars of Kubernetes tokens for two hundred dollars a month, Like, yeah, sure,
1294
01:01:20.400 --> 01:01:23.559
we're in the bubble of you know, the first wave
1295
01:01:23.679 --> 01:01:27.159
of this stuff right right, This bubble will end, but
1296
01:01:27.320 --> 01:01:29.320
you know, just no different than the dot com boom
1297
01:01:29.360 --> 01:01:32.000
and the end of that, you still have an Internet afterwards,
1298
01:01:32.039 --> 01:01:34.159
Like there will these tools will still exist, but we'll
1299
01:01:34.159 --> 01:01:37.639
start to rationalize it. I'm real happy to be talking
1300
01:01:37.679 --> 01:01:41.079
about the post bubble rationalizations.
1301
01:01:41.320 --> 01:01:41.639
Yeah.
1302
01:01:41.679 --> 01:01:44.119
Absolutely, yeah, I think this is where the whole conversation
1303
01:01:44.159 --> 01:01:48.840
about the bubble misses the point that the utility of
1304
01:01:48.880 --> 01:01:52.880
this is undeniable. Yes, Like I'm looking at the models
1305
01:01:52.880 --> 01:01:55.119
that we have today, like from Anthropic, from open Ai,
1306
01:01:55.239 --> 01:01:57.239
from like, and think about it, like if if the
1307
01:01:57.280 --> 01:01:59.960
evolution of those model stops today, like if after two
1308
01:02:00.400 --> 01:02:03.239
the refoard of the show nothing else ever gets released.
1309
01:02:03.800 --> 01:02:06.239
There is still a ton of value behind them and
1310
01:02:06.360 --> 01:02:09.079
building suffware and being able to like reduce the toil. Right,
1311
01:02:09.559 --> 01:02:12.360
nothing changes, it does not improve at all, and there's
1312
01:02:12.400 --> 01:02:13.320
still a lot of value in this.
1313
01:02:13.480 --> 01:02:13.679
Now.
1314
01:02:14.000 --> 01:02:15.880
Is there a lot of hype for things that are
1315
01:02:15.960 --> 01:02:18.320
like chat GBT wrappers around in the wild, like all
1316
01:02:18.360 --> 01:02:22.119
these like random startups Like absolutely, yeah, But the utility
1317
01:02:22.599 --> 01:02:25.840
for the core underlying models and the capabilities that they
1318
01:02:25.920 --> 01:02:28.480
offer for software development was like again to me, is undeniable.
1319
01:02:28.639 --> 01:02:31.440
Yeah, I'm with you then, and I'm just you know,
1320
01:02:31.679 --> 01:02:35.199
we can still get better, but yeah, it's certainly worthwhile,
1321
01:02:35.320 --> 01:02:37.920
and I appreciate thing you're building, these kinds of tools
1322
01:02:37.960 --> 01:02:41.079
to help us rein in the sort of randomness and
1323
01:02:41.119 --> 01:02:45.079
start to think more coherently about what modern dev practices
1324
01:02:45.159 --> 01:02:47.320
with these cod generators are going to look like going forward.
1325
01:02:47.599 --> 01:02:50.679
Absolutely well, Dan, thank you very much. It's been great
1326
01:02:50.719 --> 01:02:53.440
talking to you. Wow, blowing our minds over here.
1327
01:02:53.480 --> 01:02:55.840
Thank you for having me. Yeah, my dream came true.
1328
01:02:55.840 --> 01:02:56.920
I was in dot net rocks.
1329
01:02:56.920 --> 01:02:57.360
That's great.
1330
01:02:57.360 --> 01:02:59.840
There you go. And and we went for a ride too, friend,
1331
01:03:00.119 --> 01:03:01.960
going to call that meaty goodness.
1332
01:03:01.840 --> 01:03:05.920
Yet goodness absolutely all right, Thanks again to Den Delamarski,
1333
01:03:06.039 --> 01:03:09.519
and we'll talk to you next time, dear listener on
1334
01:03:09.719 --> 01:03:32.760
dot net rocks. Dot net Rocks is brought to you
1335
01:03:32.800 --> 01:03:36.800
by Franklin's Net and produced by Pop Studios, a full
1336
01:03:36.880 --> 01:03:41.039
service audio, video and post production facility located physically in
1337
01:03:41.119 --> 01:03:44.880
New London, Connecticut, and of course in the cloud online
1338
01:03:44.920 --> 01:03:47.320
at pwop dot com.
1339
01:03:47.519 --> 01:03:48.719
Visit our website at d.
1340
01:03:48.719 --> 01:03:50.719
O T N E t R O c k S
1341
01:03:50.800 --> 01:03:55.840
dot com for RSS feeds, downloads, mobile apps, comments, and
1342
01:03:55.920 --> 01:03:59.199
access to the full archives going back to show number one,
1343
01:03:59.400 --> 01:04:02.639
recorded September two thousand and two. And make sure you
1344
01:04:02.760 --> 01:04:05.840
check out our sponsors. They keep us in business. Now,
1345
01:04:05.880 --> 01:04:09.360
go write some code. See you next time. You got
1346
01:04:09.440 --> 01:04:18.599
your middle vans. This is home, then my Texes