1
00:00:05,200 --> 00:00:10,020
[CLAIRE] Welcome to Talking Postgres. It's a monthly podcast for developers who love this database.

2
00:00:10,460 --> 00:00:15,580
I'm your host, Claire Giordano, and in this pod, we explore the human side of Postgres,

3
00:00:16,100 --> 00:00:22,340
databases, and open source. And we delve into why do people who work with Postgres do what they do,

4
00:00:22,740 --> 00:00:27,320
and how did they get there? I want to say thank you to the team at Microsoft for sponsoring

5
00:00:27,340 --> 00:00:36,000
today's community conversation. And today's guest is Rob Emanuele, who is a principal engineer at

6
00:00:36,140 --> 00:00:42,180
Microsoft on the Azure team, where he creates generative AI tooling to help developers work

7
00:00:42,180 --> 00:00:49,660
with Postgres. He's a co-creator of a new VS Code extension for PostgreSQL and a primary developer

8
00:00:49,700 --> 00:00:51,280
on the Copilot extension.

9
00:00:52,460 --> 00:00:56,460
And before this current job, I suppose,

10
00:00:57,190 --> 00:01:00,700
he was a geospatial architect on Microsoft Planetary Computer.

11
00:01:01,280 --> 00:01:06,040
And before that, he worked on open source geospatial code bases for years at,

12
00:01:06,110 --> 00:01:08,320
I might mispronounce this, Azavea.

13
00:01:08,720 --> 00:01:09,800
We'll have to talk about that.

14
00:01:10,730 --> 00:01:11,440
Welcome, Rob.

15
00:01:12,299 --> 00:01:14,120
[ROB] Hello, thank you for having me.

16
00:01:14,960 --> 00:01:15,820
[CLAIRE] I'm glad you're here.

17
00:01:16,620 --> 00:01:20,960
All right, so today we're going to be talking about building a dev experience for Postgres

18
00:01:21,380 --> 00:01:22,160
in VS Code.

19
00:01:23,000 --> 00:01:30,000
But before we dive into VS Code and even Postgres, one of the things we do on this podcast is

20
00:01:30,010 --> 00:01:32,220
we often delve into people's origin stories.

21
00:01:33,320 --> 00:01:37,720
So I'm really curious about how you got your start as a developer, and then after that,

22
00:01:38,200 --> 00:01:40,120
when you first got involved with Postgres.

23
00:01:40,940 --> 00:01:41,720
So can we start there?

24
00:01:42,660 --> 00:01:45,800
[ROB] For sure. Yeah, awesome. So I actually took a pretty winding path to becoming a software developer.

25
00:01:52,720 --> 00:01:59,440
In my early days when I was in high school, I was in a lot of bands. I've been playing guitar since I was 10,

26
00:02:00,440 --> 00:02:02,940
and was pretty dead set on being a musician.

27
00:02:03,360 --> 00:02:08,780
So I ended up going to the Berklee College of Music in Boston.

28
00:02:09,259 --> 00:02:13,540
And yeah, sort of, you know, it was 18,

29
00:02:14,260 --> 00:02:17,720
kind of living that rock and roll lifestyle in bands playing out,

30
00:02:17,900 --> 00:02:20,480
not super focused on my studies.

31
00:02:22,120 --> 00:02:26,280
But started hanging out at MIT with a friend of mine from high school

32
00:02:26,300 --> 00:02:39,320
and meeting a lot of the folks involved in STEM there, auditing some classes, and decided to drop out of Berkeley and go pursue a physics degree,

33
00:02:40,500 --> 00:02:46,580
which led me to Rutgers University, where I took a mathematics course.

34
00:02:47,320 --> 00:02:58,860
And it was the first time that I had seen proofs and done proofs and really the abstract logic of mathematics and got really interested in that.

35
00:03:00,460 --> 00:03:02,040
So I switched my major to mathematics.

36
00:03:03,090 --> 00:03:15,080
But then after college, I got on a motorcycle, headed west to L.A. to go live with a friend and go back to chasing the music dream.

37
00:03:16,860 --> 00:03:23,360
so you know doing everything from busking on Venice Beach to just a lot of very random

38
00:03:23,920 --> 00:03:33,380
Craigslist gigs which were some pretty interesting pretty interesting jobs. I decided the hustle

39
00:03:33,390 --> 00:03:39,280
of the music scene, I'm too east coast for for California anyway, sold the motorcycle. [Awww. I'm in California]

40
00:03:40,900 --> 00:03:43,000
Oh, I'm sorry. Are you? I love California. [Northern California, though.]

41
00:03:46,760 --> 00:03:47,400
Northern California has such a special place in my heart.

42
00:03:50,600 --> 00:03:54,640
L.A. is, you know, just, I love it for what it is,

43
00:03:54,720 --> 00:03:57,120
it's just not for me. And yeah, I need seasons, you know?

44
00:04:01,520 --> 00:04:02,420
But yeah, so I,

45
00:04:02,520 --> 00:04:06,200
I headed back and was doing some random gigs there.

46
00:04:07,840 --> 00:04:14,700
Saw a ad for a software development job where they'd actually like teach you on the job,

47
00:04:16,140 --> 00:04:18,780
decided that would be like, you know, good use of my math degree.

48
00:04:20,040 --> 00:04:27,200
So ended up doing Sybase Power Builder, which I wonder how many of your listeners remember or have heard of.

49
00:04:29,280 --> 00:04:33,340
But did a lot of coding there for like an ERP solution,

50
00:04:33,480 --> 00:04:46,660
ended up switching three jobs, really discovering Python and some of the more interesting design patterns and coding,

51
00:04:46,840 --> 00:04:52,200
and seeing some of that logic of the mathematics show up in code and fell in love with that,

52
00:04:53,520 --> 00:04:54,880
and ended up at Azavea.

53
00:04:54,980 --> 00:05:00,300
So many, many people pronounce it the way that you... [Azavea, Azavea. Okay.]

54
00:05:00,640 --> 00:05:01,840
Azavea, yeah.

55
00:05:02,600 --> 00:05:03,240
[CLAIRE] Sorry about that.

56
00:05:03,400 --> 00:05:07,240
[ROB] No, no, no. It's not your fault.

57
00:05:07,910 --> 00:05:14,560
Yeah, so at Azavea, which was a geospatial software firm,

58
00:05:16,040 --> 00:05:21,640
I worked on open source tooling for doing large-scale raster processing,

59
00:05:23,700 --> 00:05:27,960
geospatial rasters being like satellite imagery or climate model output data,

60
00:05:29,680 --> 00:05:36,500
and using Apache Spark to do distributed operations on that data,

61
00:05:37,160 --> 00:05:48,760
and really got involved with the open source community there, building out libraries, not just the one called GeoTrellis, but there were others I was involved with.

62
00:05:49,580 --> 00:06:02,960
And then at Azavea, there was a lot of project work going on where we were building web apps with geospatial data, and they were all backed by Postgres.

63
00:06:03,960 --> 00:06:30,540
That was my first experience with Postgres, seeing it sort of through the lens of PostGIS, PostGIS, where it seemed like, you know, a super capable database that everybody used that was very, you know, popular in the community and also had all of the operations and data types that we as geospatial engineers deal with every day.

64
00:06:33,600 --> 00:06:45,060
[CLAIRE] One of the first episodes of this podcast was with Paul Ramsey and Regina Obe, who are both very much involved and were there at the beginning of the PostGIS project.

65
00:06:46,240 --> 00:06:49,220
So it's amazingly popular.

66
00:06:50,420 --> 00:06:54,540
And I haven't yet been to a FOSS4G conference, but I'm hoping one of these days I will.

67
00:06:55,580 --> 00:06:58,260
So anyway, I'll drop a link to their episode in case there's anybody listening who is more

68
00:07:02,700 --> 00:07:06,580
into geospatial data and PostGIS than they are into VS Code,

69
00:07:07,100 --> 00:07:10,440
and so that way there'll be something for everybody.

70
00:07:11,620 --> 00:07:12,780
[ROB] Definitely go to a FOSS4G.

71
00:07:13,200 --> 00:07:14,660
Anybody out there who's thinking about it,

72
00:07:15,100 --> 00:07:16,160
it's such a great community.

73
00:07:17,979 --> 00:07:20,780
And, you know, I've been to many FOSS4Gs.

74
00:07:20,800 --> 00:07:24,200
I was on the conference committee

75
00:07:24,420 --> 00:07:26,220
for FOSS4G North America.

76
00:07:26,420 --> 00:07:28,700
It's such a great conference and community.

77
00:07:28,860 --> 00:07:31,340
So I definitely encourage you to check that out.

78
00:07:32,600 --> 00:07:40,380
[CLAIRE] Yeah, we even had Regina Obe as a keynote speaker for POSETTE a couple of years ago

79
00:07:41,820 --> 00:07:47,800
and she tried in her talk, and I think she did a good job at, it to tie together the open source

80
00:07:48,000 --> 00:07:53,560
geospatial community, and PostGIS, and Postgres, and talk about those kind of three different

81
00:07:53,980 --> 00:07:59,740
communities and how they overlap and intertwine and and what their connections are. So I guess

82
00:07:59,740 --> 00:08:07,859
I'll drop that link in there too if I can find it. Maybe Aaron will find it for me. Okay so that

83
00:08:07,880 --> 00:08:15,040
explains your first experiences with Postgres and PostGIS, too. How many years ago was that,

84
00:08:15,220 --> 00:08:36,519
or do you not want to say?

85
00:08:18,380 --> 00:08:20,780
[ROB] I probably, I'm trying to do the math.

86
00:08:21,940 --> 00:08:30,420
So I think I started at Azavea maybe 2011 and then was there for about ten years, nine years.

87
00:08:37,460 --> 00:08:44,960
[CLAIRE] Okay, all right. So then, what's your background with VS Code? Like when did you start using it as a user or start working on it as a developer?

88
00:08:45,800 --> 00:08:50,320
And this in particular, the extension that came out that we'll talk about in a few minutes.

89
00:08:51,580 --> 00:09:00,520
[ROB] Yes, I actually didn't start using VS Code until I joined Microsoft

90
00:09:00,540 --> 00:09:11,000
in 2020. Before then, I was an Emacs user. I was somebody who loved the key bindings of Emacs,

91
00:09:11,030 --> 00:09:19,540
which I really appreciate the ability to map the key bindings. I still use Emacs key bindings for

92
00:09:16,820 --> 00:09:23,380
everything. But yeah, it's kind of a bare bones, I mean, it's not a bare bones editor,

93
00:09:23,540 --> 00:09:26,880
but it's not the integrated environment that VS Code is.

94
00:09:28,460 --> 00:09:34,380
So yeah, I was working at Azavea, first as an engineer,

95
00:09:35,450 --> 00:09:36,320
then as a manager,

96
00:09:37,530 --> 00:09:42,040
and then I was VP of research development,

97
00:09:42,530 --> 00:09:44,580
leading up a couple teams doing product development

98
00:09:46,640 --> 00:09:49,680
and research into machine learning

99
00:09:49,730 --> 00:09:51,100
as applied to geospatial data,

100
00:09:51,820 --> 00:10:01,700
but saw the opportunity where the Microsoft Environmental Sustainability Team was building what they were calling the Planetary Computer.

101
00:10:03,460 --> 00:10:12,680
And it was a geospatial data platform that I had, you know, really had been working in that area for a while, for many years,

102
00:10:13,040 --> 00:10:16,620
and so went back to being an individual contributor on that team.

103
00:10:16,960 --> 00:10:19,620
And yeah, that's when I switched to VS Code,

104
00:10:20,260 --> 00:10:32,760
and I didn't actually do any extension work with VS Code until later, about four years later, I joined the Azure Postgres team.

105
00:10:32,780 --> 00:10:32,940
[CLAIRE] Okay.

106
00:10:34,360 --> 00:10:40,420
And before we start talking about Postgres and VS Code, I guess I want to know a little

107
00:10:40,580 --> 00:10:42,580
bit more about your work on the planetary computer.

108
00:10:43,220 --> 00:10:45,760
So I know very little.

109
00:10:45,910 --> 00:10:46,700
I looked it up.

110
00:10:46,980 --> 00:10:55,960
There's a multi-petabyte catalog of global environmental data with APIs, and it seemed like the target audience were people who were interested in conservation.

111
00:10:57,580 --> 00:11:04,460
And it gave people a scientific environment in which to analyze the data, query the data, get their questions answered.

112
00:11:04,880 --> 00:11:06,460
That's the limit of what I know.

113
00:11:07,140 --> 00:11:13,320
[ROB] You got it. It's a really cool, it's a really cool project. Yeah in, I think it was

114
00:11:13,380 --> 00:11:16,100
2019, there was a series of environmental sustainability goals that were issued by Brad

115
00:11:22,160 --> 00:11:31,520
Smith and the Chief Environmental Officer at the time, Lucas Joppa, for various conservation goals,

116
00:11:31,740 --> 00:11:36,160
carbon output goals. And then they announced they were building this planet to computer.

117
00:11:37,340 --> 00:11:54,680
The sort of grand vision of it is, you know, we spend all of our, all of this time and technology on building machine learning systems to analyze how humans behave and our click through behaviors and, you know, to sell us ads,

118
00:11:54,780 --> 00:12:06,620
but why aren't we applying that same technology to understanding the Earth and how it's changing and how we can live in a sustainable way?

119
00:12:08,400 --> 00:12:16,860
And so the sort of seed of that is there's so much open data that gets produced that is about the surface of the Earth,

120
00:12:17,520 --> 00:12:33,640
so many satellites orbiting the globe from places like the European Space Agency, USGS, NASA, collecting really important and interesting data that is extremely heavy.

121
00:12:34,680 --> 00:12:50,420
And it's very hard for academics, for anybody building sustainability solutions to access that data, to find the right pixels in the, you know, 60 petabytes of data.

122
00:12:50,500 --> 00:13:08,120
So we built a system that stored about 60 petabytes of openly licensed environmental sustainability related data on Azure storage and then had APIs that allowed a standards-based search.

123
00:13:08,280 --> 00:13:22,400
So there's a geospatial standard called SpatioTemporal Asset Catalog that we implemented and built services for people to go and search for the data and be able to actually use it in a lot better way.

124
00:13:22,610 --> 00:13:32,880
And we've had a lot of feedback from academics and people building applications that use satellite imagery that the way that the data was organized,

125
00:13:33,820 --> 00:13:39,500
and again, like building on the standards in the community, which I was on the steering committee for STAC,

126
00:13:39,920 --> 00:13:49,920
so sort of with the STAC community building this out, made it easier for people using this data to access it.

127
00:13:50,000 --> 00:14:02,660
And I think that's an interesting, like, you know, I had worked in library, like building libraries for engineers to use and build into their projects and building, you know, code APIs to.

128
00:14:03,600 --> 00:14:07,060
allow them to move faster and build on libraries,

129
00:14:07,340 --> 00:14:08,940
and this was sort of an example of like,

130
00:14:09,210 --> 00:14:11,100
how do we build APIs that are dead simple

131
00:14:11,210 --> 00:14:13,440
to go access this really, really complicated data?

132
00:14:15,200 --> 00:14:19,980
And I think that developer experience focus

133
00:14:20,260 --> 00:14:27,080
kind of follows through with the VS Code extension eventually.

134
00:14:27,800 --> 00:14:30,560
[CLAIRE] Okay, so there could be a whole episode on this topic by itself.

135
00:14:31,220 --> 00:14:38,200
Like, and I could bring someone from the European Space Agency on the show and, you know, or bring you back and talk about it,

136
00:14:38,340 --> 00:14:41,600
but we probably need to pivot to VS Code and Postgres.

137
00:14:42,730 --> 00:14:46,080
But, oh my gosh, I think

138
00:14:46,200 --> 00:14:53,340
there's something so fascinating about maps and all of the satellite data and what you can do with it,

139
00:14:53,570 --> 00:15:08,180
and I think, well, for me, it's really cool to work in the Postgres space and know that Postgres is an underpinning underneath some of these applications and the work that scientists and researchers do in this space.

140
00:15:09,360 --> 00:15:09,800
[ROB] Yeah, absolutely.

141
00:15:10,230 --> 00:15:10,800
And I kind of spoke about the data and the APIs, but underpinning it all was Postgres.

142
00:15:18,560 --> 00:15:23,140
And that, to me, was my first real look into the power of Postgres.

143
00:15:24,620 --> 00:15:26,600
Like I said, we had 60 petabytes of data.

144
00:15:26,700 --> 00:15:30,680
millions and millions of rows with these complicated geometries

145
00:15:32,640 --> 00:15:36,320
and we, you know, that were spread out over time.

146
00:15:36,370 --> 00:15:38,280
So you're doing these spatiotemporal queries

147
00:15:40,380 --> 00:15:45,920
and we landed on using Postgres to back all of that

148
00:15:46,090 --> 00:15:48,320
to be the main data engine

149
00:15:48,560 --> 00:15:50,760
where multiple pipelines were feeding data in.

150
00:15:52,080 --> 00:15:56,220
There was, you know, like 20 million API hits a month,

151
00:15:57,080 --> 00:16:01,060
serving those out across like scaled API servers.

152
00:16:01,980 --> 00:16:05,000
And yeah, it was really interesting to see how Postgres,

153
00:16:06,320 --> 00:16:07,920
you know, to start with it was dead simple,

154
00:16:08,260 --> 00:16:09,980
and the data model was like pretty straightforward,

155
00:16:10,340 --> 00:16:15,660
uses JSONB to encode the STAC metadata, and the properties.

156
00:16:16,960 --> 00:16:20,160
But we, you know, had scaling issues early

157
00:16:20,440 --> 00:16:24,440
with the like ORM that I was using in the API servers.

158
00:16:24,760 --> 00:16:26,340
It was not querying correctly

159
00:16:26,580 --> 00:16:29,640
and we brought in a vendor,

160
00:16:30,920 --> 00:16:35,560
I'm going to shout out David Bittner at Development Seed who was our Postgres expert.

161
00:16:36,160 --> 00:16:49,880
He built a sort of SQL-only, not an extension extension, but just like a SQL-only layer on top of Postgres to handle spatiotemporal asset catalog data called PgSTAC.

162
00:16:50,880 --> 00:16:59,360
And there were just so many optimizations, so many things around like partitioning, you know, dynamic partitioning at scale.

163
00:17:00,030 --> 00:17:03,280
There was like dehydration and hydration patterns for JSONB storage.

164
00:17:04,839 --> 00:17:11,560
All of this like really interesting, very powerful capability baked in.

165
00:17:11,810 --> 00:17:18,000
And I sort of saw the true power of Postgres then because, you know, we went from kind of throwing hardware at it,

166
00:17:18,120 --> 00:17:22,980
we were using Azure Flexible Server, and were able to scale up the memory and CPU easily.

167
00:17:23,280 --> 00:17:29,420
But with these performance improvements, we're able to scale it back down and serve the same amount of traffic.

168
00:17:31,000 --> 00:17:40,760
So I thought that was really interesting to see in this production highly used scenario how Postgres easily handled it,

169
00:17:40,810 --> 00:17:46,800
but it took a lot of work to kind of tune it and use it correctly,

170
00:17:47,660 --> 00:17:54,160
and have the expertise involved to actually have it perform that well in that scenario.

171
00:17:58,480 --> 00:18:04,520
[CLAIRE] I could keep going on this, but I'm going to bite my tongue, not ask more questions, and

172
00:18:04,580 --> 00:18:04,780
pivot.

173
00:18:05,580 --> 00:18:13,960
So why are we here today talking about building a developer experience for Postgres in VS Code?

174
00:18:14,720 --> 00:18:15,280
What happened?

175
00:18:15,940 --> 00:18:24,760
Because I imagine some listeners don't know about this new thing that you worked on over the last year and that launched back in April or May.

176
00:18:24,810 --> 00:18:26,400
It launched at PyCon, right?

177
00:18:28,400 --> 00:18:31,380
[ROB] Yeah, it was PyCon and MS Build. [Okay.]

178
00:18:32,520 --> 00:18:33,820
Yeah, so the VS Code extension is,

179
00:18:35,380 --> 00:18:35,540
yeah, it's an awesome extension.

180
00:18:36,840 --> 00:18:38,539
So how I arrived at it is...

181
00:18:39,220 --> 00:18:39,900
[CLAIRE] Wait, what is it?

182
00:18:40,160 --> 00:18:43,120
Yeah, before how you arrived, what is this VS Code extension?

183
00:18:43,780 --> 00:18:45,859
[ROB] Yeah, so it's a VS Code extension

184
00:18:45,860 --> 00:18:48,240
that you can install from the VS Code Marketplace.

185
00:18:49,360 --> 00:18:53,180
It has an icon on the side that you can click

186
00:18:53,420 --> 00:18:57,020
and then a user interface to manage connections.

187
00:18:58,260 --> 00:18:59,580
So you can create new connections,

188
00:19:00,200 --> 00:19:02,540
manage the servers and the database you're connected to.

189
00:19:03,460 --> 00:19:06,420
It has regular password authentication.

190
00:19:07,180 --> 00:19:08,820
It also supports Entra authentication.

191
00:19:10,280 --> 00:19:12,200
And this is sort of like a theme with the extension,

192
00:19:12,480 --> 00:19:13,980
it works for any Postgres database.

193
00:19:14,100 --> 00:19:20,760
If you're using Postgres on AWS, Google Cloud, just on your own server, it works really well.

194
00:19:21,680 --> 00:19:30,320
There are some things that it works specifically well for Azure Postgres, like Entra authentication, but it works across any Postgres.

195
00:19:31,340 --> 00:19:40,000
It gives you the ability to connect to the database, bring up a query window, which is really just a VS Code editor, and then go ahead and type your SQL.

196
00:19:40,360 --> 00:19:48,440
If you have Copilot completions enabled, you can use all your VS Code goodies there and then execute queries.

197
00:19:49,070 --> 00:19:55,140
It gives a results viewer where you can export to CSV, JSON, etc.

198
00:19:55,800 --> 00:20:03,320
You can browse the database objects, do maintenance activities like script any of the objects as CREATE or DROP.

199
00:20:03,980 --> 00:20:13,120
It also has a way to visualize schemas, so you can really easily navigate a database by visualizing the schemas.

200
00:20:14,180 --> 00:20:20,020
A newer feature we just released is a dashboard for the servers that include metrics,

201
00:20:20,410 --> 00:20:24,900
so you can see sort of real-time metrics collected from your server.

202
00:20:25,700 --> 00:20:27,940
There's also a tab for historical data.

203
00:20:28,240 --> 00:20:43,540
If it is an Azure Flexible server, it will pull from Azure Monitor to show you all of your historical CPU usage and memory and all those good metrics that we collect about our Postgres deployed servers.

204
00:20:44,920 --> 00:20:50,640
And then a critical aspect of it, I think, is the Copilot functionality.

205
00:20:51,320 --> 00:21:01,240
So it provides an integration into GitHub Copilot that makes it really easy to work with your database with the LLMs in Copilot.

206
00:21:01,460 --> 00:21:18,580
So it has a chat participant, @pgsql, that you can chat at and is able to use tools to work with the database, determine the schema, query the database, answer natural language questions really easily.

207
00:21:19,300 --> 00:21:21,480
It also has agent mode tools,

208
00:21:21,860 --> 00:21:24,780
so GitHub Copilot has a few different modes.

209
00:21:24,960 --> 00:21:28,300
Ask mode is where the sort of chat participant comes in,

210
00:21:28,300 --> 00:21:35,840
but agent mode allows agents to be orchestrated and make modifications to your code base,

211
00:21:36,260 --> 00:21:43,400
modifications to, you know, like can crawl things, can kind of do iterative development.

212
00:21:44,280 --> 00:21:57,700
And so we have tools that the agents can use that can then, you know, do read-only queries to your database, can open scripts on your behalf to get the database schema, modify the database with your approval,

213
00:21:59,060 --> 00:22:06,960
and also now with the metrics in the dashboard can help you diagnose issues with your server.

214
00:22:07,880 --> 00:22:13,140
You know, if you see CPU spiking, you can ask Copilot, like, hey, why is this CPU spiking?

215
00:22:13,360 --> 00:22:21,800
And it can actually go and figure out from the metrics, hey, I see that this, you know, this table is missing this index,

216
00:22:22,320 --> 00:22:25,860
and so there's a lot of queries against this and, you know, it's causing problems,

217
00:22:26,100 --> 00:22:28,980
here's a suggested index. Do you want me to run this against the database?

218
00:22:30,320 --> 00:22:36,020
So that's that's sort of the scope of the VS Code extension.

219
00:22:36,060 --> 00:22:36,200
[CLAIRE] Okay.

220
00:22:36,860 --> 00:22:42,300
And when you started, I think you co-created this with Matt McFarland,

221
00:22:42,820 --> 00:22:53,520
am I right?

222
00:22:44,400 --> 00:22:50,780
[ROB] Yeah, and others on the developer experience and AI team at Azure Postgres.

223
00:22:53,960 --> 00:22:57,600
[CLAIRE] And did you start from a blank sheet of paper? What was it, what was the process of building this thing?

224
00:22:58,300 --> 00:23:03,280
Because, you know, it didn't exist six months ago or a year ago.

225
00:23:03,040 --> 00:23:06,420
So when you first started, I don't know, do you remember the beginning?

226
00:23:07,500 --> 00:23:11,300
[ROB] Yeah, for sure. Well, it was interesting because it did actually exist. There was a

227
00:23:13,680 --> 00:23:24,340
Postgres extension by Microsoft in the marketplace that had sort of, you know, not been maintained.

228
00:23:27,320 --> 00:23:31,100
[CLAIRE] Another way of saying it is it had been neglected since 2020.

229
00:23:31,880 --> 00:23:53,380
[ROB] Yeah, it had been neglected since 2020, and that was what we kind of started with. There was a Python code base that did a lot of the connection management stuff, and then the TypeScript extension was actually based off of the MS SQL VS Code extension,

230
00:23:53,720 --> 00:23:57,440
so that had made leaps and bounds in the meantime.

231
00:23:57,820 --> 00:24:07,840
So one of the first things that we did, so Matt and I started at the team in about, I'd say, like September, October of last year.

232
00:24:07,780 --> 00:24:08,520
So it's been about a year.

233
00:24:09,600 --> 00:24:24,080
And we sort of updated the code base to more match what MS SQL had and then revamped the language server and sort of did work to bring it up to speed.

234
00:24:24,130 --> 00:24:28,280
So it is sort of net new in that it's completely refurbished, I'd say.

235
00:24:29,020 --> 00:24:46,300
But we did start with a really solid ground from, you know, that previous work and also the MS SQL folk, which, you know, I have to shout out the helpful engineering team that definitely we were able to leverage to accelerate the development.

236
00:24:48,840 --> 00:24:57,600
[CLAIRE] And then VS Code itself is super popular amongst developers, so did you end up collaborating

237
00:24:57,780 --> 00:25:04,080
at all with the VS Code team, or were you really more focused on collaborating with

238
00:25:04,140 --> 00:25:06,860
another extension creator in the MS SQL team.

239
00:25:08,130 --> 00:25:11,340
This is not a leading question. I have no idea what your answer is going to be.

240
00:25:12,120 --> 00:25:28,000
[ROB] Yeah, we didn't end up working with the VS Code team specifically because they have such a rich extension capability and like it's very well documented and they've built it to be super flexible,

241
00:25:28,120 --> 00:25:31,620
which is one of the great things about VS Code.

242
00:25:31,710 --> 00:25:34,540
And actually kind of now that I'm thinking about it,

243
00:25:34,620 --> 00:25:39,000
it's like Postgres has this extension capability that's like,

244
00:25:39,440 --> 00:25:40,300
this is sort of baseline.

245
00:25:40,530 --> 00:25:42,180
Like what can you do on top of this?

246
00:25:42,260 --> 00:25:44,580
Here's a bunch of hooks to be able to extend this functionality

247
00:25:44,860 --> 00:25:45,840
because that's where the power comes from.

248
00:25:46,380 --> 00:25:48,060
I feel like VS Code is the same way.

249
00:25:50,020 --> 00:25:55,440
It has very clearly documented extension points that you can build on top of.

250
00:25:55,980 --> 00:26:02,200
So we didn't really need to get the VS Code team involved too much.

251
00:26:02,340 --> 00:26:06,960
We let them keep working on the awesome core functionality that they're doing.

252
00:26:08,440 --> 00:26:11,240
And yeah, it was pretty clear how to build it out.

253
00:26:12,460 --> 00:26:22,020
And then we gathered requirements from users and had user interviews about what functionality would be most important and just got to work building that out.

254
00:26:23,060 --> 00:26:32,920
[CLAIRE] Did you or or Matt, maybe you speak for him, come to the table with any specific philosophies

255
00:26:32,980 --> 00:26:38,280
about what a good user experience or what a good developer experience would be?

256
00:26:40,080 --> 00:26:57,400
I mean, you said you did user interviews. You said you got requirements from users, both of which are like solid things to do. But I'm just wondering how opinionated you were in making decisions about the focus of "no, we're not going to do that. Yes, we're going to do this" or "these are our guiding principles."

257
00:26:59,920 --> 00:27:06,020
[ROB] Yeah, I think some guiding principles were to, you know, start in a scoped way, like try

258
00:27:06,050 --> 00:27:09,340
to not do everything, right?

259
00:27:09,390 --> 00:27:11,260
And the extension doesn't do everything.

260
00:27:11,660 --> 00:27:18,920
There's, you know, there's other database IDEs that are much more full-featured and deep

261
00:27:19,050 --> 00:27:21,580
into what Postgres can do, like pgAdmin.

262
00:27:21,880 --> 00:27:31,140
We can't do all the things that pgAdmin can do, but we try to be selective about what are the most important things and try to do them really, really well.

263
00:27:31,720 --> 00:27:56,460
I think for like developer experience and developer tooling, you know, I had said I spent a lot of time building libraries in the open source community and really, you know, understanding what do engineers need and how do you give them just that in the most simple way and get out of their way and let them do, you know, be flexible, right?

264
00:27:57,620 --> 00:28:10,300
And so that sort of thoughtful design process, understanding what the workflow is that you're targeting and how to assist in that is something that I think we brought into this extension.

265
00:28:10,950 --> 00:28:25,460
And I think led us to, yeah, making design choices, especially, you know, the integration with Copilot that, you know, sort of imagining what, you know, engineers are going to use this for,

266
00:28:25,520 --> 00:28:27,540
and then also a lot of dogfooding, right?

267
00:28:27,570 --> 00:28:29,620
We use Postgres all the time internally,

268
00:28:30,880 --> 00:28:42,140
so we're our own users and it's really sort of easy to understand what the, you know, what the thorny parts are, what improvements could be made when we ourselves hit against issues.

269
00:28:44,820 --> 00:28:49,220
[CLAIRE] I often wonder what the etymology is of the word dogfooding,

270
00:28:50,480 --> 00:28:55,000
and so I will probably look that up as soon as we're done today.

271
00:28:55,430 --> 00:28:56,400
Unless you happen to know.

272
00:28:57,300 --> 00:29:06,320
[ROB] So very interestingly, there was [You do know.] yeah well I don't know exactly, but I just hit my five

273
00:29:06,440 --> 00:29:12,580
years at Microsoft and there was like a page about the history of Microsoft and it actually had

274
00:29:12,640 --> 00:29:17,580
that question, like it was an FAQ, and it's like "where did dogfooding come from?" and it was

275
00:29:17,880 --> 00:29:24,360
something really early on, I think in the eighties, about somebody had like a printer

276
00:29:24,940 --> 00:29:30,600
service in a building, and then they used the term "we should eat our own dog food"

277
00:29:31,960 --> 00:29:35,980
and everybody used this printer service, so it actually did originate from Microsoft.

278
00:29:37,380 --> 00:29:37,940
[CLAIRE] Oh, interesting,

279
00:29:38,350 --> 00:29:43,940
because I worked at Sun Microsystems back in the early 90s, and we definitely used the

280
00:29:44,120 --> 00:29:46,100
phrase as well, like "eat our own dog food."

281
00:29:46,820 --> 00:29:51,260
You know, we would run on the last night's build of SunOS, for example.

282
00:29:52,280 --> 00:29:55,240
But yeah, I didn't know it originated at Microsoft.

283
00:29:55,919 --> 00:29:57,400
And it had to do with a printer.

284
00:29:59,080 --> 00:30:04,180
[ROB] Yeah, somebody fact-check me on that, but it was something from Microsoft.

285
00:30:04,980 --> 00:30:05,200
[CLAIRE] All right.

286
00:30:05,610 --> 00:30:12,480
So you were running on top of Postgres, and you were using VS Code, and you were using the extension,

287
00:30:12,710 --> 00:30:20,860
so you had your own reactions and visceral reactions probably about what was working and what wasn't working as you were doing development.

288
00:30:21,110 --> 00:30:23,120
Did I paraphrase that right? [Yep.]

289
00:30:24,040 --> 00:30:24,260
Okay.

290
00:30:25,400 --> 00:30:27,100
Any other guiding principles?

291
00:30:27,480 --> 00:30:46,040
[ROB] I think another one was to, you know, really recognize that AI and coding agents are going to be a huge part of the future of the developer workflow,

292
00:30:46,880 --> 00:30:54,860
and so trying to set up the functionality such that it gives the coding agents visibility into

293
00:30:55,220 --> 00:30:57,220
and the ability to interact with all the functionality that we build.

294
00:31:00,440 --> 00:31:08,540
That's been a pretty guiding principle and something that really highlights why are we building this into VS Code.

295
00:31:09,140 --> 00:31:12,380
There's already other IDEs that really work well with Postgres.

296
00:31:14,440 --> 00:31:32,140
And the fact that GitHub Copilot is there inside of VS Code and the extensions can hook into it and give that capability to coding agents and you can enhance coding agents in that workflow that is evolving in front of our eyes in the industry.

297
00:31:33,940 --> 00:31:43,540
That was sort of a principle that we want to best enable that functionality that's still being built out.

298
00:31:45,300 --> 00:31:53,620
[CLAIRE] How did you think about, I don't know, governors, protection, like putting in place guardrails

299
00:31:53,720 --> 00:31:57,420
that will obviously enable the agents to be helpful,

300
00:31:57,860 --> 00:32:01,140
but prevent the agents from doing things they're not supposed to do?

301
00:32:01,860 --> 00:32:03,680
[ROB] Yeah it's a good question, I think it's

302
00:32:05,580 --> 00:32:11,999
an interesting question in the industry these like, today like, "okay what

303
00:32:12,020 --> 00:32:25,520
if we let the agents run wild? What could they do?" [Is that called YOLO agents or something?] yeah, YOLO agents. Go ahead and delete my entire

304
00:32:23,340 --> 00:32:31,920
code base if you deem necessary. [Nooo.] Yeah. So I think that we're kind of following what VS Code is doing,

305
00:32:32,020 --> 00:32:41,980
which is the sort of approval process. So whenever an agent uses a tool, you have to approve it. Now

306
00:32:42,000 --> 00:32:45,880
use this tool, this is like a read-only query, just accept it, allow it to do whatever it

307
00:32:45,960 --> 00:32:51,480
wants, and that helps accelerate the workflow. But, you know, for instance, in my environment,

308
00:32:52,400 --> 00:33:01,020
I let the extension tools kind of run wild except for modify database. And I have to review and

309
00:33:01,160 --> 00:33:08,620
approve anytime that it does that. We also have some configurations set up to specifically state

310
00:33:08,660 --> 00:33:12,600
that one of the databases in your connections

311
00:33:13,379 --> 00:33:15,680
is a read-only for agents.

312
00:33:16,180 --> 00:33:19,100
So you can add sort of another layer of protection there.

313
00:33:20,780 --> 00:33:25,780
So we've thought about how to prevent it

314
00:33:25,960 --> 00:33:27,840
from running anything that's dangerous.

315
00:33:29,780 --> 00:33:30,540
But at the end of the day,

316
00:33:30,600 --> 00:33:35,040
you're leveraging these tools to write SQL on your behalf,

317
00:33:35,440 --> 00:33:35,780
for instance.

318
00:33:36,560 --> 00:33:39,760
And so if you're able to write that SQL and execute it,

319
00:33:41,240 --> 00:33:46,560
the agent also should be able to with sufficient review capability.

320
00:33:46,720 --> 00:33:50,620
And it's up to users to don't let the agent do it,

321
00:33:50,760 --> 00:33:51,880
don't YOLO, right?

322
00:33:52,100 --> 00:33:58,000
Like review everything or else you're going to...

323
00:33:59,300 --> 00:34:00,060
don't disengage.

324
00:34:00,860 --> 00:34:02,360
Actually be a participant.

325
00:34:02,620 --> 00:34:04,360
Let the Copilot be a Copilot.

326
00:34:04,500 --> 00:34:08,320
You're in charge and don't let it do anything that's silly.

327
00:34:09,240 --> 00:34:11,700
And I've seen it try to do some silly things before,

328
00:34:11,960 --> 00:34:16,500
and it's just like, yeah, not against the database, mostly against like, git,

329
00:34:16,879 --> 00:34:19,679
like try to clear out my unstaged changes.

330
00:34:20,000 --> 00:34:22,020
And it's like, no, don't, why are you trying to erase my work?

331
00:34:22,220 --> 00:34:23,179
Please, please stop doing that.

332
00:34:25,200 --> 00:34:31,020
[CLAIRE] I joke sometimes that, you know, obviously I started off as an engineer in developer tools

333
00:34:32,060 --> 00:34:38,200
eons ago, but these days English is my programming language, right? Communicating, writing,

334
00:34:39,560 --> 00:34:48,599
talking to people. That's how I do my job within the Postgres world. And so I've obviously been

335
00:34:48,620 --> 00:34:55,139
using LLMs a lot too. And I love them as an editor. Well, I love them sometimes as an editor

336
00:34:55,460 --> 00:35:00,580
only when I have great prompts, only when I've been really specific about the tone of voice

337
00:35:00,820 --> 00:35:06,840
requirements. And I mean, very specific. And it's great for me that at two in the morning,

338
00:35:07,310 --> 00:35:12,920
I can get some really useful feedback, but I can't use it all. Like there's a bunch of,

339
00:35:12,920 --> 00:35:17,420
a lot of suggestions. I'm like, no, no, no, this doesn't work. This doesn't work. And then there

340
00:35:17,440 --> 00:35:23,500
were some fantabulous suggestions and feedbacks that I am just so glad, right, that I had this

341
00:35:23,980 --> 00:35:28,980
assistant to help me. So I don't know if that's what your experience is like as a developer.

342
00:35:30,620 --> 00:35:31,020
[ROB] Oh, absolutely.

343
00:35:31,920 --> 00:35:36,160
[CLAIRE] I definitely have to review all the changes. And I think that's where I'm being more successful

344
00:35:36,320 --> 00:35:41,440
than other people who are using it and just not reviewing all the changes. And then they're

345
00:35:41,460 --> 00:35:45,020
getting a mixture of goodness and crap together.

346
00:35:46,440 --> 00:35:49,020
Whereas I just pull out the goodness and it's amazing.

347
00:35:50,320 --> 00:35:50,400
Anyway.

348
00:35:50,779 --> 00:35:51,800
[ROB] Yeah, it's interesting.

349
00:35:51,940 --> 00:35:53,080
I mean, it is a tool.

350
00:35:53,400 --> 00:36:00,120
And the models are super, super capable, but they're not just like throw a problem at it and it just does exactly what you want.

351
00:36:00,980 --> 00:36:12,680
You know, I've actually in my engineering career, I mean, this is such a turbulent time because AI is disrupting all of our workflows of how, you know, we build code.

352
00:36:12,800 --> 00:36:17,160
And I'll be honest with you, I now use English language to code.

353
00:36:17,520 --> 00:36:19,240
I don't write code anymore and haven't for a bit.

354
00:36:23,060 --> 00:36:41,600
I mean, I do make edits. I do a lot of code review. But most, I would say a vast majority of the code that I output daily is written by agents. And I'm writing markdown files. I'm writing specifications. I'm writing and reviewing implementation plans.

355
00:36:42,440 --> 00:37:08,700
And a lot of the workflow that I'm fitting myself towards is what is the flow of agentic coding that can build a specification, build an implementation plan that I can review and make sure those are right, and then build a phased implementation that I can review as GitHub PRs and make comments on and say, no, don't do this, do this, yada, yada,

356
00:37:09,540 --> 00:37:21,460
and have the agents do the coding, but like in a very controlled manner to reduce that AI cruft that ends up happening when you let the agents kind of code without really knowing the context of what you need.

357
00:37:23,040 --> 00:37:29,460
[CLAIRE] Yeah, and when you're reviewing someone else's code, or in my case, someone else's writing

358
00:37:29,980 --> 00:37:36,420
where that someone else can be a human or can be an LLM, it's almost harder

359
00:37:36,640 --> 00:37:41,400
than when you wrote the code yourself or you wrote the English yourself, right? Because you really

360
00:37:41,460 --> 00:37:46,180
have to be on your toes to pay attention and look for those nuances and those subtle things and those

361
00:37:46,200 --> 00:37:51,280
edge cases and and to review it. But on the other hand you end up with a more

362
00:37:51,480 --> 00:37:55,120
efficient workflow even with all that attention to review detail.

363
00:37:56,640 --> 00:38:02,860
[ROB] Totally. Yeah. It's the new, it's sort of the shift of skill sets where

364
00:38:03,840 --> 00:38:08,020
the generation part can be handled by LLMs

365
00:38:08,180 --> 00:38:09,180
but the review part,

366
00:38:09,400 --> 00:38:12,300
identifying what is good, what is bad,

367
00:38:12,480 --> 00:38:13,360
and what is dangerous,

368
00:38:13,890 --> 00:38:14,860
what is actually wrong,

369
00:38:16,260 --> 00:38:17,120
is so important.

370
00:38:17,410 --> 00:38:18,960
And I think for me,

371
00:38:19,200 --> 00:38:22,820
I'm finding myself having to really craft that skill set

372
00:38:23,060 --> 00:38:25,200
and exercise it a lot more

373
00:38:26,080 --> 00:38:28,060
and build that new muscle.

374
00:38:28,400 --> 00:38:29,780
I mean, it's a muscle that I've had,

375
00:38:29,780 --> 00:38:31,140
I've done a lot of code reviews for humans,

376
00:38:32,760 --> 00:38:36,480
but it's just sort of different and a lot more than I'm used to.

377
00:38:36,480 --> 00:38:46,960
And yes, it's interesting because the potential for accelerating and the output that I can create is way higher now with these tools,

378
00:38:48,340 --> 00:38:56,100
and that's definitely something that I'm excited for the Postgres community to also be able to embrace.

379
00:38:56,240 --> 00:39:00,700
because something like VS Code and GitHub Copilot

380
00:39:00,700 --> 00:39:03,140
is really focused on modifying source code.

381
00:39:03,810 --> 00:39:05,080
But what about the database?

382
00:39:05,410 --> 00:39:07,300
And what about the complexities of the database?

383
00:39:07,640 --> 00:39:13,000
When we built the Planetary Computer on Postgres,

384
00:39:13,550 --> 00:39:20,799
we hired an expert vendor to build out this PgSTAC project

385
00:39:20,820 --> 00:39:26,000
over months to do very complicated optimizations

386
00:39:26,380 --> 00:39:29,600
that eventually made Postgres really work.

387
00:39:30,260 --> 00:39:34,360
I realized I had only been using 10% of Postgres

388
00:39:34,530 --> 00:39:37,580
and the power of Postgres before that instance,

389
00:39:38,740 --> 00:39:41,940
and I just don't have the expertise in Postgres

390
00:39:41,940 --> 00:39:44,360
to know to build that out.

391
00:39:45,000 --> 00:39:47,900
But with agents, with LLMs,

392
00:39:48,040 --> 00:39:50,900
with the knowledge that LLMs have of Postgres,

393
00:39:51,120 --> 00:39:54,520
because Postgres has been here for so long

394
00:39:54,760 --> 00:39:56,240
and all of its history is online

395
00:39:56,840 --> 00:39:59,380
and the LLMs have trained on all of the public data

396
00:39:59,390 --> 00:39:59,960
on the internet,

397
00:40:00,510 --> 00:40:03,040
so it knows Postgres so deeply,

398
00:40:03,280 --> 00:40:05,240
probably better than any other database out there.

399
00:40:06,380 --> 00:40:08,800
It can now be a copilot to help me

400
00:40:09,720 --> 00:40:13,340
actually try to use all of that power of Postgres

401
00:40:14,179 --> 00:40:16,680
in my work.

402
00:40:17,240 --> 00:40:26,760
So I'm really excited about that sort of leverage that you can gain by using coding agents and Postgres specifically.

403
00:40:28,460 --> 00:40:32,960
[CLAIRE] Yeah, the classic phrase that you'll hear, and this isn't specific to Postgres, I think

404
00:40:33,120 --> 00:40:38,860
that you'll hear this in a lot of conversations with database engineers, is you'll ask a question

405
00:40:39,240 --> 00:40:42,800
about optimization or how to do this better or how to solve this,

406
00:40:43,090 --> 00:40:45,680
and the answer is always, do you know what the answer is?

407
00:40:45,920 --> 00:40:46,400
It's two words.

408
00:40:46,760 --> 00:40:47,220
It's, it depends. [Yeah.]

409
00:40:49,660 --> 00:40:50,840
And that's the classic answer.

410
00:40:51,080 --> 00:40:53,540
It depends because there are all of these factors,

411
00:40:53,940 --> 00:41:04,360
and there's a whole cottage industry of wildly intelligent and knowledgeable database consultants,

412
00:41:04,490 --> 00:41:06,480
and in particular, Postgres consultants out there.

413
00:41:07,460 --> 00:41:09,740
And I actually haven't talked to any of them.

414
00:41:09,790 --> 00:41:17,940
Maybe that's a good podcast conversation about how their world is changing as a result of LLMs and AI,

415
00:41:18,460 --> 00:41:22,540
and are they seeing it as a competitive threat or an existential threat?

416
00:41:22,660 --> 00:41:29,620
Or are they seeing it as, okay, this is a tool that's going to make my team, my company even more productive and effective.

417
00:41:30,840 --> 00:41:34,880
And I know it's, well, it feels like it's still early days and yet it's not.

418
00:41:35,000 --> 00:41:36,200
We're several years into this.

419
00:41:38,700 --> 00:41:39,540
I'm just thinking out loud,

420
00:41:39,960 --> 00:41:40,940
sorry for the ramble.

421
00:41:40,980 --> 00:41:43,140
[ROB] No, that's a great point,

422
00:41:43,200 --> 00:41:47,720
and I'd be interested in what they have to say as well.

423
00:41:47,770 --> 00:42:04,040
And I think that this VS Code extension is, you know, targeting developers mainly just because that's, you know, VS Code is already sort of a environment for developers that maybe don't have that database expertise.

424
00:42:04,860 --> 00:42:10,700
But I'd also love to see it be able to be used by DBAs and SREs in order to leverage the agents that GitHub Copilot provides to do their work better.

425
00:42:20,020 --> 00:42:24,720
So I can imagine you've amassed this database expertise,

426
00:42:25,860 --> 00:42:32,540
and just like we were talking, the ability to see what is right or wrong from LLM output is so important.

427
00:42:33,180 --> 00:42:45,540
So if you have all that expertise and you let an agent investigate potential optimizations for a database, it might come back with some ideas that are bad and some that are good.

428
00:42:45,760 --> 00:42:53,100
And for you to be able to review that and have the knowledge to actually say, OK, that one is actually good, let's expand on that one. Why don't you check X, Y and Z?

429
00:42:54,080 --> 00:43:00,540
Let's go look at the code and and see if there's any bad queries that are being issued because of this like index structure or whatever.

430
00:43:02,140 --> 00:43:10,200
That's hugely valuable and the tooling can accelerate that work. So my hope is that

431
00:43:10,200 --> 00:43:15,300
they would see it not as an existential threat, but as a potential force multiplier.

432
00:43:18,500 --> 00:43:25,580
[CLAIRE] Are DBAs and SREs part of your target audience today for the VS Code extension for PostgreSQL?

433
00:43:25,880 --> 00:43:30,000
Or do you envision that they will be part of your target audience in the future?

434
00:43:32,360 --> 00:43:34,000
Should a DBA go and check it out right now?

435
00:43:35,180 --> 00:43:35,660
[ROB] I think so.

436
00:43:35,810 --> 00:43:40,860
I mean, you know, I'm not myself a DBA or SRE.

437
00:43:40,910 --> 00:43:43,280
I mean, I've done some of that work,

438
00:43:43,500 --> 00:43:48,280
but I would say that it would be awesome to have them use it

439
00:43:48,400 --> 00:43:50,340
and then tell us why it doesn't work for them.

440
00:43:52,100 --> 00:43:54,960
And we have, for instance, the performance metrics

441
00:43:55,080 --> 00:43:59,940
and the Copilot functionality to ingest some of the dashboard metrics

442
00:44:00,160 --> 00:44:04,800
and investigate the database to understand where there might be performance issues

443
00:44:05,080 --> 00:44:10,420
or why are there locks happening and all of a sudden my APIs are freezing up.

444
00:44:11,940 --> 00:44:16,820
This is something that we definitely want it to be useful today for.

445
00:44:17,080 --> 00:44:22,480
And if it's not, and if we fall short, then we would love to understand what we can do better.

446
00:44:26,420 --> 00:44:31,040
[CLAIRE] Switching gears for a sec, one of the things that I think is really interesting, and as

447
00:44:31,300 --> 00:44:37,100
one of the co-creators, you might not have been involved in thinking about like, how are we going

448
00:44:37,100 --> 00:44:41,980
to launch this? Or how are we going to announce this? Because sometimes those discussions are

449
00:44:42,160 --> 00:44:48,040
handled more on the marketing side or the product management side of things. But I think it's so

450
00:44:48,200 --> 00:44:54,600
cool that it was initially launched at PyCon. And I know you corrected me earlier in the conversation.

451
00:44:54,660 --> 00:44:58,040
you're like, yeah, PyCon and MS Build, but PyCon came first.

452
00:44:59,250 --> 00:45:04,180
It was late April, early May, whereas I feel like MS Build was more middle of May.

453
00:45:04,720 --> 00:45:12,200
And I just, it's, PyCon is such a popular, I mean, obviously there's PyCons all over the world

454
00:45:12,720 --> 00:45:17,160
and in specific targeted local regions.

455
00:45:17,330 --> 00:45:24,280
But the one where it was announced was the big US-wide, I forget what city it was in last year.

456
00:45:24,380 --> 00:45:25,160
Was it Salt Lake? [I think New York.]

457
00:45:25,510 --> 00:45:25,900
I don't know,

458
00:45:26,920 --> 00:45:27,840
it moves around.

459
00:45:28,560 --> 00:45:31,000
It'll be in a particular city for two years

460
00:45:31,160 --> 00:45:33,500
and then it goes to another location and another location.

461
00:45:35,120 --> 00:45:37,140
But it's just there's so much buzz,

462
00:45:37,320 --> 00:45:38,180
there's so much energy,

463
00:45:38,480 --> 00:45:39,260
there's so much excitement.

464
00:45:39,350 --> 00:45:41,880
I just think it was a perfect place to roll it out.

465
00:45:42,480 --> 00:45:44,580
But I'm curious, were you part of that?

466
00:45:45,240 --> 00:45:48,940
Thinking about how to how to introduce it to developers?

467
00:45:51,940 --> 00:45:56,080
[ROB] A little bit, but not so much the decision-making,

468
00:45:56,300 --> 00:45:59,120
sort of like here's the deadline to get it all together, right?

469
00:45:59,380 --> 00:46:05,120
Because I was specifically working on the Copilot functionality

470
00:46:08,119 --> 00:46:15,700
and the GitHub Copilot agent mode released to GA a month before our launch.

471
00:46:15,700 --> 00:46:17,940
And we were targeting build the whole time,

472
00:46:17,990 --> 00:46:19,780
so maybe that's why it's kind of in my head.

473
00:46:21,520 --> 00:46:27,020
And yeah, PyCon was, I think, the week before, and there was a talk announcing it, which was

474
00:46:27,320 --> 00:46:27,640
so awesome.

475
00:46:28,260 --> 00:46:28,940
I love PyCon.

476
00:46:29,510 --> 00:46:35,500
I mean, I actually attribute it to changing my career path in 2008.

477
00:46:35,840 --> 00:46:42,640
I just took myself to PyCon Chicago to see all of the amazing work that people were doing

478
00:46:43,050 --> 00:46:46,800
and ended up kind of switching jobs because I was like, oh, I want to be doing stuff more

479
00:46:46,940 --> 00:46:47,220
like this.

480
00:46:47,580 --> 00:46:51,400
So yeah, totally, PyCon is such an amazing conference.

481
00:46:52,960 --> 00:46:55,660
But yeah, we were pretty heads down in trying to get it to work.

482
00:46:57,540 --> 00:46:59,360
I mean, it was working, but we just

483
00:46:59,470 --> 00:47:03,100
wanted to put the best extension that we could out there.

484
00:47:03,320 --> 00:47:05,620
So we were kind of targeting Build,

485
00:47:07,140 --> 00:47:09,840
but yeah, that was sort of conversations,

486
00:47:09,930 --> 00:47:14,280
like you said, by marketing and other folks.

487
00:47:15,480 --> 00:47:17,140
[CLAIRE] What do you love,

488
00:47:17,590 --> 00:47:23,140
I mean, this is like a softball question, but what do you love most about this thing that

489
00:47:23,220 --> 00:47:23,600
you built?

490
00:47:24,780 --> 00:47:27,360
And it doesn't have to actually, the answer can be anything.

491
00:47:27,600 --> 00:47:31,820
It can be about the experience building it, or about the thing itself.

492
00:47:34,940 --> 00:47:40,660
[ROB] I think it's the ability to leverage the Copilot

493
00:47:40,700 --> 00:47:53,980
functionality. I'm very interested in how AI and LLMs are changing a lot of stuff, I mean,

494
00:47:53,980 --> 00:48:03,820
everything, but engineers' workflows. So to be a part of figuring that out and advancing that

495
00:48:03,940 --> 00:48:06,020
is really cool.

496
00:48:07,340 --> 00:48:11,400
And GitHub Copilot is such a great platform to build on

497
00:48:11,680 --> 00:48:17,400
because the users just have to have a license to those LLMs.

498
00:48:18,500 --> 00:48:21,900
They don't have to go and set up different services

499
00:48:22,340 --> 00:48:24,460
or put in API keys.

500
00:48:24,620 --> 00:48:25,760
It's kind of there,

501
00:48:25,760 --> 00:48:28,980
and as an extension author, we get to just hook into it

502
00:48:29,100 --> 00:48:31,880
and enhance the agents that are already there.

503
00:48:31,960 --> 00:48:35,760
So I love that part of it,

504
00:48:35,900 --> 00:48:41,300
and I'm looking forward to like continuing to build out that, that, you know, AI functionality.

505
00:48:41,500 --> 00:48:41,540
quality.

506
00:48:44,340 --> 00:48:52,140
[CLAIRE] As you talk about agents and GitHub Copilot, I know that as we were preparing for the episode

507
00:48:52,570 --> 00:49:00,480
we started talking about the challenges with moving goal posts that's, you know if you

508
00:49:00,500 --> 00:49:05,620
imagine you're playing soccer, or football as my European friends call it, and the goalposts

509
00:49:05,620 --> 00:49:10,900
are moving in the middle of the game it makes it so much harder. And I feel like you had a timing

510
00:49:11,120 --> 00:49:16,920
issue, with the rug moving out from under you as you were trying to hit your deadlines for

511
00:49:17,080 --> 00:49:22,180
PyCon and MS Build. Would you agree or disagree?

512
00:49:22,540 --> 00:49:23,000
[ROB] Yeah, for sure.

513
00:49:23,010 --> 00:49:30,500
That was the way to integrate with GitHub Copilot was chat participants,

514
00:49:30,890 --> 00:49:34,920
so you'd have that @pgsql handle,

515
00:49:35,390 --> 00:49:39,880
and then when you would chat at that handle, it routes to your extension,

516
00:49:40,780 --> 00:49:48,720
and then you're able to use sort of the bare bones completions APIs for the LLM.

517
00:49:48,750 --> 00:49:55,580
So you have sort of a lot of control over how the LLMs are used to respond to that chat message,

518
00:49:55,730 --> 00:49:57,200
and it's sort of like a one and done.

519
00:49:57,920 --> 00:50:03,060
You go and process and then you give your response and it shows up in the chat window, which is awesome.

520
00:50:04,000 --> 00:50:06,640
And that chat participant still works and is great.

521
00:50:07,580 --> 00:50:16,060
But then they GA'd agent mode, which is a very different workflow where you're not actually using the LLMs directly.

522
00:50:16,520 --> 00:50:31,260
You're just giving tools to the LLMs and trying to describe the tools and organize the API for the tools in a way that the agents understand how to use them and hand that off to the agents and let them go do their work.

523
00:50:31,960 --> 00:50:37,480
So it's a pretty big pivot to go from this, you know, chat, this ask mode, to agent mode.

524
00:50:37,580 --> 00:50:39,240
And I think it's the right pivot, right?

525
00:50:39,480 --> 00:50:47,400
It sort of allows GitHub Copilot to own the orchestration of the agents and improve on

526
00:50:47,580 --> 00:50:49,040
that at very rapid speed.

527
00:50:50,220 --> 00:50:54,360
And then the extensions sort of enhance the agents with these capabilities and tools.

528
00:50:55,500 --> 00:50:59,280
But it was tough to switch gears and sort of add that functionality a month before.

529
00:50:59,600 --> 00:51:03,760
And I actually leveraged GitHub Copilot significantly.

530
00:51:04,030 --> 00:51:08,220
I think that's when I started kind of not writing a lot of code anymore.

531
00:51:08,350 --> 00:51:15,320
It was actually building agent mode with agent mode for the release of the extension,

532
00:51:16,940 --> 00:51:20,480
and we were lucky enough to get it in in time.

533
00:51:20,740 --> 00:51:24,660
Usually you don't want to be adding new big features right before a release,

534
00:51:25,930 --> 00:51:27,100
but we discussed it with the team,

535
00:51:27,240 --> 00:51:31,240
and it was, you know, we tested it thoroughly.

536
00:51:31,290 --> 00:51:31,800
It was solid.

537
00:51:32,080 --> 00:51:34,000
And we sent it out with that functionality.

538
00:51:34,280 --> 00:51:41,340
So it does kind of represent the pace at which all of this is shifting and continues to shift.

539
00:51:41,680 --> 00:51:51,560
And it takes a lot to kind of stay up to speed on how, you know, LLM usage and agentic coding patterns are moving.

540
00:51:52,330 --> 00:51:53,000
But that's exciting.

541
00:51:53,220 --> 00:51:55,140
It's a really exciting industry to be a part of.

542
00:51:55,160 --> 00:51:58,540
You're constantly have to stay on your toes and say, okay, okay, what's next?

543
00:51:58,620 --> 00:52:03,560
How can I help, you know, actually push forward the boundaries,

544
00:52:04,100 --> 00:52:09,200
and then how do I make sure that this other technique that looks like it's about to be

545
00:52:09,460 --> 00:52:13,160
the thing that we now all do, you know, let's account for that and make sure that we're,

546
00:52:13,420 --> 00:52:15,020
you know, building towards that as well.

547
00:52:15,160 --> 00:52:18,040
So it's a very exciting time.

548
00:52:22,280 --> 00:52:28,420
[CLAIRE] Well with all this change there's a phrase, an adage I guess is the right term, that says that the most familiar tool is

549
00:52:28,500 --> 00:52:33,240
always the best tool Or maybe it's backwards, maybe it's the best tool is

550
00:52:34,000 --> 00:52:42,660
always the most familiar tool and I don't know like for people that have never

551
00:52:43,100 --> 00:52:49,060
worked with a Postgres extension in VS Code or maybe don't even use VS Code yet

552
00:52:49,200 --> 00:52:53,760
who were using other IDEs to work with Postgres,

553
00:52:54,460 --> 00:52:55,800
I don't know,

554
00:52:55,980 --> 00:52:58,640
why shouldn't they keep doing what they've been doing?

555
00:52:59,180 --> 00:53:03,140
I'm not trying to make a sales pitch or give you a softball to make a sales pitch.

556
00:53:03,300 --> 00:53:09,640
I just wonder sometimes about what is the motivation to try something different?

557
00:53:10,920 --> 00:53:12,660
[ROB] Yeah, I think it's a good question.

558
00:53:12,760 --> 00:53:19,320
And then there is, there is a lot of value in doing what, you know, works.

559
00:53:20,460 --> 00:53:25,020
However, the industry is changing.

560
00:53:25,980 --> 00:53:37,880
I know through my career, I've had to come up to speed on new techniques, new topics, new technologies that become the sort of dominant technology.

561
00:53:38,500 --> 00:53:50,540
And if I don't go and level up my understanding and try new things, then I end up getting a little bit left behind and having to catch up.

562
00:53:51,040 --> 00:54:15,640
And I think that, you know, if what you're doing works in those IDEs, great. If you want to try something new that exposes you to this new AI functionality and brings you into a developer environment, even if you're not, maybe you're not a developer, but I mean, VS Code, if you're organizing SQL files, that's coding, right?

563
00:54:15,760 --> 00:54:25,420
I think this difference between developer, non-developer, especially in the era of agentic coding, is dissolving.

564
00:54:25,920 --> 00:54:26,440
We're all developers.

565
00:54:27,620 --> 00:54:34,300
And if you want to kind of try that and see what it's like, see what could be possible, it's not easy.

566
00:54:34,880 --> 00:54:40,440
And this is something that's important to realize about AI and agentic tooling.

567
00:54:41,300 --> 00:54:43,020
It doesn't make it push-button easy.

568
00:54:44,000 --> 00:54:45,220
Set your expectations correctly.

569
00:54:45,300 --> 00:54:49,700
But if you work to try to leverage it

570
00:54:49,880 --> 00:54:50,880
and leverage something new

571
00:54:51,370 --> 00:54:54,560
you may find that you're able to do

572
00:54:56,250 --> 00:54:57,660
your job or the things

573
00:54:57,910 --> 00:55:00,420
even things beyond what you're normally used to doing

574
00:55:01,520 --> 00:55:02,980
in a lot more efficient way

575
00:55:03,110 --> 00:55:04,920
so I would just invite people to

576
00:55:06,140 --> 00:55:08,860
experiment and try new things always

577
00:55:10,300 --> 00:55:12,080
because there's always room for improvement.

578
00:55:14,780 --> 00:55:20,680
[CLAIRE] We Simon Willison on the podcast a couple of episodes back during the summer and,

579
00:55:21,960 --> 00:55:28,660
I don't know, for anyone listening who knows Simon, or reads his blog, or has heard him interviewed

580
00:55:28,840 --> 00:55:37,880
he is knowledgeable, crazy smart, and very exuberant, which makes him really fun to

581
00:55:37,900 --> 00:55:44,840
listen to because he brings a lot of passion to his work. But one of the things he said is that

582
00:55:45,020 --> 00:55:53,500
for people, like you're, I think, recommending that people roll up their sleeves and try to

583
00:55:53,710 --> 00:55:59,760
figure out, experiment and figure out like how their workflows could change or could be different

584
00:55:59,910 --> 00:56:06,360
or could get better using these tools. But he gave even more basic advice when I pushed for someone

585
00:56:06,380 --> 00:56:11,340
who felt like, oh my gosh, I'm years behind. How do I get started? He's like, you know, just talk

586
00:56:11,500 --> 00:56:17,100
to some of the LLMs. He's like, sometimes I get them to help me make a, I don't remember the

587
00:56:17,220 --> 00:56:22,500
specific example, I think it was salsa. It was something to do with food and he was having

588
00:56:22,680 --> 00:56:28,940
them give him recipes and then he had it change the recipe and make it even tastier, and make it

589
00:56:28,960 --> 00:56:38,480
even tastier. And I thought that bringing that interaction with the LLMs into even non-coding

590
00:56:38,700 --> 00:56:45,120
things to get comfortable with it was an interesting approach. Maybe at a more basic level, but

591
00:56:45,260 --> 00:56:48,820
that's probably where some people need to start or are more comfortable starting.

592
00:56:50,340 --> 00:56:55,420
[ROB] Absolutely, I mean I use it for literally everything, from my

593
00:56:56,730 --> 00:57:03,320
shopping to recipes to, you know, it's such a useful technology if you

594
00:57:03,950 --> 00:57:09,720
learn how to leverage it well and, like you said, that iterative hey do it this

595
00:57:09,740 --> 00:57:14,780
way now, make it better, or that's not quite right. You know, the LLMs only have the context that you

596
00:57:14,920 --> 00:57:18,880
give it. They're a blank slate and you have to say exactly what you need from it and all the

597
00:57:20,340 --> 00:57:26,300
backstory that's important. And that's a skill. That's a absolute skill. That's, you know,

598
00:57:26,760 --> 00:57:32,920
in the industry nowadays it's called context engineering. But you're engineering the context

599
00:57:33,020 --> 00:57:35,140
so that the LLM does the right thing,

600
00:57:35,800 --> 00:57:38,080
and that applies everywhere.

601
00:57:38,460 --> 00:57:41,200
If you're trying to get it to build a good salsa,

602
00:57:41,420 --> 00:57:45,320
you're trying to get it to debug a deep technical problem with Postgres,

603
00:57:45,980 --> 00:57:47,420
that applies across the board.

604
00:57:50,240 --> 00:57:54,540
[CLAIRE] You know that demo you gave on VS Code Live with Olivia Guzzardo?

605
00:57:55,480 --> 00:57:58,040
When was that? Do you remember? Like what month was that?

606
00:57:59,100 --> 00:58:02,020
[ROB] That was May, close after the launch.

607
00:58:03,740 --> 00:58:06,500
[CLAIRE] Okay. I thought it was a good demo.

608
00:58:07,200 --> 00:58:09,160
I'm wondering if I should link to it in the show notes.

609
00:58:10,120 --> 00:58:12,200
Is it? Or do you have a better, newer one?

610
00:58:12,640 --> 00:58:13,420
Not that it wasn't good,

611
00:58:13,660 --> 00:58:15,880
but that you maybe have something you prefer that's newer.

612
00:58:17,300 --> 00:58:19,500
[ROB] No, I think that's a great resource,

613
00:58:19,820 --> 00:58:23,220
and we're looking to come out with more video content

614
00:58:25,620 --> 00:58:27,380
showcasing some of the capabilities

615
00:58:27,760 --> 00:58:31,420
but I think that live stream is a good public video to showcase.

616
00:58:32,360 --> 00:58:38,120
[CLAIRE] Okay because I'm a big believer in "show, don't tell". I mean I love the fact that earlier in

617
00:58:38,360 --> 00:58:44,080
today's conversation you enumerated kind of all of the capabilities in this new thing and

618
00:58:44,780 --> 00:58:50,740
again, this podcast is not meant to be a marketing vehicle for it. I really wanted to talk to you

619
00:58:51,260 --> 00:58:56,100
and about what it was like to build it, and how you thought about developer experience, and

620
00:58:56,420 --> 00:59:00,260
how you think about how AI is changing the world, and you are doing all those things for us, which

621
00:59:00,260 --> 00:59:07,080
is great. But I imagine some listeners are going to want to go check it out. So I will include

622
00:59:07,090 --> 00:59:12,680
a link to that demo from VS Code Live in the show notes. And I think the other thing I will

623
00:59:12,700 --> 00:59:18,680
include is Matt McFarland's talk at POSETTE earlier this year too.

624
00:59:20,000 --> 00:59:23,140
POSETTE 2025, which is a virtual Postgres conference,

625
00:59:23,260 --> 00:59:24,620
so it's a pretty good video,

626
00:59:26,140 --> 00:59:28,280
and I will link to that one too.

627
00:59:29,200 --> 00:59:30,360
[ROB] Yeah, that one's a great one,

628
00:59:30,420 --> 00:59:35,840
it's shorter and more kind of an overview and demonstration of all the different types of

629
00:59:36,080 --> 00:59:42,520
functionality that the extension provides. So I'd recommend folks maybe look at Matt's talk first,

630
00:59:42,670 --> 00:59:51,520
and if you're interested in I think it's like an hour long coding session with Olivia in the

631
00:59:51,550 --> 00:59:58,300
VS Code Live stream, that's another place to look at more of the Copilot oriented functionality.

632
01:00:00,680 --> 01:00:09,800
[CLAIRE] One of the things you said earlier, which I want to make sure nobody missed, because, okay, I work on the Postgres open source team at Microsoft,

633
01:00:11,540 --> 01:00:17,160
so occasionally I will absolutely help out my Azure teammates, as I should.

634
01:00:17,270 --> 01:00:22,220
Microsoft pays my salary, and so that makes sense, plus they're good people.

635
01:00:23,240 --> 01:00:26,600
But my main focus is with community work and Postgres open source,

636
01:00:28,120 --> 01:00:28,220
and I have, and I can actually only think of two people that have said this to me, but

637
01:00:32,540 --> 01:00:39,460
there have been people who sometimes, they still see Microsoft through that ten, fifteen year

638
01:00:39,640 --> 01:00:46,480
old lens of being anti-open source. You know, back in the days of, what was it called?

639
01:00:46,760 --> 01:00:49,940
Embrace, extinguish, something, something.

640
01:00:50,000 --> 01:00:53,180
It was a very negative part of Microsoft's past.

641
01:00:53,440 --> 01:00:59,180
Whereas these days, like I feel from inside the company that Microsoft is really, really

642
01:00:59,500 --> 01:01:02,220
supportive of a lot of open source projects, including Postgres.

643
01:01:03,340 --> 01:01:09,240
Anyway, the point is that the fact that this new VS Code extension for PostgreSQL works really

644
01:01:09,520 --> 01:01:13,540
well with any Postgres, I think that's fantabulous.

645
01:01:14,140 --> 01:01:18,920
That means I can recommend it to anybody I know in the Postgres open source community

646
01:01:19,360 --> 01:01:24,040
and users, whether they run on-prem or on other clouds with other hyperscalers, whatever.

647
01:01:24,700 --> 01:01:25,460
I think that's awesome.

648
01:01:25,740 --> 01:01:29,760
But I'm curious, and maybe you can't tell me, was there a debate about that?

649
01:01:30,120 --> 01:01:35,640
Was there any discussion or was it always obvious that that's how it was going to be built?

650
01:01:37,360 --> 01:01:45,900
[ROB] It was always obvious how that that we wanted to support and make a great experience for any

651
01:01:46,080 --> 01:01:54,780
Postgres user. That's been the goals from the start. There is, I think the debate,

652
01:01:55,460 --> 01:01:56,460
and it's not really a debate,

653
01:01:56,550 --> 01:01:58,960
I mean Microsoft's building this extension,

654
01:02:00,580 --> 01:02:02,200
we want to have the,

655
01:02:02,470 --> 01:02:03,780
like there's things that we can leverage

656
01:02:04,140 --> 01:02:05,960
when it is an Azure Flexible server,

657
01:02:07,119 --> 01:02:08,880
an Azure Postgres database,

658
01:02:10,180 --> 01:02:12,120
that are special functionality

659
01:02:12,340 --> 01:02:15,540
that's not available to other types of Postgres.

660
01:02:16,420 --> 01:02:17,980
So we do build out those things

661
01:02:18,380 --> 01:02:19,100
like Entra authentication.

662
01:02:20,140 --> 01:02:22,280
[CLAIRE] Or the Azure monitoring hooks you mentioned earlier,

663
01:02:22,980 --> 01:02:24,260
[ROB] Yeah, the Azure monitoring hooks,

664
01:02:24,580 --> 01:02:40,560
exactly. With the server dashboard, you get metrics that are generally available with any Postgres. If it's an Azure Flexible server, now we have this enhanced functionality.

665
01:02:40,600 --> 01:02:46,660
We want to support the entire user base of Postgres, whether you're on Azure or not.

666
01:02:47,960 --> 01:02:56,880
We want to really enhance the experience of Postgres users in VS Code and users that are using GitHub Copilot.

667
01:02:58,140 --> 01:03:03,300
So we're not specific to the Azure Postgres functionality.

668
01:03:03,380 --> 01:03:16,180
And so if you have any listeners are using the extension and have suggestions on ways to improve it for the general Postgres use case, please do let us know.

669
01:03:16,890 --> 01:03:22,380
Go to our GitHub discussions or issues and submit feature requests,

670
01:03:22,470 --> 01:03:26,200
we are looking to support you very well.

671
01:03:27,920 --> 01:03:34,640
[CLAIRE] And we will drop a link to that GitHub discussions area in the show notes as well to make

672
01:03:34,660 --> 01:03:41,060
it easy for people to submit feedback or ideas. And I love that you're going out of your way to

673
01:03:41,460 --> 01:03:48,120
invite that too. Okay, so I have a really random question I want to ask you.

674
01:03:49,860 --> 01:03:55,200
When David Rowley, who is a Postgres committer, Postgres major contributor, works at Microsoft,

675
01:03:56,640 --> 01:04:02,040
really brilliant engineer from New Zealand, okay, now I'm telling you too much. When he was on the

676
01:04:02,060 --> 01:04:08,280
show and he told his origin story, it turns out he worked in a cheese factory and that

677
01:04:09,020 --> 01:04:16,400
experience, and he was not initially there as a developer, but that led to Postgres for him.

678
01:04:16,950 --> 01:04:20,860
And then somebody else said, oh, I have a cheese story in my early Postgres days. And somebody

679
01:04:20,910 --> 01:04:25,040
else raised their hand and they had a cheese story that related to their work in Postgres.

680
01:04:25,240 --> 01:04:28,540
So I don't know, do you have, is there a cheese story in your background?

681
01:04:30,660 --> 01:04:32,020
[ROB] I don't know if there's a cheese story that directly links me to Postgres, but there is

682
01:04:38,550 --> 01:04:46,060
a sort of odd job that I had that maybe put me towards the path of developing, being a

683
01:04:46,300 --> 01:04:49,820
software engineer instead of what I was doing that I could share.

684
01:04:50,560 --> 01:04:51,320
[CLAIRE] Okay, go for it.

685
01:04:52,000 --> 01:05:02,260
[ROB] So this was when I was in L.A., you know, busking on the streets, busking on Venice Beach and, you know, taking odd jobs from Craigslist.

686
01:05:04,079 --> 01:05:06,840
One of the jobs that I found was a data entry job.

687
01:05:07,420 --> 01:05:11,080
And it just was really, you know, generic, like data entry, like $10 an hour.

688
01:05:11,620 --> 01:05:11,700
Cool.

689
01:05:12,170 --> 01:05:13,740
I was like, all right, let me go into this.

690
01:05:14,480 --> 01:05:17,120
So I go to Beverly Hills and go into this office,

691
01:05:17,440 --> 01:05:19,140
and the guy greets me.

692
01:05:19,200 --> 01:05:20,420
He's like, oh, you're the one from Craigslist?

693
01:05:20,570 --> 01:05:20,760
All right.

694
01:05:20,900 --> 01:05:31,900
And he sits me down at a computer and he says, okay, what you're going to do is you're going to create a email address, use Hotmail, use Gmail, whatever you're used to.

695
01:05:32,040 --> 01:05:34,700
This is, you know, back in 2006, I think.

696
01:05:36,520 --> 01:05:45,400
And I went through that and it's like, okay, now you're going to go to the MTV site and create an MTV account with the email account that you just made.

697
01:05:45,980 --> 01:05:48,720
It's like, okay, log it on the spreadsheet.

698
01:05:49,400 --> 01:05:52,820
And then you're going to go to the Total Request Live website.

699
01:05:53,960 --> 01:05:55,780
And I looked at him like, what?

700
01:05:56,460 --> 01:06:00,740
And he's like, listen, we're Enrique Iglesias' management company.

701
01:06:01,360 --> 01:06:05,100
And it's really important to him that he win Total Request Live.

702
01:06:06,119 --> 01:06:09,280
So you're just going to vote for Enrique Iglesias.

703
01:06:10,099 --> 01:06:11,660
And that was the job.

704
01:06:11,730 --> 01:06:12,900
That was the data entry job.

705
01:06:13,640 --> 01:06:16,380
So I spent one day there.

706
01:06:16,720 --> 01:06:21,920
And as I was leaving, I mean, he seemed like embarrassed and he was like, listen, if you're

707
01:06:21,960 --> 01:06:23,940
not coming back, I was like, I'm not going to come in tomorrow.

708
01:06:24,100 --> 01:06:26,620
But it's like, if you're not coming back, you're never coming back.

709
01:06:26,840 --> 01:06:29,580
It like kind of understanding the ridiculousness of the job.

710
01:06:30,480 --> 01:06:35,040
And I think that was a little bit of a turning point for me to be like, I think I'm going

711
01:06:35,040 --> 01:06:35,740
to get out of L.A.

712
01:06:38,100 --> 01:06:44,400
[CLAIRE] Yeah, you decided you wanted I don't know to do something more meaningful,

713
01:06:44,840 --> 01:06:46,680
was that why it was a turning point ,or you tell me I don't want to put words in your mouth.

714
01:06:49,740 --> 01:06:54,260
[ROB] Yeah, yeah it was just it was sort of like you know the ridiculousness of you know sitting

715
01:06:54,440 --> 01:07:03,620
and voting for somebody with fake accounts is like I am yeah gonna be on a path to go back

716
01:07:03,640 --> 01:07:08,060
East and like figure out like what I am actually doing instead of this

717
01:07:08,700 --> 01:07:11,140
and that kind of led me down to finding the programming job.

718
01:07:13,300 --> 01:07:15,220
[CLAIRE] Is music still part of your life though?

719
01:07:15,700 --> 01:07:16,660
[ROB] Oh, absolutely.

720
01:07:16,080 --> 01:07:20,200
[CLAIRE] I mean, it must be because the bio, the bio pic you sent me, which I had to crop,

721
01:07:20,340 --> 01:07:25,840
so people probably can't tell, but you were holding a guitar and you were wearing a t-shirt

722
01:07:25,980 --> 01:07:28,300
with the name of a band emblazoned on it, right?

723
01:07:29,460 --> 01:07:46,280
[ROB] Yes. Yeah. I still do music, uh, a lot. Actually in some of our internal demos, that maybe you've seen at the all hands meetings that we have, I slip in some of my music in the background or at the end,

724
01:07:46,480 --> 01:07:51,160
these little jingles. But yeah, I

725
01:07:51,320 --> 01:07:57,100
recently did some music work for a play

726
01:07:57,280 --> 01:07:58,360
in Philadelphia.

727
01:07:58,980 --> 01:08:04,280
I'm working on a live set to go out and do some more gigging. So, you know,

728
01:08:04,340 --> 01:08:06,500
it's, it's tough with, with all the work and the, you know,

729
01:08:06,500 --> 01:08:09,660
I got a new kid, to find time for it,

730
01:08:09,680 --> 01:08:11,940
but music is still a huge part of my life.

731
01:08:13,340 --> 01:08:17,500
[CLAIRE] Do you think it makes you a better engineer and better architect?

732
01:08:19,140 --> 01:08:23,660
[ROB] I do think that there's an interesting connection to creativity,

733
01:08:24,359 --> 01:08:29,160
and I've done a lot of improvisational music.

734
01:08:29,680 --> 01:08:42,140
And sometimes when I'm thinking about a problem or working in code, there's an improvisational aspect of like, okay, well, what's a creative solution that I can apply here?

735
01:08:42,960 --> 01:09:00,440
And I think actually in this like age of AI coding, the creativity of how to apply AI, because it's such a wildly flexible tool and really has no like specific uses that are like, you know, super well, like, oh, you do this, this and this, right?

736
01:09:00,500 --> 01:09:02,359
It's like, use it however you can.

737
01:09:03,080 --> 01:09:08,319
There's an element of creativity that I really enjoy about life in general

738
01:09:08,540 --> 01:09:11,720
and like in my music being creative and then also now.

739
01:09:13,060 --> 01:09:15,680
And, you know, there's a lot of creativity

740
01:09:15,830 --> 01:09:19,240
that you can apply in architecture, in engineering

741
01:09:20,069 --> 01:09:23,100
that I do think that I get to leverage.

742
01:09:26,120 --> 01:09:27,520
[CLAIRE] Yeah and I guess if you do improv

743
01:09:28,359 --> 01:09:33,660
you've had to get comfortable with experimentation and trying things and

744
01:09:33,700 --> 01:09:37,200
also I imagine that you try things sometimes in improv and they don't

745
01:09:37,200 --> 01:09:42,460
always work, and maybe you've gotten comfortable with that.

746
01:09:43,640 --> 01:09:50,359
[ROB] Oh yeah, Yeah, failing failing is a big part of creativity and

747
01:09:50,440 --> 01:09:54,100
and a lot of improvisational music, that it's like, it's not failure.

748
01:09:54,400 --> 01:09:56,800
It's just like, oh, this sound was here,

749
01:09:57,000 --> 01:09:57,500
and now we're moving in another direction and everything's okay.

750
01:09:59,700 --> 01:10:01,900
Like it doesn't have to be perfect all the time.

751
01:10:02,240 --> 01:10:04,240
That's kind of the joy of it.

752
01:10:04,660 --> 01:10:09,820
There's joy in messiness, in creative processes, that

753
01:10:10,880 --> 01:10:15,140
I really value even, even if it's like, you know,

754
01:10:15,300 --> 01:10:18,320
not aesthetically or not super pleasing to the ear,

755
01:10:18,360 --> 01:10:21,660
it's just like seeing that messiness and, you know, occupying that.

756
01:10:21,720 --> 01:10:23,360
And then where does that messiness lead you to?

757
01:10:24,860 --> 01:10:26,700
That I think is, you know, really awesome.

758
01:10:26,880 --> 01:10:28,860
And that's, that's what you need to,

759
01:10:29,400 --> 01:10:32,060
that's the mindset you need when doing experimentation.

760
01:10:33,400 --> 01:10:35,640
And like we were talking about trying new things,

761
01:10:36,100 --> 01:10:38,700
why not just stick with what we know?

762
01:10:39,420 --> 01:10:42,320
And it's like, well, when we experiment and we see what works,

763
01:10:42,440 --> 01:10:46,180
what doesn't work, and we fail and learn from it, and grow,

764
01:10:47,720 --> 01:10:52,160
that's just like really interesting to me in all things.

765
01:10:52,300 --> 01:10:58,960
[CLAIRE] What you're saying resonates so much with me because I have kind of an unusual job.

766
01:10:59,340 --> 01:11:03,660
And one of the things that I think helps me is that I'm willing to fail.

767
01:11:04,360 --> 01:11:06,160
I'm willing to say stupid things.

768
01:11:06,440 --> 01:11:10,900
I'm willing to, I mean, like classic, classic, silly example.

769
01:11:11,160 --> 01:11:15,280
Like when I'm writing something or trying to come up with a title, I often say that I

770
01:11:15,380 --> 01:11:20,680
have to come up with like at least 20 really bad titles in order to get to a really good

771
01:11:20,950 --> 01:11:21,080
title.

772
01:11:22,080 --> 01:11:27,180
And I'm always encouraging other people who, who kind of have a little bit of stage

773
01:11:27,300 --> 01:11:28,280
fright or, you know what I mean?

774
01:11:28,280 --> 01:11:30,220
They want to write the perfect title.

775
01:11:30,330 --> 01:11:32,320
They want to come up with the perfect approach.

776
01:11:32,490 --> 01:11:36,440
And I'm like, no, just get the first draft out there.

777
01:11:36,610 --> 01:11:44,700
It just, be willing to produce something bad so it can be iterated on to get to

778
01:11:45,080 --> 01:11:46,260
become something good.

779
01:11:46,700 --> 01:11:47,920
Anyway, that's my philosophy

780
01:11:48,340 --> 01:11:52,940
and I feel like it connects a lot to what you were just saying.

781
01:11:54,080 --> 01:11:59,200
[ROB] Yeah, absolutely and I think that it's like something that people early in their career

782
01:12:00,320 --> 01:12:05,480
it's a hard thing to like kind of internalize and and occupy but as you mature

783
01:12:05,600 --> 01:12:10,980
in your career you get more comfortable with who you are and sort of failures that lead

784
01:12:11,060 --> 01:12:15,760
to success, I have proven track record, I don't need to be perfect all the time, but I'd encourage

785
01:12:15,780 --> 01:12:22,720
folks to kind of chase that, to say, it's okay, it's okay if it's messy. And, you know,

786
01:12:22,920 --> 01:12:28,240
own that, and I think that that helps grow. Absolutely.

787
01:12:30,120 --> 01:12:32,700
[CLAIRE] I really appreciate you coming onto the show today

788
01:12:33,860 --> 01:12:38,220
and using the new VS Code extension for PostgreSQL,

789
01:12:38,820 --> 01:12:41,720
which I know is wildly popular and people are really excited about,

790
01:12:41,980 --> 01:12:44,500
but almost using that as an excuse to just talk.

791
01:12:44,840 --> 01:12:48,920
I love learning more about your background and your philosophies.

792
01:12:50,820 --> 01:13:06,520
I also want to give a shout out to the fact that Elizabeth Christensen reached out to me a couple months back about a monthly virtual meetup that she has started organizing along with Ryan Booz on the behest of PG US.

793
01:13:07,070 --> 01:13:09,440
And it's called Postgres Meetup for All.

794
01:13:10,140 --> 01:13:18,240
And it sounds like Matt McFarland is going to be a guest on that on Thursday, December 11th to talk about the new VS Code extension.

795
01:13:18,370 --> 01:13:30,920
So for anybody who wants to maybe see a newer demo, or learn more about the latest version of it, I will include a link in the show notes to that as well.

796
01:13:31,440 --> 01:13:34,060
Is that just Matt or is it Matt and you? Do you know?

797
01:13:35,030 --> 01:13:35,780
I think it's Matt.

798
01:13:35,880 --> 01:13:38,440
[ROB] I think that's just Matt, and he's great.

799
01:13:38,820 --> 01:13:40,220
So definitely check that out.

800
01:13:41,190 --> 01:13:42,960
He'll teach you some awesome stuff.

801
01:13:44,100 --> 01:13:49,620
[CLAIRE] Matt asked a question in the chat a few minutes ago, by the way, he wanted to know and and I can't

802
01:13:49,630 --> 01:13:55,860
believe I didn't ask this, I guess I fail as a podcast host today, but he wants to know

803
01:13:56,400 --> 01:14:04,540
if the singer that you were talking about, that you did that data entry job for, which

804
01:14:04,980 --> 01:14:07,140
was Enrique Iglesias, right?

805
01:14:07,270 --> 01:14:08,300
I mean, there's two Iglesiases,

806
01:14:09,630 --> 01:14:11,980
so I sometimes get confused about what the first name is.

807
01:14:12,250 --> 01:14:14,780
But he wants to know, did he win Total Request Live or not?

808
01:14:15,860 --> 01:14:22,380
[ROB] You know, I never looked it up, but me and my wife did just the other night.

809
01:14:22,600 --> 01:14:27,100
I wonder if he actually did, and not during that time period.

810
01:14:28,240 --> 01:14:34,940
I was hoping somebody like the Foo Fighters might have won it, but they also didn't win.

811
01:14:35,800 --> 01:14:36,080
[CLAIRE] Who won?

812
01:14:36,120 --> 01:14:40,040
[ROB] But yeah, no, I think it was mostly like NSYNC.

813
01:14:37,530 --> 01:14:38,140
[CLAIRE] Do you know?

814
01:14:40,480 --> 01:14:43,520
[ROB] And I think during that time period,

815
01:14:43,520 --> 01:14:46,160
it was just like a couple bands that like won it all.

816
01:14:47,460 --> 01:14:50,060
But yeah, Enrique Iglesias did in, I think, 2001,

817
01:14:50,580 --> 01:14:54,520
win it like four times for, or 2002 for Hero.

818
01:14:56,120 --> 01:14:59,540
And I guess he was just chasing that dream

819
01:14:59,580 --> 01:15:01,880
of winning Total Request Live again.

820
01:15:03,100 --> 01:15:03,540
[CLAIRE] Oh my goodness,

821
01:15:03,700 --> 01:15:09,040
I can't even say that Total Request Live is in my vocabulary.

822
01:15:09,400 --> 01:15:10,240
Like I've heard of it.

823
01:15:10,360 --> 01:15:11,600
I don't know much about it at all.

824
01:15:11,780 --> 01:15:16,680
So that's another piece of learning I guess I have to go do after today.

825
01:15:18,400 --> 01:15:18,680
All right.

826
01:15:19,120 --> 01:15:23,180
Before we wrap, is there anything that you want people to know?

827
01:15:23,860 --> 01:15:32,700
Either about Postgres, PostGIS, planetary computing, or the VS Code extension for PostgreSQL, or music?

828
01:15:33,520 --> 01:15:35,900
Anything that I didn't ask that I should have?

829
01:15:37,100 --> 01:15:38,640
[ROB] No, I think we covered a lot.

830
01:15:39,180 --> 01:15:39,460
I would just encourage people to go try the extension

831
01:15:42,300 --> 01:15:44,080
and please let us know what you think,

832
01:15:44,200 --> 01:15:45,500
and ways that we can improve it.

833
01:15:46,380 --> 01:15:50,180
And if you end up using the Copilot functionality,

834
01:15:50,480 --> 01:15:52,980
this is, like I said, an emerging field

835
01:15:53,120 --> 01:15:53,900
that's changing quickly

836
01:15:54,120 --> 01:15:58,140
and would love to hear about how people are leveraging it

837
01:15:58,140 --> 01:15:59,740
in ways that it works and doesn't work,

838
01:15:59,800 --> 01:16:05,020
and just, yeah, getting conversations going about all that.

839
01:16:05,260 --> 01:16:09,420
So, yeah, really appreciate you having me on in this discussion.

840
01:16:09,530 --> 01:16:12,160
I think it was so great to talk about all these topics.

841
01:16:12,480 --> 01:16:17,520
And really appreciate your audience taking the time to listen, and thank you.

842
01:16:18,620 --> 01:16:19,420
[CLAIRE] Thank you, Rob.

843
01:16:20,080 --> 01:16:20,460
All right.

844
01:16:21,080 --> 01:16:23,480
Thank you so much to Rob Emanuele for joining us.

845
01:16:23,760 --> 01:16:29,560
And if you are listening and you like today's episode and you want to hear more of Talking

846
01:16:29,940 --> 01:16:34,780
Postgres, then you should subscribe on Apple, and Spotify, and YouTube, or wherever you get

847
01:16:34,780 --> 01:16:35,380
your podcasts.

848
01:16:35,500 --> 01:16:39,960
And please tell your friends because word of mouth is one of the best,

849
01:16:40,340 --> 01:16:44,160
well, it's a nice gift you can give to your friends, but it's also one of the best ways

850
01:16:44,280 --> 01:16:45,520
to help a podcast succeed.

851
01:16:46,180 --> 01:16:49,240
And if you leave a review, that helps even more people discover it.

852
01:16:49,860 --> 01:16:54,980
You can always get to past episodes and get links to subscribe on the different podcast

853
01:16:55,240 --> 01:17:01,400
platforms by going to TalkingPostgres.com and transcripts are included on the episode

854
01:17:01,660 --> 01:17:04,180
pages there on TalkingPostgres.com as well.

855
01:17:04,880 --> 01:18:37,800
And a big thank you to everybody who joined the live recording today and participated in the live text chat on Discord.