1
00:00:00,001 --> 00:00:06,040
[CLAIRE] Welcome to Talking Postgres, a monthly podcast that was previously called Path to Citus Con,

2
00:00:06,040 --> 00:00:09,400
but we renamed it back in July 2024.

3
00:00:09,400 --> 00:00:15,240
In this podcast, we focus on the human side of Postgres databases and open source.

4
00:00:15,240 --> 00:00:20,120
I want to say thank you to the team at Microsoft for sponsoring this community conversation,

5
00:00:20,120 --> 00:00:22,760
and I'm your host, Claire Giordano.

6
00:00:22,760 --> 00:00:27,720
Today's topic is how I got started as a developer and in Postgres.

7
00:00:27,720 --> 00:00:31,640
With an amazing guest, I want to introduce Tom Lane.

8
00:00:31,640 --> 00:00:35,200
Tom is a Postgres committer and major contributor.

9
00:00:35,200 --> 00:00:41,040
He works at Crunchy Data, and he is prolific when it comes to Postgres development.

10
00:00:41,040 --> 00:00:46,600
Tom is a member of the Postgres Core Team, and he started contributing to Postgres, I

11
00:00:46,600 --> 00:00:50,040
guess about 26 years ago, back in 1998.

12
00:00:50,040 --> 00:00:53,920
And over time, he has worked on most parts of the Postgres code.

13
00:00:53,920 --> 00:00:59,560
He likes working on the planner and anything that involves SQL semantics.

14
00:00:59,560 --> 00:01:05,480
Tom earned a PhD in computer science from Carnegie Mellon University and has been involved

15
00:01:05,480 --> 00:01:09,420
with the Postgres project, like I said before, since 1998.

16
00:01:09,420 --> 00:01:11,800
Welcome Tom.

17
00:01:11,800 --> 00:01:13,680
[TOM] Thanks for having me.

18
00:01:13,680 --> 00:01:15,360
[CLAIRE] I'm really excited.

19
00:01:15,360 --> 00:01:20,040
Today's episode will probably be a little bit longer than usual, but we'll see how we do.

20
00:01:20,040 --> 00:01:25,800
Today's topic, how I got started as a developer and in Postgres, is I think fascinating because

21
00:01:25,800 --> 00:01:31,720
it's so interesting to find out how people got to be where they are and also why they

22
00:01:31,720 --> 00:01:33,360
do what they do.

23
00:01:33,360 --> 00:01:37,520
So let's dive in with, hmm.

24
00:01:37,520 --> 00:01:41,080
We'll start with when you first got involved in programming.

25
00:01:41,080 --> 00:01:42,080
[TOM] Okay.

26
00:01:42,080 --> 00:01:47,120
Well, I was in high school.

27
00:01:47,120 --> 00:01:54,960
The math department at my high school had a teletype, an ASR 33 teletype that was hooked

28
00:01:54,960 --> 00:02:03,600
up on dial-up modem to Honeywell, something or other, I think a 316 that lived down at

29
00:02:03,600 --> 00:02:08,760
the county school building, a school board building.

30
00:02:08,760 --> 00:02:19,160
And they would spend maybe like one or two regular math class sessions on programming.

31
00:02:19,160 --> 00:02:24,680
But the machine was just sitting there after hours and kids could go and play with it after

32
00:02:24,680 --> 00:02:25,680
school if they wanted.

33
00:02:25,680 --> 00:02:29,840
I was a geek, so I wanted to play with this thing.

34
00:02:29,840 --> 00:02:33,400
And there were maybe about a dozen others who felt the same way.

35
00:02:33,400 --> 00:02:37,040
And we would go and write little programs.

36
00:02:37,040 --> 00:02:44,320
We had, let me see, the Honeywell had a BASIC interpreter of some kind.

37
00:02:44,320 --> 00:02:49,280
And we had a couple of spare teletypes on which we would punch up our programs on paper

38
00:02:49,280 --> 00:02:53,400
tape so that when we went to the live machine, we could just feed them into the tape reader

39
00:02:53,400 --> 00:02:55,480
rather than having to type online.

40
00:02:55,480 --> 00:03:04,320
And let's see, the only program I can specifically remember working on back then was I wrote

41
00:03:04,320 --> 00:03:11,680
a program to solve cubic equations, not because I had a need for that functionality exactly.

42
00:03:11,680 --> 00:03:17,080
I found an algorithm for that in a book and it seemed like the right size problem to learn

43
00:03:17,080 --> 00:03:20,920
BASIC with, so that's what I did.

44
00:03:20,920 --> 00:03:29,440
[CLAIRE] All right, so you hung out after school in the math lab, started programming.

45
00:03:29,440 --> 00:03:33,000
You already knew that you were a geek apparently.

46
00:03:33,000 --> 00:03:37,880
And then you went to Carnegie Mellon for university, is that right?

47
00:03:37,880 --> 00:03:38,880
[TOM] Correct.

48
00:03:38,880 --> 00:03:39,880
[CLAIRE] Okay.

49
00:03:39,880 --> 00:03:43,160
And it was not your plan to become a computer person.

50
00:03:43,160 --> 00:03:45,640
I know this because you told me before the show.

51
00:03:45,640 --> 00:03:51,520
Your goal, is it true that your goal was to get a job designing pinball machines?

52
00:03:51,520 --> 00:03:52,520
[TOM] Exactly.

53
00:03:52,520 --> 00:04:03,480
I loved and still love pinball, pool, bowling, anything involving aiming at a target.

54
00:04:03,480 --> 00:04:08,400
I'm not any good at those things, mind you, but I love it.

55
00:04:08,400 --> 00:04:15,320
And I just thought that the coolest job there could possibly be would be to design and build

56
00:04:15,320 --> 00:04:17,720
pinball machines for a living.

57
00:04:17,720 --> 00:04:25,760
So when I went off to CMU, I got accepted into the College of Engineering and the way

58
00:04:25,760 --> 00:04:30,520
they work things there is you don't actually have to declare a specific major until your

59
00:04:30,520 --> 00:04:32,800
sophomore year.

60
00:04:32,800 --> 00:04:35,700
Before that you're just an engineer.

61
00:04:35,700 --> 00:04:41,720
So I took the introductory courses for mechanical engineering and electrical engineering, figuring

62
00:04:41,720 --> 00:04:46,960
that probably mechanical would be the thing to do because back then pinball machines were

63
00:04:46,960 --> 00:04:47,960
mostly mechanical.

64
00:04:47,960 --> 00:04:54,640
Obviously, if I had foreseen what they'd be like now, I would have thought a lot harder

65
00:04:54,640 --> 00:04:56,720
about the electrical side of it.

66
00:04:56,720 --> 00:05:07,160
But at any rate, I took those introductory courses and the double E's sent their best, most charismatic

67
00:05:07,160 --> 00:05:11,960
professor to teach the introductory class because they understood they were in competitions

68
00:05:11,960 --> 00:05:16,760
with the other departments to get freshmen to sign up with them.

69
00:05:16,760 --> 00:05:22,380
And meanwhile, the mech E's  made no impact on me whatsoever.

70
00:05:22,380 --> 00:05:29,200
So there I was, I became an electrical engineering major as a sophomore.

71
00:05:29,200 --> 00:05:35,240
I also took an introductory class in computer science just because it was there.

72
00:05:35,240 --> 00:05:41,000
As I said, I did not foresee that as being my future.

73
00:05:41,000 --> 00:05:48,280
But I did okay in that course and the professor who was teaching it pulled me aside and said,

74
00:05:48,280 --> 00:05:53,240
you really ought to go apply to be a research assistant in the department because you're

75
00:05:53,240 --> 00:05:55,760
good at this.

76
00:05:55,760 --> 00:06:01,200
And so I said, okay, because I needed a part-time job and that sounded way better than flipping

77
00:06:01,200 --> 00:06:02,820
burgers.

78
00:06:02,820 --> 00:06:08,320
So I went and applied and got the job.

79
00:06:08,320 --> 00:06:13,000
And I forget what they had me doing for the first year or so, but after that I got involved

80
00:06:13,000 --> 00:06:20,780
with the Hydra project, which was one of the very first symmetric multiprocessors that

81
00:06:20,780 --> 00:06:23,000
ever existed.

82
00:06:23,000 --> 00:06:30,760
And spent evenings and weekends and summers hacking on that for two or three years.

83
00:06:30,760 --> 00:06:37,540
And that CS101 course is actually the only formal training I had on computers until grad

84
00:06:37,540 --> 00:06:39,600
school.

85
00:06:39,600 --> 00:06:43,540
Everything else I knew I learned from being a research assistant.

86
00:06:43,540 --> 00:06:49,400
So it was a very unstructured way to learn anything about computers.

87
00:06:49,400 --> 00:06:55,060
[CLAIRE] And as a research assistant, when you were learning about computer science and programming,

88
00:06:55,060 --> 00:07:00,440
was that all like self-taught or were you actually spending time with some of the professors

89
00:07:00,440 --> 00:07:05,580
or some of the other grad students or TAs who were teaching you as well?

90
00:07:05,580 --> 00:07:09,980
[TOM] I can't recall if there was any formal training going on.

91
00:07:09,980 --> 00:07:11,660
They would say, go do this.

92
00:07:11,660 --> 00:07:18,100
And I would learn whatever I had to learn in order to do it.

93
00:07:18,100 --> 00:07:22,820
And was the pay as good as that of flipping burgers?

94
00:07:22,820 --> 00:07:29,100
Slightly better, but not by much.

95
00:07:29,100 --> 00:07:35,180
So the four years go by and you graduate and you have a degree in electrical engineering

96
00:07:35,180 --> 00:07:37,620
from CMU and you enter the job market.

97
00:07:37,620 --> 00:07:40,740
[CLAIRE] And then what happened next?

98
00:07:40,740 --> 00:07:47,660
[TOM] Yeah, well, the job market was fairly decent that year.

99
00:07:47,660 --> 00:07:53,540
So I had two or three job offers and I went to Hewlett-Packard just because they were

100
00:07:53,540 --> 00:07:57,540
the coolest of the bunch.

101
00:07:57,540 --> 00:08:09,820
And went to their, at the time it was called the desktop calculator division in Colorado.

102
00:08:09,820 --> 00:08:15,900
And what they made were, they were not the people making the iconic handheld calculators.

103
00:08:15,900 --> 00:08:18,620
That was a division in Oregon.

104
00:08:18,620 --> 00:08:27,220
But what the Colorado people were making were things that sat on a desk and typically would

105
00:08:27,220 --> 00:08:30,340
run BASIC or something like that.

106
00:08:30,340 --> 00:08:38,300
And they were basically just the supersized brothers of the handheld things.

107
00:08:38,300 --> 00:08:49,300
I fit right into that because at the time HP really didn't want to hire CS majors.

108
00:08:49,300 --> 00:08:52,860
I guess they thought it was a fake specialty or something.

109
00:08:52,860 --> 00:08:56,820
But since I had a double E degree, you know, I could get in the door.

110
00:08:56,820 --> 00:09:02,220
But nonetheless, you know, they were building these things that desperately required operating

111
00:09:02,220 --> 00:09:06,220
systems and BASIC interpreters and what have you.

112
00:09:06,220 --> 00:09:10,340
So they really needed people who could program.

113
00:09:10,340 --> 00:09:14,780
And there were not that many of us in the building.

114
00:09:14,780 --> 00:09:17,340
So yeah, I fit right in and I did okay there.

115
00:09:17,340 --> 00:09:21,860
And we made some pretty cool stuff.

116
00:09:21,860 --> 00:09:29,820
The machines that I had the most to do with were probably about the equivalent power of

117
00:09:29,820 --> 00:09:33,100
[CLAIRE] VAX-11/780, but they sat on your desk.

118
00:09:33,100 --> 00:09:36,780
They weren't in a cabinet full of equipment.

119
00:09:36,780 --> 00:09:40,620
So I was, you know, and back in the day it was about one MIPS was what these machines

120
00:09:40,620 --> 00:09:41,620
could do.

121
00:09:41,620 --> 00:09:44,780
You know, there was a lot for the time.

122
00:09:44,780 --> 00:09:48,860
I think it's fascinating that these, these were effectively desktop computers.

123
00:09:48,860 --> 00:09:51,460
You're talking about the HP 9800 series.

124
00:09:51,460 --> 00:09:56,340
But they were marketed as calculators or desktop calculators.

125
00:09:56,340 --> 00:10:00,380
And apparently, and I've learned this from doing some research on Wikipedia.

126
00:10:00,380 --> 00:10:03,220
So you tell me if I'm right or wrong.

127
00:10:03,220 --> 00:10:08,140
But it was to make purchasing and sales and procurement easier because apparently some

128
00:10:08,140 --> 00:10:12,260
companies had different procedures for purchasing computers.

129
00:10:12,260 --> 00:10:17,700
So HP found it more effective to sell these as desktop calculators.

130
00:10:17,700 --> 00:10:23,300
[TOM] I can believe that, but you know, I was, I was an R&D engineer.

131
00:10:23,300 --> 00:10:28,100
I had nothing to do with sales, so I can't say with my own knowledge that that's how

132
00:10:28,100 --> 00:10:29,660
it worked.

133
00:10:29,660 --> 00:10:34,460
[CLAIRE] And you said it was the coolest place to go, HP, at the time compared to your other job

134
00:10:34,460 --> 00:10:35,460
offers.

135
00:10:35,460 --> 00:10:37,420
Like what, what was cool about it back then?

136
00:10:37,420 --> 00:10:43,340
[TOM] Well, they just had a reputation of being an engineer's company.

137
00:10:43,340 --> 00:10:50,300
But it was very decentralized kind of situation.

138
00:10:50,300 --> 00:10:57,180
The founders, David Packard and Bill Hewlett were still active at that point.

139
00:10:57,180 --> 00:11:02,940
And they would show up fairly regularly and just wander around the labs and talk to people.

140
00:11:02,940 --> 00:11:06,740
Management by walking around was, you know, buzz phrase then.

141
00:11:06,740 --> 00:11:09,060
And that was what they actually did.

142
00:11:09,060 --> 00:11:15,180
I don't recall I ever met them in person, but it was probably at least 50/50 chance

143
00:11:15,180 --> 00:11:19,540
I would have if I'd hung on another couple of years.

144
00:11:19,540 --> 00:11:27,940
And in general, the place was very much, another buzz phrase that they had was "design for the

145
00:11:27,940 --> 00:11:34,700
next bench, build something that the guy sitting beside you would want to use."

146
00:11:34,700 --> 00:11:37,060
So it was very engineering driven company.

147
00:11:37,060 --> 00:11:43,100
And I get the impression that our culture has gone entirely, but I left there for five

148
00:11:43,100 --> 00:11:51,660
years, mainly because my wife did not like Colorado and wanted to come home to Pittsburgh.

149
00:11:51,660 --> 00:11:56,180
And so, yeah, I needed an excuse to leave without burning any bridges.

150
00:11:56,180 --> 00:12:01,540
And so going back to grad school was the easiest thing to do there.

151
00:12:01,540 --> 00:12:08,780
Okay, so you moved back to Pennsylvania and grad school.

152
00:12:08,780 --> 00:12:11,940
[CLAIRE] So we're talking Carnegie Mellon again, is that right?

153
00:12:11,940 --> 00:12:13,420
[TOM] Right, right.

154
00:12:13,420 --> 00:12:21,580
Because, you know, I'd been involved with the department as an undergrad for, you know,

155
00:12:21,580 --> 00:12:22,660
for years before that.

156
00:12:22,660 --> 00:12:25,620
So I knew that I would easily get accepted if I applied.

157
00:12:25,620 --> 00:12:30,140
My professor, Bill Wulf, who had run Hydra, would certainly give me a good recommendation

158
00:12:30,140 --> 00:12:31,140
letter.

159
00:12:31,140 --> 00:12:39,980
When I got back, he told me that I walked into his office and he said, "Some of the

160
00:12:39,980 --> 00:12:43,740
guys on the team started asking where you were after you left."

161
00:12:43,740 --> 00:12:46,740
I said, "Oh, I haven't seen him."

162
00:12:46,740 --> 00:12:50,180
And Bill said he graduated and they said, "Oh, what?

163
00:12:50,180 --> 00:12:51,900
I didn't see his thesis defense."

164
00:12:51,900 --> 00:12:58,100
They all thought I was a grad student apparently.

165
00:12:58,100 --> 00:13:02,340
But nope, I wasn't at the time, but now I became one.

166
00:13:02,340 --> 00:13:09,180
And so I had expected to sign up with Bill as being one of his students.

167
00:13:09,180 --> 00:13:14,540
But the second thing he said to me was I'm leaving because he had gotten a job as, I

168
00:13:14,540 --> 00:13:20,820
recall if he went immediately, but sometime later than that, he was director of National Science

169
00:13:20,820 --> 00:13:21,820
Foundation.

170
00:13:21,820 --> 00:13:28,080
And he'd been given either that job or some precursor to it.

171
00:13:28,080 --> 00:13:32,740
So he left and there I was stuck looking for another thesis advisor.

172
00:13:32,740 --> 00:13:44,660
Ended up with Jon Bentley, which was fun, but then he got a job at Bell Labs and left.

173
00:13:44,660 --> 00:13:48,820
And so my third advisor who finally stuck around long enough for me to get a thesis

174
00:13:48,820 --> 00:13:54,020
out was Mary Shaw.

175
00:13:54,020 --> 00:14:00,840
[CLAIRE] Okay, so I think it's nine years start to finish at CMU.

176
00:14:00,840 --> 00:14:01,840
Is that right?

177
00:14:01,840 --> 00:14:09,160
[TOM] Yeah, it was a long time.

178
00:14:09,160 --> 00:14:12,700
[CLAIRE] There's something I just have to ask you about.

179
00:14:12,700 --> 00:14:16,120
Apparently grad students back in those days, I don't know if it's still true if you're

180
00:14:16,120 --> 00:14:22,160
getting a PhD in computer science at CMU, but you had all these kind of boring and menial

181
00:14:22,160 --> 00:14:23,560
tasks that you had to do.

182
00:14:23,560 --> 00:14:29,060
I guess the professors and the staff wanted to kind of get the most value out of their

183
00:14:29,060 --> 00:14:30,060
grad students.

184
00:14:30,060 --> 00:14:31,060
[TOM] Something like that.

185
00:14:31,060 --> 00:14:37,260
You know, there's the idea that grad students are unpaid slave labor, basically.

186
00:14:37,260 --> 00:14:46,580
I don't know how the other schools run it, but at CMU's CS department, they had a list

187
00:14:46,580 --> 00:14:53,540
of things that needed, it's called the Lieberman queue, I guess, after whoever invented the, you

188
00:14:53,540 --> 00:14:55,680
know, this way of running things.

189
00:14:55,680 --> 00:15:01,660
And you're expected to take a job or two off that list and do it while you were there.

190
00:15:01,660 --> 00:15:07,120
A lot of them were pretty low level jobs.

191
00:15:07,120 --> 00:15:17,580
One I specifically recall was loading the departmental Coke machine, which actually

192
00:15:17,580 --> 00:15:21,460
wrote something up about it after the fact.

193
00:15:21,460 --> 00:15:26,980
There was a USENET group that was interested in history of computing, and I wrote a little

194
00:15:26,980 --> 00:15:30,740
thing about how that all worked.

195
00:15:30,740 --> 00:15:34,260
And I believe there's a link to it.

196
00:15:34,260 --> 00:15:38,420
Hopefully Ari will stick in the chat.

197
00:15:38,420 --> 00:15:43,460
But a lot of them were just not very exciting jobs like that.

198
00:15:43,460 --> 00:15:50,020
But when it was my turn to go and, you know, sign up for something, one thing that was

199
00:15:50,020 --> 00:15:56,100
available was running the USENET news software there.

200
00:15:56,100 --> 00:16:00,580
And I thought that sounded way more interesting than loading Coke machines.

201
00:16:00,580 --> 00:16:02,580
So I signed up for that.

202
00:16:02,580 --> 00:16:09,020
There I was being their USENET sysadmin for, I don't remember how long, several years.

203
00:16:09,020 --> 00:16:12,660
I didn't really have to run the hardware or anything.

204
00:16:12,660 --> 00:16:18,740
I just had to keep the software up to date, correctly configured and going.

205
00:16:18,740 --> 00:16:25,820
So yeah, I'm looking at your write up on the only Coke machine on the internet.

206
00:16:25,820 --> 00:16:26,820
[CLAIRE] And there's a whole bunch of...

207
00:16:26,820 --> 00:16:27,820
[TOM] Which was true at the time.

208
00:16:27,820 --> 00:16:28,820
It's not anymore.

209
00:16:28,820 --> 00:16:29,820
[CLAIRE] Yeah.

210
00:16:29,820 --> 00:16:34,260
But I think one of the things you wrote is that no real programmer can function without

211
00:16:34,260 --> 00:16:35,260
caffeine.

212
00:16:35,260 --> 00:16:38,020
So the machine is super popular or something like that.

213
00:16:38,020 --> 00:16:39,020
[TOM] Right.

214
00:16:39,020 --> 00:16:40,020
Yeah.

215
00:16:40,020 --> 00:16:47,460
I recall hearing that had the highest sales volume of any Coke machine in the area for

216
00:16:47,460 --> 00:16:50,500
some period of time back in the seventies.

217
00:16:50,500 --> 00:16:55,940
So yep, there was a lot of Coke being consumed and I consumed a lot of it too.

218
00:16:55,940 --> 00:16:57,540
It's still my drink of choice.

219
00:16:57,540 --> 00:17:01,700
I've got a glass of Diet Coke beside me right now.

220
00:17:01,700 --> 00:17:04,100
Got it.

221
00:17:04,100 --> 00:17:09,100
[CLAIRE] For me, I had my double espresso this morning, so I'm done with caffeine for the day.

222
00:17:09,100 --> 00:17:14,220
And anyone who knows me well will say that one double espresso is enough.

223
00:17:14,220 --> 00:17:19,180
I try to talk slower on this podcast than I do naturally in life.

224
00:17:19,180 --> 00:17:20,180
Okay.

225
00:17:20,180 --> 00:17:25,580
The Usenet sysadmin job though that you had, obviously in parallel with your graduate student

226
00:17:25,580 --> 00:17:32,260
work and your work on your thesis and all of that, was the software that you were maintaining

227
00:17:32,260 --> 00:17:33,260
open source?

228
00:17:33,260 --> 00:17:34,260
[TOM] It was.

229
00:17:34,260 --> 00:17:35,260
[CLAIRE] Okay.

230
00:17:35,260 --> 00:17:46,260
[TOM] So that was my first exposure to open source in the sense that we know it today where there's

231
00:17:46,260 --> 00:17:52,100
an intentional desire to make code freely available.

232
00:17:52,100 --> 00:17:56,060
There was obviously, you know, in the academic environment, there was a ton of code kicking

233
00:17:56,060 --> 00:18:04,380
around that was effectively unlicensed because nobody cared about that.

234
00:18:04,380 --> 00:18:09,580
And you could have a copy of it if you wanted, but there wasn't a formal license saying that

235
00:18:09,580 --> 00:18:11,660
it was okay for you to use it.

236
00:18:11,660 --> 00:18:17,940
Whereas with the Usenet code, there actually was a license saying, you know, this is available

237
00:18:17,940 --> 00:18:20,420
and free to use and so on.

238
00:18:20,420 --> 00:18:24,060
So that was kind of my first exposure to that concept.

239
00:18:24,060 --> 00:18:25,060
[CLAIRE] Okay.

240
00:18:25,060 --> 00:18:29,540
Which obviously becomes very, very important as you progress in your career.

241
00:18:29,540 --> 00:18:31,100
All right.

242
00:18:31,100 --> 00:18:37,940
So nine years at grad school, trying not to have to fill the Coke machine, a sysadmin

243
00:18:37,940 --> 00:18:40,660
job for Usenet.

244
00:18:40,660 --> 00:18:45,540
Could you live on your grad student stipend?

245
00:18:45,540 --> 00:18:46,540
Did it take all of your-

246
00:18:46,540 --> 00:18:47,540
[TOM] No, not really.

247
00:18:47,540 --> 00:18:48,540
[CLAIRE] Okay.

248
00:18:48,540 --> 00:18:54,300
[TOM] If I had been single and living in a garret, it might've done, but I had a wife who did

249
00:18:54,300 --> 00:18:56,460
not want to live that way.

250
00:18:56,460 --> 00:19:04,980
So I needed an outside income and I met up with a guy who was interested in doing the

251
00:19:04,980 --> 00:19:10,900
aftermarket support for those Hewlett-Packard machines that I'd worked on.

252
00:19:10,900 --> 00:19:12,900
[CLAIRE] Desktop calculators.

253
00:19:12,900 --> 00:19:14,900
[TOM] Right, right.

254
00:19:14,900 --> 00:19:21,820
Because, you know, this was a few years later and HP was no longer particularly interested

255
00:19:21,820 --> 00:19:26,440
in doing new software for them or anything like that.

256
00:19:26,440 --> 00:19:30,580
So they were aware of what we were doing and they were fine with it.

257
00:19:30,580 --> 00:19:38,780
And made a decent living for a few years of that.

258
00:19:38,780 --> 00:19:42,460
That was part of the reason why it took nine years was because I was spending a good chunk

259
00:19:42,460 --> 00:19:49,540
of my time off doing that rather than doing grad studenty things.

260
00:19:49,540 --> 00:19:56,180
[CLAIRE] And then you've got your undergraduate degree, you worked at HP, you're working on your PhD.

261
00:19:56,180 --> 00:20:03,780
You've got your first exposure to open source, but had you taken a databases class yet?

262
00:20:03,780 --> 00:20:09,700
Did you know, have any inkling that you would someday spend all of your working hours focused

263
00:20:09,700 --> 00:20:10,700
on a database?

264
00:20:10,700 --> 00:20:16,820
[TOM] No, there was at that time, as far as I can recall, there was nobody at CMU who cared

265
00:20:16,820 --> 00:20:19,500
about databases at all.

266
00:20:19,500 --> 00:20:22,060
Certainly nobody thought they were cool.

267
00:20:22,060 --> 00:20:26,020
[CLAIRE] Okay, so Andy Pavlo was not a professor there yet?

268
00:20:26,020 --> 00:20:31,860
[TOM] No, I don't know when he came, but it was after my time.

269
00:20:31,860 --> 00:20:34,420
[CLAIRE] Okay.

270
00:20:34,420 --> 00:20:40,940
So when do you first get introduced to Postgres or any database, relational database for that

271
00:20:40,940 --> 00:20:44,740
matter?

272
00:20:44,740 --> 00:20:53,380
[TOM] So going back to this outside business, which was called Structured Software Systems, and

273
00:20:53,380 --> 00:21:01,820
that's where the SSS and my still existing domain name came from.

274
00:21:01,820 --> 00:21:08,660
Like I said, we've been doing aftermarket support for HP's machines for probably about

275
00:21:08,660 --> 00:21:09,660
10 years.

276
00:21:09,660 --> 00:21:14,900
And then that market started to dry up because HP weren't making those particular models

277
00:21:14,900 --> 00:21:15,900
anymore.

278
00:21:15,900 --> 00:21:20,940
And the demand for support was going downhill.

279
00:21:20,940 --> 00:21:26,300
So we looked around for something to do and we said, you know what we'll do, we will get rich

280
00:21:26,300 --> 00:21:30,420
in the stock market by modeling price series.

281
00:21:30,420 --> 00:21:37,980
And maybe this was a crazy idea, but it actually worked for a while.

282
00:21:37,980 --> 00:21:42,540
We spent a year or so developing some algorithms and writing support code for this.

283
00:21:42,540 --> 00:21:48,860
And when we were ready to trade, we said, oh, we need databases for our trades so we

284
00:21:48,860 --> 00:21:54,900
know what we've got and what we need to sell or buy.

285
00:21:54,900 --> 00:21:58,740
And we were starting this on a shoestring, right?

286
00:21:58,740 --> 00:22:06,140
Because we were living off what we'd built up during the years of working on Hewlett-Packard stuff.

287
00:22:06,140 --> 00:22:09,900
So we didn't have a lot of money to spare at this point.

288
00:22:09,900 --> 00:22:15,180
And I went around and looked at what was available in open source databases.

289
00:22:15,180 --> 00:22:17,740
And there are basically two alternatives.

290
00:22:17,740 --> 00:22:22,580
There was Postgres and there was MySQL.

291
00:22:22,580 --> 00:22:27,820
And we also looked at Oracle for about half a second until we found out what the licensing

292
00:22:27,820 --> 00:22:31,060
fees were like.

293
00:22:31,060 --> 00:22:37,300
So I went and looked at the code base of Postgres and it was pretty clean and readable.

294
00:22:37,300 --> 00:22:39,300
And I said, you know, this looks decent.

295
00:22:39,300 --> 00:22:44,780
And I looked at the code base of MySQL and it was poor.

296
00:22:44,780 --> 00:22:47,820
No comments anywhere, very unreadable coding style.

297
00:22:47,820 --> 00:22:50,540
And I said, I do not trust this thing.

298
00:22:50,540 --> 00:22:57,500
I'm not going to use it for something that my income depends on.

299
00:22:57,500 --> 00:23:02,260
And so we chose to use Postgres.

300
00:23:02,260 --> 00:23:06,700
And we set out, we started trading.

301
00:23:06,700 --> 00:23:10,220
We actually made some money for a few years.

302
00:23:10,220 --> 00:23:15,980
But then it seemed like the markets changed and the algorithms we had didn't work as well

303
00:23:15,980 --> 00:23:16,980
anymore.

304
00:23:16,980 --> 00:23:21,420
I think what was actually happening, there are still people making money with that sort

305
00:23:21,420 --> 00:23:27,980
of trading, but they're doing it on these incredibly short time scales.

306
00:23:27,980 --> 00:23:31,140
They actually worry about speed of light to the exchanges.

307
00:23:31,140 --> 00:23:34,900
And they, you know, they're doing it on millisecond trading levels.

308
00:23:34,900 --> 00:23:39,680
So the same thing we were doing, but we did not have the resources to do it in that kind

309
00:23:39,680 --> 00:23:40,980
of way.

310
00:23:40,980 --> 00:23:47,980
So after a while, our trading models stopped working very well.

311
00:23:47,980 --> 00:23:52,740
But in the meantime, I had just gotten involved in Postgres.

312
00:23:52,740 --> 00:24:00,540
The first thing that I had to fix in it was, we wanted to run it on HP machines, obviously,

313
00:24:00,540 --> 00:24:02,900
because that's what we had.

314
00:24:02,900 --> 00:24:12,220
And there was a port to HP-UX in existence, but when we tried to use it, we found a few

315
00:24:12,220 --> 00:24:13,220
bugs.

316
00:24:13,220 --> 00:24:16,460
And so I had to send in patches for that.

317
00:24:16,460 --> 00:24:24,060
And the next thing that I ran into that didn't work as well as I could wish was, we wanted

318
00:24:24,060 --> 00:24:31,300
to use the listen and notify commands that Postgres already had to send signals between

319
00:24:31,300 --> 00:24:35,660
the machines we had that were doing the trading models and the machines we had that we were

320
00:24:35,660 --> 00:24:38,140
actually trading on.

321
00:24:38,140 --> 00:24:42,900
And I don't recall the details of what was wrong, but there were things about listen

322
00:24:42,900 --> 00:24:44,720
and notify that didn't work very well.

323
00:24:44,720 --> 00:24:48,740
So I had to go fix them.

324
00:24:48,740 --> 00:24:52,140
I had to fix some other things, this, that.

325
00:24:52,140 --> 00:24:56,340
And gradually, I just got sucked down this rabbit hole of discovering there are actually

326
00:24:56,340 --> 00:25:01,900
all sorts of interesting things about this piece of software.

327
00:25:01,900 --> 00:25:07,260
And particularly the planner, I got really interested in as time went on.

328
00:25:07,260 --> 00:25:15,320
So after two or three years of this, I realized I was basically shirking SSS work completely

329
00:25:15,320 --> 00:25:24,440
and spending all my time on Postgres stuff, which was clearly not terribly sustainable.

330
00:25:24,440 --> 00:25:32,120
And right about then, Great Bridge started up, which was I think the first Postgres focused

331
00:25:32,120 --> 00:25:33,120
company.

332
00:25:33,120 --> 00:25:37,680
And they offered me a job to come and spend full time hacking on Postgres.

333
00:25:37,680 --> 00:25:39,980
I said, I'm in.

334
00:25:39,980 --> 00:25:49,200
So that was where I switched over from just doing this as a dilettante to actually getting

335
00:25:49,200 --> 00:25:51,000
paid for it.

336
00:25:51,000 --> 00:25:52,000
[CLAIRE] Okay.

337
00:25:52,000 --> 00:26:02,000
So you were a user of Postgres before you became a contributor in the context of this

338
00:26:02,000 --> 00:26:11,920
trading model that you and your partner at Structured Software Systems had built, right?

339
00:26:11,920 --> 00:26:12,920
Did you hear me?

340
00:26:12,920 --> 00:26:13,920
Sorry.

341
00:26:13,920 --> 00:26:14,920
Is there something wrong with my microphone?

342
00:26:14,920 --> 00:26:19,640
[TOM] No, but you seem to trail off without actually asking questions.

343
00:26:19,640 --> 00:26:20,640
[CLAIRE] Oh, okay.

344
00:26:20,640 --> 00:26:22,080
So no, I was just confirming.

345
00:26:22,080 --> 00:26:28,400
You were user first at Structured Software Systems before you started submitting patches

346
00:26:28,400 --> 00:26:31,760
to fix the problems with listen and notify, etc.

347
00:26:31,760 --> 00:26:32,760
Is that right?

348
00:26:32,760 --> 00:26:33,760
[TOM] Correct.

349
00:26:33,760 --> 00:26:39,120
So, yeah, initially our intention, my intention was just to be a user and not particularly

350
00:26:39,120 --> 00:26:42,120
to get involved with it.

351
00:26:42,120 --> 00:26:44,000
[CLAIRE] But then there was a rabbit hole.

352
00:26:44,000 --> 00:26:47,600
Okay, but we've jumped over something.

353
00:26:47,600 --> 00:26:53,240
After you got your degree and while you were still at Structured Software Systems, presumably

354
00:26:53,240 --> 00:27:01,520
working on this trading model, you also got involved in image compression and JPEG.

355
00:27:01,520 --> 00:27:02,520
[TOM] Right.

356
00:27:02,520 --> 00:27:06,880
[CLAIRE] You have software running on Mars, so I think we've got to talk about this.

357
00:27:06,880 --> 00:27:08,360
Like how did that happen?

358
00:27:08,360 --> 00:27:15,160
[TOM] Okay, so as you said, this was right after I graduated.

359
00:27:15,160 --> 00:27:21,800
I felt that I graduated from grad school, not undergrad.

360
00:27:21,800 --> 00:27:23,800
I had this shiny new PhD.

361
00:27:23,800 --> 00:27:33,120
And a good chunk of that I could be thankful to US taxpayers for because that was where

362
00:27:33,120 --> 00:27:35,560
that stipend was coming from.

363
00:27:35,560 --> 00:27:39,160
So I felt like I had to give something back.

364
00:27:39,160 --> 00:27:44,040
And the obvious way to do that was to write some open source code for something or other.

365
00:27:44,040 --> 00:27:47,840
But I didn't know quite what to do.

366
00:27:47,840 --> 00:27:56,240
And what I remembered was when I'd been Netnews admin at CMU, I had a huge problem with the

367
00:27:56,240 --> 00:28:03,080
amount of bandwidth that was being spent on GIFs being shipped around on Usenet, because

368
00:28:03,080 --> 00:28:06,680
everyone wanted to put up their cat pictures and what have you.

369
00:28:06,680 --> 00:28:12,640
And so base64 encoded GIFs were the technology of the day.

370
00:28:12,640 --> 00:28:17,680
And they were enormous, at least by the standards of the T1 line, that was the best anybody

371
00:28:17,680 --> 00:28:21,600
had for passing news around.

372
00:28:21,600 --> 00:28:26,640
And if you were interested in photographs, GIFs do not have very good image quality for

373
00:28:26,640 --> 00:28:28,040
that.

374
00:28:28,040 --> 00:28:32,800
So that was a sore spot that had existed for some time.

375
00:28:32,800 --> 00:28:43,160
And right about then, there was this new standard that came out, written by the Joint Photographic

376
00:28:43,160 --> 00:28:53,160
Experts Group, which was a committee of, I think, ISO and I forget the name of the US

377
00:28:53,160 --> 00:28:59,520
standards body that is equivalent to ISO, but that was where the joint came from.

378
00:28:59,520 --> 00:29:06,600
And they had written this image compression standard based on an entirely new mathematical

379
00:29:06,600 --> 00:29:10,680
approach called discrete cosine transforms.

380
00:29:10,680 --> 00:29:15,120
And we were hearing great things about it.

381
00:29:15,120 --> 00:29:23,980
So both as to how well it could compress and as to the quality of the resulting images.

382
00:29:23,980 --> 00:29:28,440
So I said, let's see if we can write something here.

383
00:29:28,440 --> 00:29:30,040
I don't want to sound like I did it all myself.

384
00:29:30,040 --> 00:29:34,600
There were about a dozen other people who were involved at the beginning.

385
00:29:34,600 --> 00:29:41,880
And people had gotten together through being interested in image compression on USENET.

386
00:29:41,880 --> 00:29:44,600
And we wrote this code and it actually worked.

387
00:29:44,600 --> 00:29:50,640
And it wasn't terribly fast, because we didn't know how to optimize it.

388
00:29:50,640 --> 00:29:55,600
But when you're talking about an image you're sending across a dial-up line, it doesn't

389
00:29:55,600 --> 00:29:59,040
really matter if it takes you an extra 10 seconds to decompress it.

390
00:29:59,040 --> 00:30:01,180
So that wasn't a problem.

391
00:30:01,180 --> 00:30:08,440
And it really solved the problem nicely, because for a tenth of the size of a GIF, you could

392
00:30:08,440 --> 00:30:13,480
have a significantly better looking resulting photograph.

393
00:30:13,480 --> 00:30:20,040
And so a factor of 10 better is the kind of number that gets the world's attention.

394
00:30:20,040 --> 00:30:26,720
And that meant that our code just took over USENET by storm, pretty much.

395
00:30:26,720 --> 00:30:33,720
And then people started using it on the World Wide Web, which was a new thing.

396
00:30:33,720 --> 00:30:39,760
And that's how that all ended up.

397
00:30:39,760 --> 00:30:44,920
Other people have tried to supplant that original JPEG stuff off and on.

398
00:30:44,920 --> 00:30:49,200
But it's kind of hard to do, because if you don't have that factor of 10 advantage over

399
00:30:49,200 --> 00:30:52,780
what's there, you can't get people's attention.

400
00:30:52,780 --> 00:30:57,360
So I think it'll be a while before that goes away.

401
00:30:57,360 --> 00:30:58,360
[CLAIRE] Well and the--

402
00:30:58,360 --> 00:30:59,920
[TOM] But that's the original point.

403
00:30:59,920 --> 00:31:07,400
Yeah, the engineering cameras on the Perseverance rover, I know are using libjpeg, because Joe

404
00:31:07,400 --> 00:31:11,880
Conway pointed me to a paper that said so.

405
00:31:11,880 --> 00:31:16,360
And I'm, not, less sure about other Mars missions.

406
00:31:16,360 --> 00:31:24,360
I recall hearing that some of the orbiters had JPEG-based code, but it was not based

407
00:31:24,360 --> 00:31:25,360
on our library.

408
00:31:25,360 --> 00:31:27,680
It was some other implementation.

409
00:31:27,680 --> 00:31:33,340
But I know for a fact that Perseverance is using my code.

410
00:31:33,340 --> 00:31:38,120
[CLAIRE] And then I have a quote in front of me that focuses on the open source side of things,

411
00:31:38,120 --> 00:31:39,120
too.

412
00:31:39,120 --> 00:31:41,400
And this is actually a quote from you, I think.

413
00:31:41,400 --> 00:31:47,140
"30 years later, it's still the case that the existence of libjpeg with liberal license

414
00:31:47,140 --> 00:31:52,160
terms is why JPEG is everywhere, and the potential alternatives are not."

415
00:31:52,160 --> 00:31:53,720
You said that, right?

416
00:31:53,720 --> 00:31:57,560
[TOM] Yeah, that was part of the discussion we had before the show.

417
00:31:57,560 --> 00:32:02,720
Yeah, what I was describing just now was the technical merits, but I think the fact that

418
00:32:02,720 --> 00:32:08,280
libjpeg was open source also had a great deal to do with the ease with which it got taken

419
00:32:08,280 --> 00:32:09,280
up.

420
00:32:09,280 --> 00:32:14,520
And that is another thing that some of the folks who have tried to replace it but didn't

421
00:32:14,520 --> 00:32:15,520
quite grasp.

422
00:32:15,520 --> 00:32:18,840
They would put out stuff that had some kind of restriction on it.

423
00:32:18,840 --> 00:32:21,600
It wouldn't get used.

424
00:32:21,600 --> 00:32:29,520
So those are the two bits of the recipe that I have for the next person who wants to revolutionize

425
00:32:29,520 --> 00:32:30,520
the world.

426
00:32:30,520 --> 00:32:31,520
It has to be good.

427
00:32:31,520 --> 00:32:34,520
It has to be free.

428
00:32:34,520 --> 00:32:40,200
[CLAIRE] Okay, so once you got involved in Postgres though, and like you said, you realized you

429
00:32:40,200 --> 00:32:45,400
were shirking your Structured Software Systems work, I'm assuming you also had to hand over

430
00:32:45,400 --> 00:32:50,560
your libjpeg work too, as Postgres took up more and more of your time.

431
00:32:50,560 --> 00:32:52,560
Is that right?

432
00:32:52,560 --> 00:32:53,560
[TOM] Yeah, yeah.

433
00:32:53,560 --> 00:33:02,960
I kind of, after about '97, '98, no, it must have been later than that, '99 or so, I kind

434
00:33:02,960 --> 00:33:05,680
of stopped having any more time for libjpeg.

435
00:33:05,680 --> 00:33:11,320
I was feeling extremely guilty about that for a period of several years, but eventually

436
00:33:11,320 --> 00:33:15,320
some other people stepped into the breach.

437
00:33:15,320 --> 00:33:21,360
The current crowd is led by a guy, I believe by the name of Darrell Commander.

438
00:33:21,360 --> 00:33:26,760
I haven't spoken to him in a few years, but they're still out there maintaining it.

439
00:33:26,760 --> 00:33:31,920
It's now called JPEG Turbo or something like that, maybe.

440
00:33:31,920 --> 00:33:35,560
It's descended of the same code.

441
00:33:35,560 --> 00:33:43,520
[CLAIRE] All right, so let's dive into Postgres now, because that's what you did back in the late

442
00:33:43,520 --> 00:33:45,960
'90s.

443
00:33:45,960 --> 00:33:50,640
How did you, like what parts of the systems did you work on the most?

444
00:33:50,640 --> 00:33:54,680
You mentioned the planner earlier, and why?

445
00:33:54,680 --> 00:33:55,680
What were you drawn to?

446
00:33:55,680 --> 00:34:01,000
What was the magnet?

447
00:34:01,000 --> 00:34:04,840
[TOM] It's kind of hard to say, really.

448
00:34:04,840 --> 00:34:13,160
I just found it interesting as a concept that we've got this exceedingly non-procedural

449
00:34:13,160 --> 00:34:18,840
language and something has to figure out how to make that into something that a computer

450
00:34:18,840 --> 00:34:19,840
can execute.

451
00:34:19,840 --> 00:34:24,280
It's a little bit, I should back up here.

452
00:34:24,280 --> 00:34:31,760
In my grad student days, I'd been mostly into programming language development and compilers

453
00:34:31,760 --> 00:34:33,680
and things like that.

454
00:34:33,680 --> 00:34:42,800
So I understood how those worked, but they were all quite procedural languages that directly

455
00:34:42,800 --> 00:34:47,720
express an algorithm and you could translate into that into something that a computer could

456
00:34:47,720 --> 00:34:48,720
do.

457
00:34:48,720 --> 00:34:54,000
Whereas with SQL, it's not procedural at all.

458
00:34:54,000 --> 00:34:59,040
You have to devise a query plan.

459
00:34:59,040 --> 00:35:04,000
Something that your code knows what to deal with.

460
00:35:04,000 --> 00:35:09,240
So that's probably what attracted me to the planner.

461
00:35:09,240 --> 00:35:16,120
I did spend a lot of time on all other parts of the code, but most of that was in the vein

462
00:35:16,120 --> 00:35:21,440
of fixing bugs, because one of the things that was salient about Postgres in the early

463
00:35:21,440 --> 00:35:29,960
days was it had been academic software in its origin.

464
00:35:29,960 --> 00:35:38,000
There's a great quote from Joe Hellerstein to the effect that Postgres is bloatware by design:

465
00:35:38,000 --> 00:35:41,000
it was built to house PhD theses.

466
00:35:41,000 --> 00:35:44,640
[CLAIRE] I love that.

467
00:35:44,640 --> 00:35:49,040
[TOM] That's what it was.

468
00:35:49,040 --> 00:35:50,680
That was what it did.

469
00:35:50,680 --> 00:35:57,520
And one of the principal attributes of PhD theses is that you're not required to fix

470
00:35:57,520 --> 00:36:00,960
every last bug in what you've written.

471
00:36:00,960 --> 00:36:01,960
So they didn't.

472
00:36:01,960 --> 00:36:09,800
And we were trying to make it into production quality code and we had to go around and try

473
00:36:09,800 --> 00:36:12,520
to find and fix all those bugs.

474
00:36:12,520 --> 00:36:18,040
So that was probably how I came by the...

475
00:36:18,040 --> 00:36:24,360
How I got to a state where I could say that I'd looked at most of the code at one time

476
00:36:24,360 --> 00:36:25,360
or another.

477
00:36:25,360 --> 00:36:31,480
In the last five or ten years, enough people that aren't me have been doing enough stuff

478
00:36:31,480 --> 00:36:35,200
that I can't really claim to be familiar with all of the code anymore.

479
00:36:35,200 --> 00:36:39,720
But there was a period where I could be.

480
00:36:39,720 --> 00:36:44,240
[CLAIRE] And then I think you mentioned Great Bridge a while ago.

481
00:36:44,240 --> 00:36:47,280
But I know after they folded, because they folded, right?

482
00:36:47,280 --> 00:36:48,280
Then you went to Red Hat.

483
00:36:48,280 --> 00:36:49,280
[TOM] Yeah.

484
00:36:49,280 --> 00:36:50,280
[CLAIRE] Then Salesforce.

485
00:36:50,280 --> 00:36:51,280
[TOM] Yeah.

486
00:36:51,280 --> 00:36:57,800
They collapsed in the 2001 dot com bust, which a lot of us were not particularly happy about.

487
00:36:57,800 --> 00:37:03,680
We thought, if companies are feeling poor, then there's all the more reason to be interested

488
00:37:03,680 --> 00:37:05,720
in open source stuff.

489
00:37:05,720 --> 00:37:08,440
So we thought this was a great opportunity.

490
00:37:08,440 --> 00:37:11,480
But the people who were running the company didn't see it that way.

491
00:37:11,480 --> 00:37:15,800
And they just decided to shut it down.

492
00:37:15,800 --> 00:37:17,800
But I was fortunate.

493
00:37:17,800 --> 00:37:23,080
I got a job at Red Hat where they let me continue to work on Postgres.

494
00:37:23,080 --> 00:37:29,120
And they said, well, you got to spend 10% of your time packaging Postgres and MySQL

495
00:37:29,120 --> 00:37:31,840
and a few other related packages.

496
00:37:31,840 --> 00:37:33,320
I said, yeah, I'll take that trade.

497
00:37:33,320 --> 00:37:34,320
And that's what I did for...

498
00:37:34,320 --> 00:37:43,400
I was at Red Hat for a good 10 years doing basically that.

499
00:37:43,400 --> 00:37:46,600
And then after that, I went to Salesforce for a little bit.

500
00:37:46,600 --> 00:37:56,360
And that was fun, but it was basically eating too much of my time doing non-community stuff.

501
00:37:56,360 --> 00:37:59,040
And I decided I didn't like that.

502
00:37:59,040 --> 00:38:01,440
So now I am at Crunchy Data.

503
00:38:01,440 --> 00:38:03,480
It's an even better deal.

504
00:38:03,480 --> 00:38:08,200
They basically let me spend 100% of my time on community Postgres.

505
00:38:08,200 --> 00:38:12,160
So I can't complain about that.

506
00:38:12,160 --> 00:38:16,480
[CLAIRE] So amongst all these companies, though, other than maybe Salesforce, you've been able to

507
00:38:16,480 --> 00:38:20,400
spend the bulk of your time working on Postgres open source.

508
00:38:20,400 --> 00:38:21,400
Is that...

509
00:38:21,400 --> 00:38:23,720
I mean, that's pretty awesome.

510
00:38:23,720 --> 00:38:25,720
[TOM] I thought so.

511
00:38:25,720 --> 00:38:26,720
[CLAIRE] Yeah.

512
00:38:26,720 --> 00:38:28,920
And you still think so.

513
00:38:28,920 --> 00:38:35,720
But it's an interesting aspect of the Postgres open source business model that there are

514
00:38:35,720 --> 00:38:42,120
employers, not just Crunchy Data, but including Crunchy Data, who pay people to work nearly

515
00:38:42,120 --> 00:38:45,760
full time on upstream open source.

516
00:38:45,760 --> 00:38:46,760
It's kind of how...

517
00:38:46,760 --> 00:38:48,080
I don't know.

518
00:38:48,080 --> 00:38:53,040
It's just part of the economic model, I suppose, that keeps Postgres alive.

519
00:38:53,040 --> 00:39:00,160
[TOM] I mean, most, if not all, of these companies have derivative products or things that they

520
00:39:00,160 --> 00:39:02,000
build on top of Postgres.

521
00:39:02,000 --> 00:39:09,800
And so they have economic interest in the open source project continuing to thrive.

522
00:39:09,800 --> 00:39:13,400
And I guess that's why they're willing to pay us to do what we do.

523
00:39:13,400 --> 00:39:19,920
But yeah, it's the kind of model that you might not think would come to exist.

524
00:39:19,920 --> 00:39:20,920
But here we are.

525
00:39:20,920 --> 00:39:21,920
[CLAIRE] All right.

526
00:39:21,920 --> 00:39:27,360
So I have the rest of this conversation today.

527
00:39:27,360 --> 00:39:33,520
We've spent a lot of time figuring out how you got your start as a developer, as a programmer,

528
00:39:33,520 --> 00:39:35,720
how you learned, where you learned.

529
00:39:35,720 --> 00:39:40,360
But now we're just going to talk Postgres for the rest of the conversation.

530
00:39:40,360 --> 00:39:42,420
And I have...

531
00:39:42,420 --> 00:39:50,280
Most of my questions are about your work as a developer and contributor, author, committer,

532
00:39:50,280 --> 00:39:51,720
reviewer, et cetera, et cetera.

533
00:39:51,720 --> 00:39:56,000
But you're also on this thing called the Postgres Core Team, which I don't want to assume all

534
00:39:56,000 --> 00:39:58,460
of our listeners even know what that is.

535
00:39:58,460 --> 00:40:07,920
So can you tell us what that is and who you serve with and why it's important?

536
00:40:07,920 --> 00:40:15,000
[TOM] So the Core Team is basically the steering committee.

537
00:40:15,000 --> 00:40:21,880
Where it started was that back immediately after Berkeley had decided Postgres was not

538
00:40:21,880 --> 00:40:30,040
research anymore, there had been a few outside users of Postgres even back when it was research.

539
00:40:30,040 --> 00:40:33,880
But not that many.

540
00:40:33,880 --> 00:40:39,480
I don't know exactly how things worked, how they communicated with the university.

541
00:40:39,480 --> 00:40:44,400
Once Berkeley decided it wasn't research anymore, they kind of put an open source license on

542
00:40:44,400 --> 00:40:46,960
it and threw it over the wall.

543
00:40:46,960 --> 00:40:53,640
And some of these outside users picked it up and decided to start making it into a product

544
00:40:53,640 --> 00:40:59,280
essentially, or sorry, into a product quality thing.

545
00:40:59,280 --> 00:41:07,160
There were about four people who were initially doing all the work of fixing bugs and integrating

546
00:41:07,160 --> 00:41:10,840
patches for other people who were also fixing bugs.

547
00:41:10,840 --> 00:41:18,440
So that was the genesis of the Core Team, I think there were four to begin with.

548
00:41:18,440 --> 00:41:25,800
And on both of them, I think the only one who's still active out of that original group

549
00:41:25,800 --> 00:41:28,600
is Bruce Momjian.

550
00:41:28,600 --> 00:41:33,240
Mark Fournier is still around on the fringes of the project, but he doesn't do anything

551
00:41:33,240 --> 00:41:36,240
with the code anymore.

552
00:41:36,240 --> 00:41:43,320
At any rate, originally those guys basically were the project, and so they had say over

553
00:41:43,320 --> 00:41:48,640
everything like when releases would be and how we would deal with this and who would

554
00:41:48,640 --> 00:41:52,440
get to be a committer and so on.

555
00:41:52,440 --> 00:41:59,200
But obviously a group of that size can't deal with it all.

556
00:41:59,200 --> 00:42:02,680
This project gets bigger.

557
00:42:02,680 --> 00:42:13,000
So there was a period of basically delegating responsibilities.

558
00:42:13,000 --> 00:42:21,400
And over time, I was about to say we, and up to now I was talking about cores being

559
00:42:21,400 --> 00:42:23,160
some other guys.

560
00:42:23,160 --> 00:42:31,600
They added me to core in I guess '99 when Great Bridge first approached the community

561
00:42:31,600 --> 00:42:38,560
and wanted to know how they could be involved in a nice way.

562
00:42:38,560 --> 00:42:43,400
And so the four guys who were part of core at this point said, "We better get some more

563
00:42:43,400 --> 00:42:49,520
people involved so we can talk to them with a more representative group of the community."

564
00:42:49,520 --> 00:42:56,840
And so they added me and Jan Wieck, and at that point there were six people on core and we

565
00:42:56,840 --> 00:43:03,040
went off and talked to Great Bridge and helped them organize.

566
00:43:03,040 --> 00:43:07,000
They ended up hiring several of us, not just me.

567
00:43:07,000 --> 00:43:11,200
But at any rate, moving on from there, it became obvious that we needed more people

568
00:43:11,200 --> 00:43:15,840
involved in running different aspects of the community.

569
00:43:15,840 --> 00:43:23,440
So a large chunk of what core has done since then is to delegate responsibilities originally

570
00:43:23,440 --> 00:43:26,000
were theirs by default.

571
00:43:26,000 --> 00:43:32,720
So there are now separate groups running, for instance, fundraising.

572
00:43:32,720 --> 00:43:36,400
The infrastructure is managed by a separate group of people.

573
00:43:36,400 --> 00:43:44,120
Code of conduct committee is, sorry, code of conduct committee is a different group

574
00:43:44,120 --> 00:43:48,040
of people and so on and so on.

575
00:43:48,040 --> 00:43:56,520
[Security] And what security team, right, release team, that there's overlap.

576
00:43:56,520 --> 00:44:00,680
Most of the core members sit on one or more of these other subcommittees as well.

577
00:44:00,680 --> 00:44:06,840
But there are a ton more people involved and all of them taken together.

578
00:44:06,840 --> 00:44:15,880
And what core remains to do basically is deal with stuff that those committees don't want

579
00:44:15,880 --> 00:44:18,600
to deal with.

580
00:44:18,600 --> 00:44:26,440
So occasionally step in for like discipline problems or if people can't come to a solution.

581
00:44:26,440 --> 00:44:34,680
But I don't quite want to say we're figureheads, but we don't actually do that much day to

582
00:44:34,680 --> 00:44:36,680
day as core.

583
00:44:36,680 --> 00:44:42,880
Obviously, we're all quite busy, but to the extent we're running the community, most of

584
00:44:42,880 --> 00:44:47,520
the work we're doing is done via these other subcommittees.

585
00:44:47,520 --> 00:44:50,440
[CLAIRE] Okay.

586
00:44:50,440 --> 00:44:59,120
So there was a question on the chat that I want to make sure we touch on before we move on.

587
00:44:59,120 --> 00:45:04,840
And Melanie was curious about when that flip happened.

588
00:45:04,840 --> 00:45:10,000
When you were a user of Postgres who started getting interested in these rabbit holes,

589
00:45:10,000 --> 00:45:16,640
you were submitting patches, was there a moment when you realized that you wanted to work

590
00:45:16,640 --> 00:45:23,040
full time on Postgres or that you might want to drop your other responsibilities and have

591
00:45:23,040 --> 00:45:27,120
that just become your job full time?

592
00:45:27,120 --> 00:45:35,680
[TOM] Oh, I actually did that, you know.

593
00:45:35,680 --> 00:45:45,040
I joined Great Bridge sometime in 2000.

594
00:45:45,040 --> 00:45:53,000
And probably for about a year before that, I've been having feelings of something I might

595
00:45:53,000 --> 00:45:54,000
want to do.

596
00:45:54,000 --> 00:46:02,000
But it wasn't until they made me an offer that I said, yeah, I'm going to do it.

597
00:46:02,000 --> 00:46:03,440
[CLAIRE] Okay.

598
00:46:03,440 --> 00:46:08,160
So it sounds like it was a combination of your interest, but also the opportunity being

599
00:46:08,160 --> 00:46:09,160
given to you.

600
00:46:09,160 --> 00:46:10,160
Is that in your memory?

601
00:46:10,160 --> 00:46:11,160
[TOM] Yeah, very much so.

602
00:46:11,160 --> 00:46:12,160
[CLAIRE] Okay.

603
00:46:12,160 --> 00:46:13,160
Okay, cool.

604
00:46:13,160 --> 00:46:20,680
So earlier, I asked you to confirm that you were a Postgres user first before you became

605
00:46:20,680 --> 00:46:25,000
a developer and a contributor and author and all of that.

606
00:46:25,000 --> 00:46:30,040
I'm curious whether you think that influenced you.

607
00:46:30,040 --> 00:46:38,120
Did your work at Structured Software Systems, where you had to rely on Postgres to store

608
00:46:38,120 --> 00:46:43,200
various things in your trading model, has that influenced how you look at the Postgres

609
00:46:43,200 --> 00:46:49,720
project, what you think about when you're authoring things?

610
00:46:49,720 --> 00:47:06,480
[TOM] Yeah, it made me aware of, I guess, the need to talk to end users.

611
00:47:06,480 --> 00:47:12,000
One of the things that I missed when I was at Hewlett-Packard was that the engineers

612
00:47:12,000 --> 00:47:21,440
all sat in our R&D lab and we'd talk to each other and the next bench only goes so far.

613
00:47:21,440 --> 00:47:28,280
You're really better off if you can talk to actual people using your product, but at least

614
00:47:28,280 --> 00:47:34,720
at HP, there were layers of sales guys and so forth between you and them.

615
00:47:34,720 --> 00:47:42,160
So one of the things I really like about the Postgres environment is that you are interacting

616
00:47:42,160 --> 00:47:48,640
on the mailing list with actual everyday users and you get to hear about their problems.

617
00:47:48,640 --> 00:47:52,560
So that's why I pay as much attention to the mailing list as I do, is it gives me ideas

618
00:47:52,560 --> 00:47:58,920
about what do we need to improve and maybe even ideas about exactly how to do it, but

619
00:47:58,920 --> 00:48:06,160
at least I get a feeling for where the pain points are in a very direct way that I think

620
00:48:06,160 --> 00:48:10,600
you have a hard time getting in a traditional company.

621
00:48:10,600 --> 00:48:18,040
[CLAIRE] Yeah, there can be, especially in a large company, a lot of levels between you and a user.

622
00:48:18,040 --> 00:48:21,320
Although I suppose the internet has closed some of those, right?

623
00:48:21,320 --> 00:48:27,200
There are some feedback loops that can be direct.

624
00:48:27,200 --> 00:48:33,760
Someone complaining on Twitter about a product, I suppose. Okay.

625
00:48:33,760 --> 00:48:38,160
[TOM] Some companies I think do that better than others.

626
00:48:38,160 --> 00:48:46,840
It's certainly possible to interact directly with your users if you choose to do so.

627
00:48:46,840 --> 00:48:51,560
[CLAIRE] And then I started to do the math.

628
00:48:51,560 --> 00:48:57,880
I was watching this interview with Ed Sheeran and he was talking about this classic thing

629
00:48:57,880 --> 00:49:04,640
that you hear about, musician Ed Sheeran, I mean, this classic thing that a lot of people talk about.

630
00:49:04,640 --> 00:49:11,160
Maybe I think I first heard the term from Malcolm Gladwell, but I'm not sure what the

631
00:49:11,160 --> 00:49:17,040
source was, but this notion of 10,000 hours, this notion of it takes a lot of commitment

632
00:49:17,040 --> 00:49:19,960
and time to become expert at something.

633
00:49:19,960 --> 00:49:25,680
And so then I did the math based on your 26 years in Postgres and you have spent, I believe,

634
00:49:25,680 --> 00:49:28,240
more than 10,000 hours on Postgres.

635
00:49:28,240 --> 00:49:30,980
[TOM] Oh, that's, certainly.

636
00:49:30,980 --> 00:49:35,880
[CLAIRE] And then I guess the question is, do you feel like you got better over time?

637
00:49:35,880 --> 00:49:42,920
If you look at, say, your early patches versus your current patches, how have things changed?

638
00:49:42,920 --> 00:49:50,440
[TOM] Yeah, I mean, obviously quite a lot of years to reach the point of having looked

639
00:49:50,440 --> 00:49:58,880
at most of the source code and I continue to learn things about what's connected to

640
00:49:58,880 --> 00:50:04,640
what and what sort of development methods lead to something that's going to be maintainable

641
00:50:04,640 --> 00:50:09,600
down the road versus not so maintainable.

642
00:50:09,600 --> 00:50:16,040
So yeah, clearly gotten better at this as I went along and I think I continue to do so.

643
00:50:16,040 --> 00:50:20,560
It's just, you got to be good at anything.

644
00:50:20,560 --> 00:50:26,440
It just takes a lot of study and work.

645
00:50:26,440 --> 00:50:28,880
[CLAIRE] What about failures?

646
00:50:28,880 --> 00:50:35,720
Like have you, I think it's fair to say that some people are intimidated by you or a lot

647
00:50:35,720 --> 00:50:39,200
of people look up to you, but you're human.

648
00:50:39,200 --> 00:50:43,760
I'm assuming there've been failures along the way and do you have any, do any stories

649
00:50:43,760 --> 00:50:50,240
come to mind and do the failures actually make you better, or?

650
00:50:50,240 --> 00:50:56,240
[TOM] Sometimes you learn not to do that again, but we're all far from perfect.

651
00:50:56,240 --> 00:51:03,760
If you look through the commit log, there are plenty of places where I've fixed problems

652
00:51:03,760 --> 00:51:06,120
that I created earlier.

653
00:51:06,120 --> 00:51:09,640
It's just something that happens and you've got to deal with it.

654
00:51:09,640 --> 00:51:15,680
I think that's one of the interesting things about working in open source is that your

655
00:51:15,680 --> 00:51:19,400
failures are inherently extremely public.

656
00:51:19,400 --> 00:51:24,920
You can't look the other way and pretend it didn't happen because there it is in the commit log.

657
00:51:24,920 --> 00:51:30,040
Anybody can see and you just have to own up to it and deal with it.

658
00:51:30,040 --> 00:51:36,920
I've gotten better at that just by force of experience.

659
00:51:36,920 --> 00:51:40,560
Let's see.

660
00:51:40,560 --> 00:51:48,440
It's discussion about, for the show, I recall if you specifically asked me about what I

661
00:51:48,440 --> 00:51:55,080
thought my worst ever bug was or if I came up with that as a topic myself, but anyway,

662
00:51:55,080 --> 00:51:59,760
I do have a candidate for what that is.

663
00:51:59,760 --> 00:52:09,480
Bug was actually a security problem, CVE 2013-1899, which rose from what I thought was simple

664
00:52:09,480 --> 00:52:13,240
refactoring, just moving some code around.

665
00:52:13,240 --> 00:52:18,560
What I was sloppy about there was the separation between trusted and untrusted command line

666
00:52:18,560 --> 00:52:24,760
switches, which enabled somebody who was just attempting to send a login.

667
00:52:24,760 --> 00:52:26,440
They hadn't even gotten authenticated.

668
00:52:26,440 --> 00:52:35,840
They could send some stuff that would be interpreted by the server as a trusted command line switch.

669
00:52:35,840 --> 00:52:40,840
The attacks that we mentioned in the commit message were bad enough, but there were things

670
00:52:40,840 --> 00:52:44,520
that the security team thought of that we still haven't admitted in public 10 years

671
00:52:44,520 --> 00:52:46,240
later because they were so awful.

672
00:52:46,240 --> 00:52:50,120
I don't remember the details, but I remember that they were pretty awful.

673
00:52:50,120 --> 00:52:59,080
[CLAIRE] I think you just touched on something really important, though, which is when you work

674
00:52:59,080 --> 00:53:06,840
on an open source project, there's a lot of sunlight on your successes, but also on your mistakes.

675
00:53:06,840 --> 00:53:14,560
I don't know if that means you have to develop a thick skin or you just have to develop grace

676
00:53:14,560 --> 00:53:18,520
to accept that everyone's going to make mistakes sometimes and everyone's going to be human,

677
00:53:18,520 --> 00:53:24,520
but you have to kind of help each other find those mistakes before they impact too many

678
00:53:24,520 --> 00:53:25,520
people, I guess.

679
00:53:25,520 --> 00:53:26,520
[TOM] Yeah, yeah.

680
00:53:26,520 --> 00:53:32,520
I think there's some of both of that.

681
00:53:32,520 --> 00:53:42,200
I think I've learned a little more grace as I went along in this project, at least at

682
00:53:42,200 --> 00:53:48,080
the extent of trying to be more polite on the mailing list and things like that.

683
00:53:48,080 --> 00:53:58,080
It's also true that you need to have a thick skin to some extent because, as you said,

684
00:53:58,080 --> 00:54:01,600
all this is just happening in public and you're going to be embarrassed in public.

685
00:54:01,600 --> 00:54:07,920
There's just no way to dodge that fact.

686
00:54:07,920 --> 00:54:13,960
[CLAIRE] And I guess one of the things that I've tried hard to do is if I'm not careful, I can dwell

687
00:54:13,960 --> 00:54:17,760
on my mistakes, almost like a replay in your mind.

688
00:54:17,760 --> 00:54:19,200
And that's just not productive.

689
00:54:19,200 --> 00:54:21,880
And it doesn't help.

690
00:54:21,880 --> 00:54:25,120
It just creates stress or anxiety or whatever.

691
00:54:25,120 --> 00:54:28,480
So I don't let myself do that anymore.

692
00:54:28,480 --> 00:54:31,840
It's kind of like you process it, you learn from it, but then you're going to have to

693
00:54:31,840 --> 00:54:32,840
let it go.

694
00:54:32,840 --> 00:54:35,840
I don't know about you, but that's what I do.

695
00:54:35,840 --> 00:54:36,840
[TOM] Yeah.

696
00:54:36,840 --> 00:54:43,760
I don't find that I tend to dwell on my mistakes.

697
00:54:43,760 --> 00:54:49,200
Think about it and see if I can learn from it.

698
00:54:49,200 --> 00:54:58,600
It's still true that one of the best debugging techniques I know is when you identify a mistake,

699
00:54:58,600 --> 00:55:04,480
to look around and say, where else did we make the same mistake?

700
00:55:04,480 --> 00:55:11,280
So yeah, it's sort of a version of learning from your mistakes, I guess, but it's something

701
00:55:11,280 --> 00:55:16,320
you have to do as best you can.

702
00:55:16,320 --> 00:55:19,480
I've never heard someone put it just like that before.

703
00:55:19,480 --> 00:55:22,040
Where else did we make this mistake?

704
00:55:22,040 --> 00:55:26,040
And then you canvas for it and hopefully fix more.

705
00:55:26,040 --> 00:55:29,440
Okay. I like that.

706
00:55:29,440 --> 00:55:31,040
[CLAIRE] You mentioned mailing lists.

707
00:55:31,040 --> 00:55:36,920
Now for people who are not familiar with the Postgres community's development process,

708
00:55:36,920 --> 00:55:42,200
I'll try to summarize this, you tell me if I'm right or wrong, but there are these public

709
00:55:42,200 --> 00:55:43,200
mailing lists.

710
00:55:43,200 --> 00:55:50,400
You can search on PostgreSQL.org, Postgres mailing lists, and you can find them on the internet.

711
00:55:50,400 --> 00:55:53,520
And everything is out there for anyone to see.

712
00:55:53,520 --> 00:56:02,760
And a lot of the developer communication happens on a mailing list called pgsql-hackers.

713
00:56:02,760 --> 00:56:10,480
And that is different than other open source developer communities, I think.

714
00:56:10,480 --> 00:56:16,160
Maybe there are some other ones that use mailing lists as the primary form of communication too. But...

715
00:56:16,160 --> 00:56:23,680
[TOM] Well, I think back in the 90s that was what everybody did, because that was about the

716
00:56:23,680 --> 00:56:27,960
only technology that existed.

717
00:56:27,960 --> 00:56:38,800
As time went on, other people have switched to other methods like GitHub or web forums

718
00:56:38,800 --> 00:56:39,800
or whatever.

719
00:56:39,800 --> 00:56:46,760
And the Postgres community is maybe a little stuck in the mud in that we haven't changed that.

720
00:56:46,760 --> 00:56:52,760
It is interesting, you know, we're sitting here doing this on Discord, and I see that

721
00:56:52,760 --> 00:57:01,360
Robert Haas started up a Discord server, and there's some conversations happening on that now.

722
00:57:01,360 --> 00:57:04,560
So I don't know if that will become a bigger thing or not.

723
00:57:04,560 --> 00:57:11,240
But as of today, it's still the case that the mailing lists are the main thing.

724
00:57:11,240 --> 00:57:17,640
[CLAIRE] And then over the years, over the 26 years that you've been participating in and contributing

725
00:57:17,640 --> 00:57:25,280
to the Postgres community, do you feel like your, I don't know, email etiquette or email

726
00:57:25,280 --> 00:57:28,040
best practices have gotten better?

727
00:57:28,040 --> 00:57:34,240
And I'm curious if there's particular things that you've had to get better at.

728
00:57:34,240 --> 00:57:43,640
[TOM] As I already mentioned, I think I've gotten more polite or at least be more aware of trying

729
00:57:43,640 --> 00:57:47,560
to be more polite.

730
00:57:47,560 --> 00:57:53,560
And there's a bunch of skills involved in that.

731
00:57:53,560 --> 00:58:01,880
But one thing that I think is worth mentioning is that when you start working on something,

732
00:58:01,880 --> 00:58:07,520
you have an idea for something, you really have to learn how to sell that idea to other

733
00:58:07,520 --> 00:58:10,200
people in the community.

734
00:58:10,200 --> 00:58:12,720
Because otherwise, it's probably not going to get accepted.

735
00:58:12,720 --> 00:58:18,720
Even if you're a contributor, you have to convince other people this is a good idea

736
00:58:18,720 --> 00:58:22,720
before you can get away with committing it.

737
00:58:22,720 --> 00:58:28,720
So you have to develop skills of presenting your idea, explaining why it's a good thing

738
00:58:28,720 --> 00:58:32,040
or why it's better than what we have.

739
00:58:32,040 --> 00:58:34,960
And interacting with people.

740
00:58:34,960 --> 00:58:41,520
Almost always, somebody else will have some ideas that make your idea better.

741
00:58:41,520 --> 00:58:47,120
You have to be able to hear that feedback and say, "Oh, yeah, that is a good idea,"

742
00:58:47,120 --> 00:58:50,240
and adapt what you're doing.

743
00:58:50,240 --> 00:58:55,560
So we always encourage people to try to do that before they've written a whole lot of

744
00:58:55,560 --> 00:59:03,760
code because otherwise, they may end up throwing a lot of it away and doing it over.

745
00:59:03,760 --> 00:59:15,880
So there's that, and I already referred to listening to users' problems to see what

746
00:59:15,880 --> 00:59:17,400
needs to be worked on.

747
00:59:17,400 --> 00:59:23,360
Do you have any other thoughts?

748
00:59:23,360 --> 00:59:28,720
[CLAIRE] Tone of voice is just an interesting thing in email.

749
00:59:28,720 --> 00:59:35,320
I sometimes find myself dropping an emoji or I probably use too much punctuation, but

750
00:59:35,320 --> 00:59:42,680
I'm trying to sometimes be positive and make sure that my words don't get misinterpreted

751
00:59:42,680 --> 00:59:48,000
with the wrong tone of voice, with a more negative or more critical tone of voice.

752
00:59:48,000 --> 00:59:50,360
So it's tricky.

753
00:59:50,360 --> 00:59:54,580
You said something to me earlier, though, about how certain...

754
00:59:54,580 --> 00:59:56,280
You call them verbal mannerisms.

755
00:59:56,280 --> 00:59:58,560
I don't know if you have an example.

756
00:59:58,560 --> 01:00:04,840
There may be figures of speech that you do not use because you feel like non-native English

757
01:00:04,840 --> 01:00:07,120
speakers may not understand those.

758
01:00:07,120 --> 01:00:10,120
Is that right?

759
01:00:10,120 --> 01:00:12,120
[TOM] Yeah.

760
01:00:12,120 --> 01:00:27,360
If I'm in a vacuum, I'll tend to write things that might be...

761
01:00:27,360 --> 01:00:30,240
I guess you might call it faintly archaic English.

762
01:00:30,240 --> 01:00:35,080
It was sort of a way that I tend to write a lot.

763
01:00:35,080 --> 01:00:38,120
[CLAIRE] I need an example to understand that.

764
01:00:38,120 --> 01:00:39,600
[TOM] Oh, yeah.

765
01:00:39,600 --> 01:00:43,920
[CLAIRE] Putting you on the spot, sorry.

766
01:00:43,920 --> 01:00:48,960
[TOM] I'm drawing a blank, but you probably wouldn't have to go back further than a couple of weeks

767
01:00:48,960 --> 01:00:56,920
in the hackers list to find instances of somebody complaining about, "This comment in the code

768
01:00:56,920 --> 01:00:58,360
looks a little strange to me.

769
01:00:58,360 --> 01:01:01,920
Is it really good English?"

770
01:01:01,920 --> 01:01:03,720
I say, "Yeah, it's perfectly good English.

771
01:01:03,720 --> 01:01:04,720
I wrote it."

772
01:01:04,720 --> 01:01:13,080
But at the point of fact, it was written in a style that you don't see people using all

773
01:01:13,080 --> 01:01:14,080
that much anymore.

774
01:01:14,080 --> 01:01:15,080
I think...

775
01:01:15,080 --> 01:01:23,520
[CLAIRE] Maybe someone on the live chat will come up with something and give us an example.

776
01:01:23,520 --> 01:01:28,800
Or maybe you'll think of one later in today's conversation.

777
01:01:28,800 --> 01:01:34,660
But the point is you have these faintly archaic English mannerisms and you try to avoid them.

778
01:01:34,660 --> 01:01:38,280
So that more people can understand you.

779
01:01:38,280 --> 01:01:41,280
That's the gist of it.

780
01:01:41,280 --> 01:01:42,280
[TOM] Yeah.

781
01:01:43,280 --> 01:01:51,440
Particularly over the last, I don't know how many years, it seems like we have more and

782
01:01:51,440 --> 01:01:58,200
more contributors whose native language is not English.

783
01:01:58,200 --> 01:02:02,200
And I'm more aware of that than I used to be.

784
01:02:02,200 --> 01:02:05,380
And I try not to write things that might be hard to understand.

785
01:02:05,380 --> 01:02:10,620
I don't know how well I succeed at that, but I know that it's something to worry about.

786
01:02:10,620 --> 01:02:13,580
[CLAIRE] All right.

787
01:02:13,580 --> 01:02:17,540
So I want to ask you, okay, a little bit of context.

788
01:02:17,540 --> 01:02:19,580
Years ago, I took a year off to write a book.

789
01:02:19,580 --> 01:02:20,580
I wrote a book.

790
01:02:20,580 --> 01:02:21,580
It's a trunk novel.

791
01:02:21,580 --> 01:02:23,820
It'll never get published because it's so bad.

792
01:02:23,820 --> 01:02:29,060
But as I did that, I paid a lot of attention to what should my writing routine be every

793
01:02:29,060 --> 01:02:33,660
day and what do other successful published authors do?

794
01:02:33,660 --> 01:02:38,460
And one of the tips was that you sit down and you don't get up.

795
01:02:38,460 --> 01:02:39,460
You can't make tea.

796
01:02:39,460 --> 01:02:40,620
You can't make toast.

797
01:02:40,620 --> 01:02:44,980
All the millions of things that might distract you or cause you to procrastinate or whatever,

798
01:02:44,980 --> 01:02:50,220
no, you stay sitting and you focus on writing until it's all out of your system.

799
01:02:50,220 --> 01:02:54,220
Now that's different obviously than being a developer on Postgres.

800
01:02:54,220 --> 01:02:58,460
But I'm curious what your routine is every day.

801
01:02:58,460 --> 01:03:00,100
What time of day do you work best?

802
01:03:00,100 --> 01:03:02,500
Do you time box different kinds of work?

803
01:03:02,500 --> 01:03:08,900
Do you have particular weird eccentric habits that maybe make you a better problem solver

804
01:03:08,900 --> 01:03:10,780
or more creative?

805
01:03:10,780 --> 01:03:11,860
You already mentioned caffeine.

806
01:03:11,860 --> 01:03:16,460
So we know about your Diet Coke that's sitting on your desk.

807
01:03:16,460 --> 01:03:19,940
[TOM] I don't know.

808
01:03:19,940 --> 01:03:29,620
My normal routine is I get up and before breakfast I look at the mailing list, see what's going on.

809
01:03:29,620 --> 01:03:39,500
And David Rowley alluded to this in his podcast.

810
01:03:39,500 --> 01:03:43,100
You frequently don't find out what you're going to work on that day until you've seen

811
01:03:43,100 --> 01:03:46,340
what problems came in on the mailing list.

812
01:03:46,340 --> 01:03:54,140
And if I see something that looks like a bug, I think I know where to fix it.

813
01:03:54,140 --> 01:03:59,140
I might go off and spend the day doing that.

814
01:03:59,140 --> 01:04:06,420
If nothing like that happens, then I'll pick up on another project that I've been working on.

815
01:04:06,420 --> 01:04:13,020
Or lately that actually more often translates to reviewing somebody else's patch rather

816
01:04:13,020 --> 01:04:16,780
than working on something that I'm originating.

817
01:04:16,780 --> 01:04:33,660
I'm definitely not a morning person, so I'd say I probably do my best work in the afternoon.

818
01:04:33,660 --> 01:04:38,700
One of the things that is hard about this sort of working from home, I should probably

819
01:04:38,700 --> 01:04:44,700
back up about three steps here and say that the last time I went into an office on a regular

820
01:04:44,700 --> 01:04:50,100
basis was probably about the third or fourth year of grad school.

821
01:04:50,100 --> 01:04:54,020
Since then it's been almost exclusively working from home.

822
01:04:54,020 --> 01:05:02,860
So one of the bad things about that is it's quite difficult to separate work from not work.

823
01:05:02,860 --> 01:05:08,900
And that's why you often still find me responding on the mailing list in the evening hours.

824
01:05:08,900 --> 01:05:14,620
If I [don't] have a reason to go out of the house, I'll just continue to sit around and think

825
01:05:14,620 --> 01:05:18,140
about Postgres most nights.

826
01:05:18,140 --> 01:05:22,860
[CLAIRE] My husband has commented that about me too.

827
01:05:22,860 --> 01:05:32,020
Ever since I started working from home, which would have been for me 2020, I wonder why that was.

828
01:05:32,020 --> 01:05:36,980
I already worked a lot, but he says I work more now than I used to.

829
01:05:36,980 --> 01:05:40,180
And it is that difficulty of separating it.

830
01:05:40,180 --> 01:05:45,220
But I think if you love what you do, I'm not going to feel guilty about that.

831
01:05:45,220 --> 01:05:46,620
Do you feel guilty about it? [Not in the least]

832
01:05:46,620 --> 01:05:50,220
Do you feel like it hurts you?

833
01:05:50,220 --> 01:05:55,540
Wait, you said not in the least or in the least?

834
01:05:55,540 --> 01:05:56,540
Wait, what did you say?

835
01:05:56,540 --> 01:05:59,540
[TOM] I said not in the least.

836
01:05:59,540 --> 01:06:00,540
[CLAIRE] Okay.

837
01:06:00,540 --> 01:06:02,540
[TOM] So you enjoy it?

838
01:06:02,540 --> 01:06:03,540
I do.

839
01:06:03,540 --> 01:06:12,540
I mean, it's something I'm good at, something I enjoy doing.

840
01:06:12,540 --> 01:06:23,140
So, otherwise I would have gotten burned out long ago, I'm sure.

841
01:06:23,140 --> 01:06:29,820
[CLAIRE] Would you describe your work on Postgres as more creative or more analytical?

842
01:06:29,820 --> 01:06:39,420
[TOM] More an analytical kind of guy.

843
01:06:39,420 --> 01:06:47,860
I don't think of myself as being particularly creative.

844
01:06:47,860 --> 01:06:57,620
I have found that as things go on, as time goes on, I frequently am able to suggest ideas

845
01:06:57,620 --> 01:07:00,620
that other people maybe hadn't thought of.

846
01:07:00,620 --> 01:07:06,340
But it often feels to me like I'm suggesting something that's just obvious based on all

847
01:07:06,340 --> 01:07:15,060
my experience, rather than something being really novel.

848
01:07:15,060 --> 01:07:20,620
[CLAIRE] I'm guessing that it's probably not just obvious to everyone though, just because your experience

849
01:07:20,620 --> 01:07:23,860
is so different.

850
01:07:23,860 --> 01:07:28,900
So what's obvious to you is potentially novel to someone else.

851
01:07:28,900 --> 01:07:33,220
And I think that works in all sorts of directions.

852
01:07:33,220 --> 01:07:38,940
We all bring our background and our history and our baggage with us that sometimes will

853
01:07:38,940 --> 01:07:44,620
make us see things that other people don't.

854
01:07:44,620 --> 01:07:49,340
So you think of yourself as more analytical, but I can't imagine how you do the work you

855
01:07:49,340 --> 01:07:53,700
do if it's not also creative.

856
01:07:53,700 --> 01:08:01,780
So we're just going to have to agree to disagree on that one, I suppose.

857
01:08:01,780 --> 01:08:07,620
I want to know if there's any favorite tools you use in your development work on Postgres,

858
01:08:07,620 --> 01:08:11,340
or any unfavorite tools too.

859
01:08:11,340 --> 01:08:15,300
What tools do you use? Period.

860
01:08:15,300 --> 01:08:22,860
[TOM] Most of my development habits were set a pretty long time ago.

861
01:08:22,860 --> 01:08:30,220
I use Emacs for editing and mostly GDB for debugging.

862
01:08:30,220 --> 01:08:36,460
There are pretty standard tools like perf.

863
01:08:36,460 --> 01:08:49,780
I've occasionally played around with--not even sure what the word I want is here--visual

864
01:08:49,780 --> 01:08:50,780
development environments.

865
01:08:50,780 --> 01:08:56,980
I just never felt like that was the right thing for me.

866
01:08:56,980 --> 01:09:00,220
[CLAIRE] OK, dumb question here.

867
01:09:00,220 --> 01:09:08,740
When you use modern day Emacs for editing code, does it have all the syntax highlighting

868
01:09:08,740 --> 01:09:13,500
that the IDEs have these days?

869
01:09:13,500 --> 01:09:26,980
Because I know back when I used vi for editing source code, there was no syntax highlighting.

870
01:09:26,980 --> 01:09:33,220
[TOM] The main thing I rely on is it does auto-indenting and stuff pretty well.

871
01:09:33,220 --> 01:09:36,780
I actually don't like syntax highlighting.

872
01:09:36,780 --> 01:09:38,820
I find it hard to read.

873
01:09:38,820 --> 01:09:46,500
It's an eyesight kind of thing more than anything else.

874
01:09:46,500 --> 01:09:49,500
[CLAIRE] You told me before you have a really big monitor.

875
01:09:49,500 --> 01:09:50,980
Is it just one or two?

876
01:09:50,980 --> 01:09:51,980
It doesn't matter.

877
01:09:51,980 --> 01:09:52,980
[TOM] Just one.

878
01:09:52,980 --> 01:09:54,980
[CLAIRE] OK. [Just one]

879
01:09:54,980 --> 01:10:01,060
So what do you do when you go on vacation and you want to bring a little bit of work with you?

880
01:10:01,060 --> 01:10:03,220
Maybe you leave it all behind.

881
01:10:03,220 --> 01:10:08,300
But if you did bring your laptop with you, do you also bring a monitor?

882
01:10:08,300 --> 01:10:09,300
[TOM] No.

883
01:10:09,300 --> 01:10:16,900
I carry the biggest laptop I can get.

884
01:10:16,900 --> 01:10:21,780
These days it's MacBook 16 inch.

885
01:10:21,780 --> 01:10:22,780
I can work on that.

886
01:10:22,780 --> 01:10:25,700
I just prefer to have more screen space.

887
01:10:25,700 --> 01:10:28,940
[CLAIRE] All right.

888
01:10:28,940 --> 01:10:39,420
So now, before we go back to Postgres, the technology, I'm also curious about time management.

889
01:10:39,420 --> 01:10:43,540
And you talked about how you do all that interrupt-driven work.

890
01:10:43,540 --> 01:10:47,460
First thing in the morning, you're looking at the mailing list over breakfast, over Cheerios,

891
01:10:47,460 --> 01:10:52,740
if I remember correctly.

892
01:10:52,740 --> 01:10:58,300
But are there any other time management techniques that help you get things done by, I don't

893
01:10:58,300 --> 01:11:05,500
know, whatever the deadlines are, the CommitFests, which happen every other month? Is that right?

894
01:11:05,500 --> 01:11:11,500
And obviously, the Postgres releases once a year and code freezes in the spring and

895
01:11:11,500 --> 01:11:13,780
the actual GA releases in the fall.

896
01:11:13,780 --> 01:11:18,660
And I'm talking northern hemisphere spring and fall there, I guess.

897
01:11:18,660 --> 01:11:23,980
But are there any other time management techniques that you've developed over the years that help you?

898
01:11:23,980 --> 01:11:31,220
[TOM] I'm pretty awful at time management, I would say.

899
01:11:31,220 --> 01:11:38,500
[CLAIRE] When I get sucked into a problem, I can get into the zone and just sit there and think

900
01:11:38,500 --> 01:11:40,620
about it for hours.

901
01:11:40,620 --> 01:11:48,580
Even if there's something else I should be doing instead.

902
01:11:48,580 --> 01:11:52,140
I'm glad that didn't happen today. [Laughs]

903
01:11:52,140 --> 01:11:55,620
I'm glad you're here and not sucked into a Postgres problem.

904
01:11:55,620 --> 01:12:01,700
[TOM] That's because I have a calendar app. I do use that.

905
01:12:01,700 --> 01:12:02,700
[CLAIRE] Okay.

906
01:12:02,700 --> 01:12:10,540
I actually think it's really cool when you are so deeply involved in a question or a

907
01:12:10,540 --> 01:12:14,460
problem or a project that you lose track of time.

908
01:12:14,460 --> 01:12:19,780
For me, it's a sign that you're doing the right kinds of work.

909
01:12:19,780 --> 01:12:32,180
[TOM] Yeah. I mean, if you never find yourself doing that, then you have to ask yourself if you're

910
01:12:32,180 --> 01:12:34,980
in the right line of work, I think.

911
01:12:34,980 --> 01:12:43,340
At least for people like us who are fortunate enough to be able to be in this sort of job

912
01:12:43,340 --> 01:12:53,220
in the first place, you really have to look for something that just fits your way of thinking

913
01:12:53,220 --> 01:12:56,540
and fits what you find interesting to do.

914
01:12:56,540 --> 01:13:04,540
Because if it doesn't, you can go find something else that does fit you better.

915
01:13:04,540 --> 01:13:10,380
[CLAIRE] All right. So let's pivot to Postgres for a second.

916
01:13:10,380 --> 01:13:16,540
You talked about the importance of reading emails and interacting with people who are

917
01:13:16,540 --> 01:13:21,780
actual Postgres users on the mailing list.

918
01:13:21,780 --> 01:13:27,300
But I know that there's no one setting a roadmap for Postgres, right?

919
01:13:27,300 --> 01:13:34,980
It's not so many software projects, particularly ones that are primarily run by a single company.

920
01:13:34,980 --> 01:13:40,420
There is someone setting direction, like saying this is going to be the theme of this release,

921
01:13:40,420 --> 01:13:46,060
or these are the kinds of features that are a must have for our enterprise customers or whatever.

922
01:13:46,060 --> 01:13:49,460
But Postgres doesn't have that.

923
01:13:49,460 --> 01:13:56,300
It's very, in many ways, bottoms up in terms of what patches get submitted.

924
01:13:56,300 --> 01:14:01,060
So how do you as an individual decide what parts of Postgres you're going to work on

925
01:14:01,060 --> 01:14:03,260
for each release?

926
01:14:03,260 --> 01:14:07,540
[TOM] Well, I don't have a roadmap either.

927
01:14:07,540 --> 01:14:21,820
I mean, maybe I could develop one, but just it's not something that attracts me to have.

928
01:14:21,820 --> 01:14:28,580
I have relatively short term, well, usually relatively short term things that I think

929
01:14:28,580 --> 01:14:36,460
about and work on for a few months and that's done and I go on to something else.

930
01:14:36,460 --> 01:14:47,940
I can only think of one really large multi-year project that I've done in recent past, which

931
01:14:47,940 --> 01:14:58,860
was the thing to attach outer join nulling information to variables.

932
01:14:58,860 --> 01:15:03,820
I probably don't even want to try to explain what that is on this podcast, but it was something

933
01:15:03,820 --> 01:15:06,780
that took several years to get done.

934
01:15:06,780 --> 01:15:14,260
And there's fallout that's still being worked on by me and other people to actually derive

935
01:15:14,260 --> 01:15:17,060
the advantages that the idea has.

936
01:15:17,060 --> 01:15:24,180
Richard Guo has committed some stuff recently, for example, that fell out of that work.

937
01:15:24,180 --> 01:15:30,140
But mostly I prefer to work on smaller projects where you can get some gratification in the

938
01:15:30,140 --> 01:15:35,060
period of weeks or months rather than years.

939
01:15:35,060 --> 01:15:36,060
[CLAIRE] Okay.

940
01:15:36,060 --> 01:15:45,140
Well, so that actually is a perfect lead in to, let's talk about how, if you were to step

941
01:15:45,140 --> 01:15:48,460
back and assess how your time gets spent, right?

942
01:15:48,460 --> 01:15:55,060
There's contributing as an author, as a developer, but you also spend time reviewing other people's

943
01:15:55,060 --> 01:16:02,540
patches, committing other people's patches, collaborating with other people on their work

944
01:16:02,540 --> 01:16:05,940
on the mailing list in particular.

945
01:16:05,940 --> 01:16:11,660
Do you have a sense of like percentage wise, how much time you spent in kind of each of

946
01:16:11,660 --> 01:16:16,540
those different areas of focus?

947
01:16:16,540 --> 01:16:28,300
[TOM] Lately, it's been mostly reviewing and committing other people's patches.

948
01:16:28,300 --> 01:16:32,540
That's probably more than half my time.

949
01:16:32,540 --> 01:16:39,300
And then there's been another big fragment, just interacting with community that goes

950
01:16:39,300 --> 01:16:45,020
down to looking at people's problems and things like that.

951
01:16:45,020 --> 01:16:56,980
The things that I do that are totally my own work or just not that big a part of my day any more.

952
01:16:56,980 --> 01:17:03,580
I miss that a little bit, but until an idea comes along for something that I want to work

953
01:17:03,580 --> 01:17:12,260
on, it's hard to make that part the bigger part of the day.

954
01:17:12,260 --> 01:17:16,940
[CLAIRE] And among the different things that you do, whether it's answering like pgsql-bugs emails,

955
01:17:16,940 --> 01:17:21,940
or reviewing other people's work, chiming in on the mailing list, do you have favorites?

956
01:17:21,940 --> 01:17:29,820
Are there things that you find more, I don't know, motivating or that make you happier?

957
01:17:29,820 --> 01:17:38,340
[TOM] I still like designing and writing code the best.

958
01:17:38,340 --> 01:17:48,220
And helping improve somebody else's code is a little bit below that.

959
01:17:48,220 --> 01:17:54,780
[CLAIRE] Okay. But obviously helping improve someone else's code is, I suppose the reason you do it is

960
01:17:54,780 --> 01:17:58,260
it helps you get scale.

961
01:17:58,260 --> 01:18:00,500
It helps the project get scale.

962
01:18:00,500 --> 01:18:02,340
[TOM] Yeah, exactly.

963
01:18:02,340 --> 01:18:08,140
If the project were still the size it was back in the late nineties, we would not be

964
01:18:08,140 --> 01:18:12,100
anywhere near where we are today.

965
01:18:12,100 --> 01:18:19,260
So I have to spend a great deal of my time on helping out other people.

966
01:18:19,260 --> 01:18:22,260
It's just the nature of the beast.

967
01:18:22,260 --> 01:18:24,100
[CLAIRE] All right.

968
01:18:24,100 --> 01:18:27,900
So I also wanted to talk to you about time zones.

969
01:18:27,900 --> 01:18:34,700
And this is something that I struggle with.

970
01:18:34,700 --> 01:18:40,460
Now there's tools where you can schedule an email to be sent at a particular time of day

971
01:18:40,460 --> 01:18:47,140
or schedule, I don't know, in my case, a Teams chat or a Slack chat or whatever it is to

972
01:18:47,140 --> 01:18:49,380
be sent later.

973
01:18:49,380 --> 01:18:54,820
But the Postgres community is global.

974
01:18:54,820 --> 01:18:58,500
Nighttime for you is morning for someone else.

975
01:18:58,500 --> 01:19:03,700
But some people, if they receive an email from you, might feel like they've got to jump

976
01:19:03,700 --> 01:19:12,540
on it now, even though it's Friday night at 11 PM where they are or a weekend or whatever.

977
01:19:12,540 --> 01:19:17,580
Someone gave me feedback once that said, "You really shouldn't send Teams chats to your

978
01:19:17,580 --> 01:19:22,780
employees after 6 PM because it makes them stressed."

979
01:19:22,780 --> 01:19:26,980
And I was like, "Well, but we work different hours and that's okay.

980
01:19:26,980 --> 01:19:31,900
There's no expectation that they respond when they're having dinner or when they're out

981
01:19:31,900 --> 01:19:34,340
with friends that night or whatever."

982
01:19:34,340 --> 01:19:35,660
But anyway, I struggle with it.

983
01:19:35,660 --> 01:19:43,660
So I'm wondering how you think about time zones and that whole giving people grace so

984
01:19:43,660 --> 01:19:47,780
that they can take a break from their work and they don't feel like they have to respond

985
01:19:47,780 --> 01:19:48,780
to you right away.

986
01:19:48,780 --> 01:19:53,900
[TOM] Well, I certainly never expect that somebody has to respond to me right away. 

987
01:19:53,900 --> 01:20:03,980
I think one of the big advantages of email is that it is asynchronous.

988
01:20:03,980 --> 01:20:11,300
You can send a message to somebody who maybe is on the other side of the world and is asleep

989
01:20:11,300 --> 01:20:16,140
right now or at least not at their desk.

990
01:20:16,140 --> 01:20:24,980
And when they get back to you, you will no longer be awake.

991
01:20:24,980 --> 01:20:33,020
So it slows things down a little bit, I guess, but it just is a good way to work for a project

992
01:20:33,020 --> 01:20:35,900
that's as spread out as we are.

993
01:20:35,900 --> 01:20:50,220
You just have to not expect there's going to be an instantaneous answer.

994
01:20:50,220 --> 01:20:51,780
[CLAIRE] You mentioned something about friendships.

995
01:20:51,780 --> 01:20:54,980
I mean, you've worked on this project for 26 years.

996
01:20:54,980 --> 01:21:03,900
I'm assuming there's a whole bunch of friendships that have come up along the way.

997
01:21:03,900 --> 01:21:12,860
[TOM] Mostly people I see at conferences.

998
01:21:12,860 --> 01:21:25,020
I've been going to conferences with them for, well, decades now.

999
01:21:25,020 --> 01:21:30,540
It's a big part of the reason why I stay in the community is I'm friends with a bunch of people.

1000
01:21:30,540 --> 01:21:37,660
[CLAIRE] Well, and when it comes to conferences, so I think it's fair to say that you're, not

1001
01:21:37,660 --> 01:21:42,940
to stereotype, but you're more introverted than I am, I'm guessing.

1002
01:21:42,940 --> 01:21:44,820
Would you describe yourself as an introvert?

1003
01:21:44,820 --> 01:21:46,740
[TOM] I definitely would.

1004
01:21:46,740 --> 01:21:50,340
[CLAIRE] Okay. But you still enjoy Postgres conferences.

1005
01:21:50,340 --> 01:21:54,380
You don't need to be an extrovert to enjoy them, right?

1006
01:21:54,380 --> 01:21:55,780
[TOM] Well, uh...

1007
01:21:55,780 --> 01:21:59,180
[CLAIRE] I'm trying to lead the way.

1008
01:21:59,180 --> 01:22:04,460
[TOM] I enjoy them and I'm not an extrovert, so there you have it.

1009
01:22:04,460 --> 01:22:05,460
[CLAIRE] Okay.

1010
01:22:05,460 --> 01:22:10,580
So, no, the reason I bring that up is I guess I'm leading to the fact that I think, for

1011
01:22:10,580 --> 01:22:16,820
me, I feel so at home at Postgres conferences, which is pretty amazing given that I've only

1012
01:22:16,820 --> 01:22:22,500
worked in this community for seven and a half years, compared to your 26 years.

1013
01:22:22,500 --> 01:22:25,260
I don't have as many years in the boat.

1014
01:22:25,260 --> 01:22:31,380
And to that extent, my friendships aren't as deep as yours probably are, but I go to

1015
01:22:31,380 --> 01:22:34,940
these Postgres conferences and it's just wonderful.

1016
01:22:34,940 --> 01:22:35,940
It's really cool.

1017
01:22:35,940 --> 01:22:42,100
I think I've met people who are contributors to the community and they also feel like that,

1018
01:22:42,100 --> 01:22:44,660
but I've also met a lot of users at some of these.

1019
01:22:44,660 --> 01:22:50,140
I was just at PGConf New York City last week and PGConf.EU is coming up.

1020
01:22:50,140 --> 01:22:54,100
It changes cities in Europe every year.

1021
01:22:54,100 --> 01:22:59,620
This year, it's usually in October and this year it's going to be in Athens, Greece.

1022
01:22:59,620 --> 01:23:03,020
PGConf.dev is where I last saw you in person, right?

1023
01:23:03,020 --> 01:23:07,900
And that's the one that happens in Canada, usually in May.

1024
01:23:07,900 --> 01:23:15,740
So I guess I'm fishing for if somebody is listening to this and they are a user of Postgres

1025
01:23:15,740 --> 01:23:21,360
or maybe a new contributor, but they've never been, and they're wondering, should I go?

1026
01:23:21,360 --> 01:23:22,360
What would you tell them?

1027
01:23:22,360 --> 01:23:28,500
[TOM] I'd tell you, yeah, if there is a conference that is convenient for you to get to, you

1028
01:23:28,500 --> 01:23:29,500
should give it a try.

1029
01:23:29,500 --> 01:23:36,420
This is, I think, a wonderful community.

1030
01:23:36,420 --> 01:23:40,260
[CLAIRE] All right.

1031
01:23:40,260 --> 01:23:46,020
So I think I'm going to drop the link in for PGConf.EU in particular.

1032
01:23:46,020 --> 01:23:47,900
I don't know if it's sold out yet or not.

1033
01:23:47,900 --> 01:23:50,920
It usually does sell out before the conference day.

1034
01:23:50,920 --> 01:23:56,920
But if anybody does listen to this after we publish in a couple of days and they're available

1035
01:23:56,920 --> 01:24:02,740
the week of October 22nd and it's not yet sold out, I just want them to know about it.

1036
01:24:02,740 --> 01:24:08,600
I also think that all the talks from this year's PGConf.EU are going to be, well, not

1037
01:24:08,600 --> 01:24:14,040
all the talks, many of the talks, the ones where the speaker has given permission are

1038
01:24:14,040 --> 01:24:18,400
likely going to be published on YouTube afterwards, which is pretty cool.

1039
01:24:18,400 --> 01:24:22,320
Yes. And I just got confirmation from Daniel Gustafson.

1040
01:24:22,320 --> 01:24:26,480
Talks will be recorded.

1041
01:24:26,480 --> 01:24:30,240
There's another conference I'm involved in called POSETTE: An Event for Postgres.

1042
01:24:30,240 --> 01:24:35,800
It's put together on behalf of or by Microsoft, but we have participation from people all

1043
01:24:35,800 --> 01:24:38,560
over the world from all sorts of different companies.

1044
01:24:38,560 --> 01:24:40,840
And what I like about that is it's all virtual.

1045
01:24:40,840 --> 01:24:45,400
So you don't even have to travel to participate and to benefit.

1046
01:24:45,400 --> 01:24:51,420
All right, I'll get off my talk soapbox now.

1047
01:24:51,420 --> 01:24:58,400
So I suspect, Tom, that it's hard to remember what it was like to be new to the Postgres

1048
01:24:58,400 --> 01:25:00,360
project because that was 26 years ago.

1049
01:25:00,360 --> 01:25:06,640
And I certainly, there's a lot about 26 years ago that I've forgotten.

1050
01:25:06,640 --> 01:25:11,520
And also the Postgres project is totally different now than it was in 1998.

1051
01:25:11,520 --> 01:25:17,600
I hazard that there are more contributors, more components, more features, different

1052
01:25:17,600 --> 01:25:21,240
tooling, like lots of things are different. But...

1053
01:25:21,240 --> 01:25:27,240
[TOM] Yeah, I think it's also our standards have gone up enormously.

1054
01:25:27,240 --> 01:25:37,720
I remember that, you know, I've been around the project for probably not much more than

1055
01:25:37,720 --> 01:25:41,680
about six months of doing a serious amount of work.

1056
01:25:41,680 --> 01:25:50,480
And they gave me a commit bit saying "we're tired of committing stuff for you."

1057
01:25:50,480 --> 01:25:59,640
And now, obviously, it's usually a multi-year journey for somebody to become a committer,

1058
01:25:59,640 --> 01:26:05,680
which is basically because there is just a bigger amount of code now that you have to

1059
01:26:05,680 --> 01:26:11,960
be familiar with in order to have a reasonable chance of not breaking things.

1060
01:26:11,960 --> 01:26:16,640
So we have to be more careful.

1061
01:26:16,640 --> 01:26:21,160
We use whatever tools we can to try to catch bugs.

1062
01:26:21,160 --> 01:26:30,320
We have, that's why we have all this testing infrastructure that didn't exist back in the day.

1063
01:26:30,320 --> 01:26:36,440
It's just a bigger, more complicated environment than it was when I got started.

1064
01:26:36,440 --> 01:26:44,320
But I guess the advice I would give for a new person is to try to pick some small area

1065
01:26:44,320 --> 01:26:51,680
to make a difference in and study that area.

1066
01:26:51,680 --> 01:26:56,640
Pick something that you're interested in, that you have ideas about how to make better.

1067
01:26:56,640 --> 01:26:59,840
And even then, start small.

1068
01:26:59,840 --> 01:27:05,680
If you start with a very ambitious patch, it's going to take forever to get anywhere

1069
01:27:05,680 --> 01:27:09,520
and you're likely to get burned out before you get done.

1070
01:27:09,520 --> 01:27:14,920
So pick some relatively small idea to do first.

1071
01:27:14,920 --> 01:27:21,000
And I talked already about getting feedback on the mailing lists about how selling

1072
01:27:21,000 --> 01:27:25,800
people on your idea can help make it better.

1073
01:27:25,800 --> 01:27:32,160
So that is how I would approach things, I think, if I were coming in new.

1074
01:27:32,160 --> 01:27:37,200
[CLAIRE] I think that's the thing that doesn't come naturally to a lot of people, particularly

1075
01:27:37,200 --> 01:27:41,920
people who aspire to do really good work.

1076
01:27:41,920 --> 01:27:49,160
It's very easy to toil away on your own to make sure that what you're producing is really,

1077
01:27:49,160 --> 01:27:51,600
really good before you share it.

1078
01:27:51,600 --> 01:28:00,480
And learning that hack, if you will, that, hey, sharing something early, even before

1079
01:28:00,480 --> 01:28:07,520
it's polished and perfect, is going to yield something better in the end.

1080
01:28:07,520 --> 01:28:11,600
And I don't know, it took me years to figure that one out.

1081
01:28:11,600 --> 01:28:17,080
[TOM] I actually can give an example.

1082
01:28:17,080 --> 01:28:21,560
Very recent, something I'm still working on.

1083
01:28:21,560 --> 01:28:27,920
Somebody complained on the mailing list that if they were writing an extension script and

1084
01:28:27,920 --> 01:28:33,280
it had an error in it, that our reporting for that totally sucked.

1085
01:28:33,280 --> 01:28:38,960
There's no context as to what the error was or where it was.

1086
01:28:38,960 --> 01:28:44,000
So that's an instance of -- and I got interested in doing something about that, which is an

1087
01:28:44,000 --> 01:28:50,760
instance of the pattern I mentioned before about listening to users.

1088
01:28:50,760 --> 01:28:59,960
And I wrote a quick hack that was by no means meant to be committed and put that up on a

1089
01:28:59,960 --> 01:29:07,120
list just to say, what do you think about doing something like this?

1090
01:29:07,120 --> 01:29:15,360
And it's been through three or four iterations now and still not committed.

1091
01:29:15,360 --> 01:29:19,640
So if you went and looked in the CommitFest, current CommitFest, you could find that link

1092
01:29:19,640 --> 01:29:22,040
pretty quickly.

1093
01:29:22,040 --> 01:29:31,840
But that I think is sort of development process works well in this community is to share something

1094
01:29:31,840 --> 01:29:38,920
early and improve it over time rather than expecting that you can show up out of nowhere

1095
01:29:38,920 --> 01:29:40,360
with a perfect patch.

1096
01:29:40,360 --> 01:29:45,800
It's just really the hard way to do it.

1097
01:29:45,800 --> 01:29:49,200
[CLAIRE] I love that example.

1098
01:29:49,200 --> 01:29:50,200
But it's still hard.

1099
01:29:50,200 --> 01:29:53,840
Particularly if you feel like you're going to be judged.

1100
01:29:53,840 --> 01:30:01,280
And maybe the idea still has warts or rough edges or hair on it.

1101
01:30:01,280 --> 01:30:06,200
So how do you get past that?

1102
01:30:06,200 --> 01:30:09,600
That notion that -- and it's public, right?

1103
01:30:09,600 --> 01:30:14,560
It's all out there for everyone to see.

1104
01:30:14,560 --> 01:30:21,960
[TOM] Yeah. This goes back to the thing we discussed earlier.

1105
01:30:21,960 --> 01:30:27,240
Of needing to develop a little bit of a thick skin.

1106
01:30:27,240 --> 01:30:35,160
Because if you approach it wrong, you're going to take any comments on your idea or your

1107
01:30:35,160 --> 01:30:37,960
patch as criticism.

1108
01:30:37,960 --> 01:30:42,520
And that is not a good way to react to it.

1109
01:30:42,520 --> 01:30:47,720
You have to understand that everybody wants to make things better.

1110
01:30:47,720 --> 01:30:57,160
And if they comment on your patch and say, "Why don't you do it like this?"

1111
01:30:57,160 --> 01:31:05,960
They're hoping to get to a better spot and you ought to respond to it in that spirit.

1112
01:31:05,960 --> 01:31:18,080
The other thing that I'm not sure that people entirely get all the time is that, you know,

1113
01:31:18,080 --> 01:31:23,000
frankly, an awful lot of ideas are not good.

1114
01:31:23,000 --> 01:31:24,000
Yeah.

1115
01:31:24,000 --> 01:31:26,720
You come along and say, "Why don't we do it like this?"

1116
01:31:26,720 --> 01:31:31,560
And there are actually good reasons not to do it like that.

1117
01:31:31,560 --> 01:31:37,480
So that's another reason not to spend too much time on something before you present it.

1118
01:31:37,480 --> 01:31:41,480
So maybe somebody will shoot it down for good reasons.

1119
01:31:41,480 --> 01:31:54,800
So it's just a mindset you have to adopt that, you know, you're looking for ways to improve

1120
01:31:54,800 --> 01:32:01,040
Postgres and some of your ideas will be good and some will be bad and some maybe get

1121
01:32:01,040 --> 01:32:04,720
to be good with some tweaking.

1122
01:32:04,720 --> 01:32:13,480
[CLAIRE] Yeah. I've often told people that in the kind of work that I do where English is my programming

1123
01:32:13,480 --> 01:32:15,800
language now, right?

1124
01:32:15,800 --> 01:32:22,480
No longer, other than, you know, YAML and HTML and some website stuff, I'm not an active

1125
01:32:22,480 --> 01:32:25,200
developer anymore.

1126
01:32:25,200 --> 01:32:27,640
But I'll often say my rough drafts suck.

1127
01:32:27,640 --> 01:32:30,680
They're just really bad.

1128
01:32:30,680 --> 01:32:32,040
But that's okay.

1129
01:32:32,040 --> 01:32:36,080
And getting my rough drafts out there and getting that early feedback makes the end

1130
01:32:36,080 --> 01:32:39,760
result so much better and gives me new ideas.

1131
01:32:39,760 --> 01:32:41,200
And sometimes I'll pivot.

1132
01:32:41,200 --> 01:32:45,960
Sometimes I'll just leave a lot on the cutting room floor.

1133
01:32:45,960 --> 01:32:49,720
But yeah, you've got to have to embrace that mindset.

1134
01:32:49,720 --> 01:32:59,360
All right. So if anybody's listening and they are a developer and they're thinking about getting more involved

1135
01:32:59,360 --> 01:33:05,440
in the Postgres community, where would you point them?

1136
01:33:05,440 --> 01:33:07,480
What should they go look at?

1137
01:33:07,480 --> 01:33:13,360
We talked about the mailing list, obviously.

1138
01:33:13,360 --> 01:33:17,480
[TOM] We talked about the mailing lists.

1139
01:33:17,480 --> 01:33:24,560
We have a thing called the CommitFest app, which is sort of a scoreboard of patches that

1140
01:33:24,560 --> 01:33:27,800
are being worked on.

1141
01:33:27,800 --> 01:33:33,080
If you're interested in, oh, I should back up here and say that one of the best things

1142
01:33:33,080 --> 01:33:41,440
to do to help learn about the code, if you're a new person, is to review other people's patches.

1143
01:33:41,440 --> 01:33:51,440
Because that will help you look at the code and look at what other people are doing.

1144
01:33:51,440 --> 01:33:56,440
And along the way, you can actually make a useful contribution, even if you don't know

1145
01:33:56,440 --> 01:33:58,720
very much.

1146
01:33:58,720 --> 01:34:03,320
At the very least, you can say, boy, this is not obvious.

1147
01:34:03,320 --> 01:34:09,280
Can you make it clearer or at least comment it better?

1148
01:34:09,280 --> 01:34:15,400
So even in very small ways, like just testing a patch to see if it does what you would like

1149
01:34:15,400 --> 01:34:17,480
it to do.

1150
01:34:17,480 --> 01:34:22,120
So I would encourage new people to try to review patches.

1151
01:34:22,120 --> 01:34:27,320
And the way to find things that are in need of review is to look at them on the CommitFest app,

1152
01:34:27,320 --> 01:34:32,760
see what's going on there.

1153
01:34:32,760 --> 01:34:36,080
We also have, I mentioned earlier, testing infrastructure.

1154
01:34:36,080 --> 01:34:42,280
There's a thing called BuildFarm, which is a pool of machines running all different operating systems.

1155
01:34:42,280 --> 01:34:48,000
And they're just continually running all the regression tests we have against whatever

1156
01:34:48,000 --> 01:34:52,200
the current development tip is.

1157
01:34:52,200 --> 01:35:00,000
So we keep an eye on that, see what's breaking BuildFarm.

1158
01:35:00,000 --> 01:35:05,560
Let's see.

1159
01:35:05,560 --> 01:35:11,240
[CLAIRE] I know that in the last episode of Talking Postgres, we had Melanie Plageman here as a

1160
01:35:11,240 --> 01:35:16,200
guest because she and Richard Guo, who you mentioned earlier, are the two newest Postgres

1161
01:35:16,200 --> 01:35:17,200
committers.

1162
01:35:17,200 --> 01:35:23,760
They were both invited to become committers earlier in 2024, back in April, if I remember

1163
01:35:23,760 --> 01:35:25,040
correctly.

1164
01:35:25,040 --> 01:35:28,840
And Melanie said she does a ton of learning.

1165
01:35:28,840 --> 01:35:31,880
She's a runner apparently.

1166
01:35:31,880 --> 01:35:37,000
And she does a lot of learning by downloading conference talks from Postgres conferences

1167
01:35:37,000 --> 01:35:42,600
and listening to those as she's running and listening to some of the Postgres podcasts as well.

1168
01:35:42,600 --> 01:35:44,880
So it's a way she can get two things done at once.

1169
01:35:44,880 --> 01:35:48,520
I don't know if that'll work for some people.

1170
01:35:48,520 --> 01:35:54,360
But I thought I'd throw that out there.

1171
01:35:54,360 --> 01:36:01,200
Well Tom, unless you have other tips about ways to learn more, I have made it through

1172
01:36:01,200 --> 01:36:02,760
all of the topics.

1173
01:36:02,760 --> 01:36:05,800
I mean, we went through a lot of chapters, right?

1174
01:36:05,800 --> 01:36:10,960
We talked about high school, your undergraduate years at Carnegie Mellon, Hewlett-Packard 

1175
01:36:10,960 --> 01:36:18,920
years, grad school, the Coke machine, Structured Software Systems, libjpeg, and then Postgres.

1176
01:36:18,920 --> 01:36:27,720
And I really appreciate you taking the time to walk us through kind of how you ended up here.

1177
01:36:27,720 --> 01:36:34,960
And I suppose if I'm going to ask one last question, it would be if there's a favorite

1178
01:36:34,960 --> 01:36:42,680
part of the Postgres community or something that is like a magnet or an North star that

1179
01:36:42,680 --> 01:36:50,920
kind of keeps you coming back to Postgres day after day besides the paycheck from Crunchy Data

1180
01:36:50,920 --> 01:36:52,560
to do so.

1181
01:36:52,560 --> 01:36:55,080
[TOM] Oh, I don't know.

1182
01:36:55,080 --> 01:36:59,280
I just, hold on a second.

1183
01:36:59,280 --> 01:37:01,120
My cat's doing something weird over here.

1184
01:37:01,120 --> 01:37:04,480
I'll be right back.

1185
01:37:04,480 --> 01:37:05,480
[CLAIRE] No problem.

1186
01:37:05,480 --> 01:37:08,280
I'm allergic to cats.

1187
01:37:08,280 --> 01:37:14,000
So maybe one of the benefits of this, this podcast being recorded remotely is that I

1188
01:37:14,000 --> 01:37:15,600
don't have to be near your cat.

1189
01:37:15,600 --> 01:37:18,600
[TOM] Right, okay. He's stopped.

1190
01:37:18,600 --> 01:37:24,160
He was making a distressing amount of noise for a little while there.

1191
01:37:24,160 --> 01:37:29,600
No, just, you know, I enjoy being part of this community.

1192
01:37:29,600 --> 01:37:33,000
I enjoy working on this code.

1193
01:37:33,000 --> 01:37:41,160
I don't have anything deeper than that, I'm afraid.

1194
01:37:41,160 --> 01:37:48,760
[CLAIRE] So the technology and the people, and all these longstanding relationships.

1195
01:37:48,760 --> 01:37:50,760
Cool. All right.

1196
01:37:50,760 --> 01:37:58,720
Well, I want to say thank you, Tom, for joining us, and the next episode, Episode 21 of Talking Postgres

1197
01:37:58,720 --> 01:38:04,520
is also going to be recorded live and that will be on Wednesday, November 13th at 10 AM PST.

1198
01:38:07,600 --> 01:38:11,400
Because we will have changed time zones by that point in November.

1199
01:38:11,400 --> 01:38:17,320
The guest is Andrew Atkinson and the topic in November will be helping Rails developers learn Postgres.

1200
01:38:18,860 --> 01:38:22,960
So if you want to mark your calendar now to be part of that live recording, you can go to

1201
01:38:22,960 --> 01:38:30,560
aka.ms/talkingpostgres-ep21-cal

1202
01:38:30,560 --> 01:38:35,600
You can also go to past episodes and links to subscribe on all the different podcast

1203
01:38:35,600 --> 01:38:44,240
platforms at talkingpostgres.com and transcripts are included on the episode pages on talkingpostgres.com too.

1204
01:38:44,240 --> 01:38:49,600
And before we leave, if you have enjoyed this podcast, and I hope you have, please tell your

1205
01:38:49,600 --> 01:38:55,560
friends, in person, social media, however you share your recommendations to your friends

1206
01:38:55,560 --> 01:38:57,320
and your followers.

1207
01:38:57,320 --> 01:39:01,640
If you use social media, the hashtag is talkingpostgres, all one word.

1208
01:39:01,640 --> 01:39:07,320
And word of mouth is definitely one of the best ways for people to discover this podcast.

1209
01:39:07,320 --> 01:39:11,680
And a big thank you to everybody who enjoyed the live recording and participated in the

1210
01:39:11,680 --> 01:39:14,080
text chat today on Discord.

1211
01:39:14,080 --> 01:39:15,080
Thank you, Tom.

1212
01:39:15,080 --> 01:39:16,080
It's a wrap.

1213
01:39:16,080 --> 01:39:16,920
[TOM] Thank you.