WEBVTT

00:00.000 --> 00:15.480
Good afternoon everyone, hello, welcome to this talk by Clare Jordanna, who leads the Postgres

00:15.480 --> 00:19.440
open source efforts at Microsoft.

00:19.440 --> 00:20.440
Thank you.

00:20.440 --> 00:22.600
Can everybody hear me okay in the back?

00:22.600 --> 00:23.600
Show of hands?

00:23.600 --> 00:28.080
Okay, if for some reason I start talking like this and you can't hear me anymore, somebody

00:28.080 --> 00:31.620
wave to me and get my attention okay?

00:31.620 --> 00:35.640
Because I flew all the way here and I want to make sure I get a good recording.

00:35.640 --> 00:41.720
Thank you for joining me for lunch and to be part of this talk about building the next

00:41.720 --> 00:45.120
generation of open source contributors.

00:45.120 --> 00:49.680
My name obviously is Clare Jordanna and just so you know where I'm coming from, what

00:49.680 --> 00:54.880
my background is, my very first open source project was actually at Sun Microsystems

00:54.880 --> 01:00.040
where I worked in the kernel group and I led the effort to open source the Solaris operating

01:00.040 --> 01:08.080
system which was quite a wild ride, maybe, maybe thank you.

01:08.080 --> 01:14.000
And I had no idea what open source will how much fun and how rewarding it would be and

01:14.000 --> 01:16.960
how it would change the course of my career.

01:16.960 --> 01:22.240
A few years later, more than a few years later, more than 10 years later, I ended up joining

01:22.240 --> 01:28.160
a small San Francisco based startup called site is data that had an open source extension

01:28.160 --> 01:29.160
to postgres.

01:29.160 --> 01:35.600
So that's when I first got involved in Postgres and then a few years after that, Microsoft

01:35.600 --> 01:37.880
acquired site is data.

01:37.880 --> 01:43.800
And so over the last seven years since I joined Microsoft, we've been building a team of

01:43.800 --> 01:48.800
open source contributors to the Postgres upstream project and that's where I spend the

01:48.800 --> 01:53.360
bulk of my time right now, leading our community efforts.

01:53.360 --> 01:58.960
And this talk represents my views, not my employers, but based on my work on the upstream

01:58.960 --> 02:00.560
open source project.

02:00.560 --> 02:02.920
So that's some context.

02:02.920 --> 02:08.800
And the talk is about a challenge that I suspect, some of you, maybe even many of you also

02:08.800 --> 02:13.880
share and it might also keep you awake at night, which is how do you build that next

02:13.880 --> 02:19.920
generation of open source contributors if you're successful enough to be around long enough

02:19.920 --> 02:25.800
that people are going to start to move on or step back or retire, like, how do you make

02:25.800 --> 02:30.600
sure you've got people ready to take the baton on that project?

02:30.600 --> 02:32.960
Now, why are we talking about Postgres?

02:32.960 --> 02:38.440
So first of all, show of hands, how many of you have worked with Postgres as a user or

02:38.440 --> 02:39.440
a developer?

02:39.440 --> 02:41.440
Okay, I love it.

02:41.440 --> 02:42.440
That's awesome.

02:42.520 --> 02:44.760
How many of you love Postgres?

02:44.760 --> 02:45.760
Another show of hands?

02:45.760 --> 02:48.120
Okay, that's also equally awesome.

02:48.120 --> 02:52.040
For the camera, for the recording, please know there are a lot of people with our hands

02:52.040 --> 02:54.560
raised in the audience.

02:54.560 --> 02:59.320
So Postgres is on the present in the world and we're talking about it because for those

02:59.320 --> 03:06.440
who are unfamiliar, it's a relational database, it's open source, it's reliable, it's robust,

03:06.440 --> 03:08.680
used by millions of people.

03:08.680 --> 03:14.640
We just heard a talk a little a few minutes ago about QGIS, well, Postgres is the day-to-base

03:14.640 --> 03:20.920
that sits underneath PostGIS and so there's a lot of geospatial applications that run

03:20.920 --> 03:27.560
on top of it and some of the cloud database services out there that are based on Postgres

03:27.560 --> 03:33.240
or some of the fastest growing, managed services in the world and it's just got an amazing

03:33.240 --> 03:35.680
community and I think that's the part.

03:35.680 --> 03:40.960
I heard the phrase once, come for the code and stay for the community.

03:40.960 --> 03:46.880
So it's not special, though, in terms of needing to make sure that the next generation

03:46.880 --> 03:49.000
is there to take the baton.

03:49.000 --> 03:55.080
So the reason we're talking about Postgres today is because our successes and our failures

03:55.080 --> 04:00.000
and our experiments might be useful to people in other open source projects.

04:00.000 --> 04:04.960
And so what we're going to do is talk about what's working as well as where we're still

04:04.960 --> 04:07.120
struggling as a project.

04:07.120 --> 04:09.400
So this isn't going to be a raw, raw cheerleader.

04:09.400 --> 04:11.280
Here's everything that's wonderful.

04:11.280 --> 04:14.080
We're going to look at both sides of the coins.

04:14.080 --> 04:19.840
I also want to clarify that when I talk about contributors to Postgres, there are definitely

04:19.840 --> 04:22.960
parts of this talk where I'm talking about hackers.

04:22.960 --> 04:26.240
I'm talking about people who contribute to the code.

04:26.240 --> 04:30.880
But there are other parts of the talk that are about people who contribute to the project

04:30.880 --> 04:31.880
in other ways.

04:31.880 --> 04:33.560
And I'm a good example of that.

04:33.560 --> 04:38.560
I have never committed or contributed a single lick of code to this project, even though

04:38.560 --> 04:45.000
I started off my life as a developer many, many, many years ago.

04:45.000 --> 04:48.160
But I do contribute to the project in other ways.

04:48.160 --> 04:54.320
And so we'll talk about both types of people because the project has a lot of different

04:54.320 --> 04:55.720
aspects to it.

04:55.720 --> 04:58.200
Okay, so why am I giving this talk?

04:58.200 --> 05:03.000
I host this monthly podcast called Talking Postgres and curious how many of you have

05:03.040 --> 05:05.760
heard of it by any chance.

05:05.760 --> 05:12.600
Okay, so not as many hands this time, but I'm hoping to see more the next time I'm up here.

05:12.600 --> 05:19.240
In the podcast, I talk to people who work with Postgres about why they do what they do

05:19.240 --> 05:23.680
and sometimes how they got there, what are their origin stories.

05:23.680 --> 05:27.280
And so the guests have been a mix of committars.

05:27.280 --> 05:32.680
Committars is the Postgres term for maintainers on other open source projects.

05:32.680 --> 05:38.680
Also had a lot of major contributors on the show, users of Postgres, some of the cloud

05:38.680 --> 05:41.680
operators who manage those managed services.

05:41.680 --> 05:47.280
Anyway, it's been a big mix and in those conversations, I started wondering about the

05:47.280 --> 05:49.880
next generation and how do we build it?

05:49.880 --> 05:55.720
So before we dive in to looking at the future, just a couple of quick things about the

05:55.720 --> 05:58.240
past and the present.

05:58.240 --> 06:04.760
First of all, this year is the 30th birthday for the Postgres open source project.

06:04.760 --> 06:09.640
So I'm not going to ask you all to start singing the happy birthday song because that would

06:09.640 --> 06:15.800
be a little bit awkward, especially because I can't hold a tune.

06:15.800 --> 06:17.800
But it's a pretty big milestone.

06:17.800 --> 06:23.600
The technology itself has been around for 40 years now, but the open source project began

06:23.600 --> 06:25.360
30 years ago.

06:25.360 --> 06:31.040
But over that 30-year time period, as you can see in this chart, the number of maintainers,

06:31.040 --> 06:36.840
what we call committars on the project, has grown from 5 to 31 today.

06:36.840 --> 06:40.560
Now these are just the maintainers, obviously there's a lot more people who contribute

06:40.560 --> 06:45.560
to the project beyond that, which we'll look at in just a minute.

06:45.560 --> 06:51.140
If we look at present day, the most recent release of Postgres came out last September,

06:52.140 --> 06:59.140
and we ship an annual major release every year in that same timeframe, it's very predictable.

06:59.140 --> 07:03.140
And in this release, there were over 3,000 commits.

07:03.140 --> 07:10.140
There were almost 4,000 files changed, over 400,000 lines of code changed,

07:10.140 --> 07:20.140
and 279 individual code or doc authors, who contributed at least one commit to the release.

07:20.140 --> 07:23.140
So that gives you a feel for the scope of the project.

07:23.140 --> 07:33.140
And of those 279 code authors, 83 of them contributed their first time change, which is kind of cool.

07:33.140 --> 07:35.140
I mean, that's what 30 percent.

07:35.140 --> 07:39.140
Now some of those are probably dried by contributors who just did this once,

07:39.140 --> 07:42.140
and then they're going to go back to wherever they came from.

07:42.140 --> 07:46.140
But still, gives you a sense of scope.

07:46.140 --> 07:53.140
Now, when I tried to calculate how many people worked on the project and contributed in some way,

07:53.140 --> 08:02.140
code or beyond code in 2025, the entire calendar year, the conclusion was more than 367.

08:02.140 --> 08:06.140
But probably a lot more than 367.

08:06.140 --> 08:08.140
So that's kind of the floor.

08:08.140 --> 08:14.140
We had the 279 who contributed code, and then I looked at the people who were recognized as

08:14.140 --> 08:18.140
significant contributors and major contributors.

08:18.140 --> 08:26.140
And those people who were recognized are recognized for multiple years of work for sustained contribution to the project.

08:26.140 --> 08:32.140
But beyond that, there are people who were, you could think of them as rising significant contributors.

08:32.140 --> 08:37.140
They haven't yet been recognized, but they are doing a lot, and they probably did a lot last year.

08:37.140 --> 08:40.140
So more than 367.

08:41.140 --> 08:45.140
All right, and I just also want to let you know that this project is very global.

08:45.140 --> 08:53.140
Now, this map is only a map of the 31 maintainers to the project, and it lets you know the countries that they live in.

08:53.140 --> 08:58.140
But it actually mirrors what we see with the rest of the project.

08:58.140 --> 09:04.140
There are people that contribute from so many countries, so many different places.

09:04.140 --> 09:08.140
It really is a global project, and if you look in the bottom right hand corner,

09:08.140 --> 09:11.140
you'll see that two of the maintainers are actually live in New Zealand.

09:11.140 --> 09:19.140
So I sometimes joke that New Zealand has more postgres commuters per capita than any other country in the world.

09:19.140 --> 09:22.140
And yeah, it's global.

09:22.140 --> 09:27.140
And when I think about who the contributors are, obviously we have drive-by contributors.

09:27.140 --> 09:29.140
I said that already.

09:29.140 --> 09:31.140
I believe there are a hobbyists.

09:31.140 --> 09:33.140
I don't know any.

09:33.140 --> 09:36.140
I have never met any, but I'm sure they exist.

09:36.140 --> 09:41.140
And in fact, when I was talking the other day to a room full of commuters,

09:41.140 --> 09:45.140
many of them told me that they started off as hobbyists.

09:45.140 --> 09:47.140
That's kind of how they got their start.

09:47.140 --> 09:52.140
And there are people to who maybe work as consultants, but they spend 10% of their time,

09:52.140 --> 09:55.140
or 20% of their time contributing to the project,

09:55.140 --> 09:59.140
and then other people get paid to work on postgres full time.

10:00.140 --> 10:03.140
And then quick view of a funnel.

10:03.140 --> 10:07.140
We don't actually track a funnel for our contributors.

10:07.140 --> 10:08.140
It doesn't exist.

10:08.140 --> 10:11.140
I had to kind of create this and put it together.

10:11.140 --> 10:18.140
And maybe we should measure it to figure out where the holes in our contributor funnel.

10:18.140 --> 10:21.140
But obviously people first get interested.

10:21.140 --> 10:24.140
They're drawn to the success of the project.

10:24.140 --> 10:26.140
Maybe they want to scratch an inch.

10:26.140 --> 10:30.140
They have a specific problem that needs to be fixed.

10:30.140 --> 10:35.140
Or maybe they're just curious to learn more or bored for some reason.

10:35.140 --> 10:36.140
And then they get activated.

10:36.140 --> 10:38.140
They start lurking on the mailing list.

10:38.140 --> 10:41.140
Maybe they start mailing and contributing.

10:41.140 --> 10:44.140
Start doing a couple of patch reviews.

10:44.140 --> 10:47.140
There are sometimes just last week in Prague.

10:47.140 --> 10:50.140
There was an intro to Postgres hacking workshop.

10:50.140 --> 10:55.140
I can see one of the instructors in the room holding a camera right now.

10:55.140 --> 10:59.140
And it's pretty awesome that people teach these workshops.

10:59.140 --> 11:02.140
And that's one way that people start to get engaged.

11:02.140 --> 11:09.140
Maybe they go and attend office hours with some of the commuters and maintainers as well.

11:09.140 --> 11:12.140
And then they started advancing through the system.

11:12.140 --> 11:15.140
And eventually if they're in it for the long game,

11:15.140 --> 11:19.140
they'll probably end up getting promoted to be a major contributor or a committer.

11:19.140 --> 11:23.140
They'll start mentoring other people, giving lots of conference talks,

11:23.140 --> 11:25.140
advocating, and more.

11:25.140 --> 11:30.140
So that's just a quick feel for the funnel that we need to care about,

11:30.140 --> 11:35.140
as we start to think about building the next generation of contributors.

11:35.140 --> 11:38.140
How many of you have read the book Anna Karenina?

11:38.140 --> 11:41.140
Okay, a few hands.

11:41.140 --> 11:42.140
I love this book.

11:42.140 --> 11:44.140
I took a Russian literature class in college.

11:44.140 --> 11:46.140
And this was one of the required reading.

11:46.140 --> 11:48.140
And it starts off with the line.

11:48.140 --> 11:51.140
Happy families are all alike.

11:51.140 --> 11:54.140
Every unhappy family is unhappy in its own way.

11:54.140 --> 11:59.140
And for some reason that made me think actually about James Bottomley's talk

11:59.140 --> 12:04.140
about the selfish contributor explained that he's given at Fossdom in the past.

12:04.140 --> 12:09.140
And I don't think this is one of the takeaways I was supposed to take away from that talk.

12:09.140 --> 12:11.140
But it did make me realize that you know,

12:11.140 --> 12:16.140
people contribute to open source projects for all sorts of different reasons.

12:17.140 --> 12:20.140
And the reasons are not the same, and they're not even altruistic.

12:20.140 --> 12:22.140
They might be selfish.

12:22.140 --> 12:26.140
I mean at the end of the day, those of us who get paid to work on Postgres,

12:26.140 --> 12:27.140
we need to eat.

12:27.140 --> 12:30.140
We need to put our kids through college, right?

12:30.140 --> 12:33.140
It's good to get paid to work on an open source project.

12:33.140 --> 12:37.140
So every contributor might be selfish in their own way.

12:37.140 --> 12:41.140
And one of the things on that awesome podcast that I mentioned earlier

12:41.140 --> 12:45.140
that I've learned is that all the origin stories are different.

12:45.140 --> 12:50.140
So this is a picture in the top left of a contributor committed

12:50.140 --> 12:52.140
to Postgres named Thomas Monroe.

12:52.140 --> 12:57.140
And he was telling the story about how he first started with Postgres,

12:57.140 --> 13:00.140
investigating locking mechanisms in Postgres.

13:00.140 --> 13:03.140
And it was because his application got a lot of press,

13:03.140 --> 13:06.140
and it was mentioned on some TV or radio show,

13:06.140 --> 13:09.140
and they got so many hits on the app,

13:09.140 --> 13:11.140
and it just completely melted down.

13:11.140 --> 13:13.140
So he's like, okay, we got to make a change.

13:13.140 --> 13:16.140
I've got to go investigate other databases,

13:16.140 --> 13:19.140
and that's how he ended up becoming involved in Postgres.

13:19.140 --> 13:23.140
Then when I was talking to a man named Hakey Lina Kangas,

13:23.140 --> 13:25.140
I hope I pronounced it right.

13:25.140 --> 13:29.140
He was on paternity leave, and with his second child,

13:29.140 --> 13:32.140
and the little girl was a really good sleeper.

13:32.140 --> 13:36.140
I don't know how people have babies that are really good sleepers,

13:36.140 --> 13:40.140
but his was, and so he needed something to do during the day,

13:40.140 --> 13:42.140
and he was looking for a new open source project

13:42.140 --> 13:46.140
to dig his teeth into, and that's how he got involved in Postgres.

13:46.140 --> 13:49.140
And he's now a committer who's one of the co-founders of neon

13:49.140 --> 13:52.140
that got acquired last year by Databricks,

13:52.140 --> 13:54.140
and absolutely brilliant man.

13:54.140 --> 13:57.140
And then there's Tom Lane, who some of you may have heard of,

13:57.140 --> 14:00.140
he's a very prolific Postgres contributor,

14:00.140 --> 14:06.140
and his original career goal was to become a pinball designer.

14:06.140 --> 14:09.140
But when he was in college, he was going to study mechanical engineering,

14:09.140 --> 14:13.140
but the professors in the EE department were more interesting.

14:13.140 --> 14:15.140
So we switched to electrical engineering.

14:15.140 --> 14:18.140
He was required to take an intro to CS class,

14:18.140 --> 14:21.140
and then a professor kind of came up to him and said,

14:21.140 --> 14:23.140
you know, you should apply to be a research assistants

14:23.140 --> 14:25.140
in the CS department.

14:25.140 --> 14:26.140
You're really good at this.

14:26.140 --> 14:29.140
And so he's like, well, I need a part-time job,

14:29.140 --> 14:32.140
and I don't want to flip burgers, so, okay, I'll give that a try.

14:32.140 --> 14:35.140
And so that ended up being the path that he took

14:35.140 --> 14:37.140
that led to Postgres.

14:37.140 --> 14:41.140
So people have different paths to bring them here.

14:41.140 --> 14:44.140
I was talking the other day to a man named Greg Bird.

14:44.140 --> 14:47.140
He works at AWS, and he's been in a database

14:47.140 --> 14:49.140
and system space for over 30 years,

14:49.140 --> 14:51.140
but he's brand new to Postgres.

14:51.140 --> 14:55.140
So he's kind of like an interesting, not case study,

14:55.140 --> 14:58.140
but person to talk to to find out like, well,

14:58.140 --> 15:00.140
what are your impressions of working on this project?

15:00.140 --> 15:04.140
I think he's been working on Postgres now for about seven months,

15:04.140 --> 15:06.140
so very, very new.

15:06.140 --> 15:09.140
And he thought it was great

15:09.140 --> 15:12.140
that there's this fantastic database,

15:12.140 --> 15:14.140
a challenging work that he could work on,

15:14.140 --> 15:17.140
and that someone was going to pay him to do it.

15:17.140 --> 15:20.140
But he found it both fun and frustrating,

15:20.140 --> 15:23.140
both challenging and anxiety written.

15:23.140 --> 15:26.140
And he said that the learnings have been as much

15:26.140 --> 15:29.140
about the code and the technology as they've been

15:29.140 --> 15:32.140
about how the commuters make decisions

15:32.140 --> 15:35.140
and what the personalities are like,

15:35.140 --> 15:38.140
amongst the group of maintainers on the project.

15:38.140 --> 15:43.140
So it's kind of interesting to hear about people's perceptions

15:43.140 --> 15:44.140
when they're new.

15:44.140 --> 15:46.140
When you're trying to think about, you know,

15:46.140 --> 15:48.140
are we growing in the right way?

15:48.140 --> 15:49.140
All right.

15:49.140 --> 15:51.140
So now we're going to dive into the future,

15:51.140 --> 15:53.140
building the next generation,

15:53.140 --> 15:56.140
and I had to figure out how to frame

15:56.140 --> 15:58.140
what we were going to talk about.

15:58.140 --> 16:01.140
So shout out to Tracy Kitter, who wrote this amazing book,

16:01.140 --> 16:03.140
the soul of the new machine.

16:03.140 --> 16:05.140
I've structured everything that we're going to talk about

16:05.140 --> 16:07.140
into these three buckets.

16:07.140 --> 16:10.140
The soul, the machine, and the fuel.

16:10.140 --> 16:14.140
And so for the soul, we'll be looking at the human ecosystem,

16:14.140 --> 16:17.140
the people, the community, the culture.

16:17.140 --> 16:20.140
For the machine, it's more about the developer workflows,

16:20.140 --> 16:23.140
and the processes, the tooling that we use,

16:23.140 --> 16:24.140
the governance.

16:24.140 --> 16:26.140
And then for the fuel, it's about the economics

16:26.140 --> 16:28.140
and how people get paid.

16:28.140 --> 16:30.140
So those are the groupings.

16:30.140 --> 16:34.140
But I did a ton of research in coming up with this talk.

16:34.140 --> 16:37.140
It is not just based on my observations,

16:37.140 --> 16:38.140
and my opinions.

16:38.140 --> 16:41.140
You'll see a long list of people at the end

16:41.140 --> 16:43.140
in the credit section.

16:43.140 --> 16:46.140
And I see some of the people who consulted with me,

16:46.140 --> 16:48.140
and I think them for all their work.

16:48.140 --> 16:51.140
But there was so much input I couldn't cover it all.

16:51.140 --> 16:54.140
So I had a cherry pick amongst the topics,

16:54.140 --> 16:57.140
but what we will do is look at what's working

16:57.140 --> 16:59.140
and where we're still struggling.

16:59.140 --> 17:00.140
All right.

17:00.140 --> 17:01.140
So are you still with me?

17:01.140 --> 17:02.140
Are you still awake?

17:02.140 --> 17:03.140
Have I board you yet?

17:03.140 --> 17:04.140
No?

17:04.140 --> 17:05.140
Okay.

17:05.140 --> 17:06.140
Good.

17:06.140 --> 17:08.140
Let's start with a soul, with the human bits,

17:08.140 --> 17:10.140
because at the end of the day,

17:10.140 --> 17:11.140
without people on these projects,

17:11.140 --> 17:13.140
none of it would exist.

17:13.140 --> 17:16.140
So one thing that's working is the welcoming community.

17:16.140 --> 17:18.140
That phrase come for the code,

17:18.140 --> 17:20.140
stay for the community.

17:20.140 --> 17:23.140
I'll never forget my very first PGConf EU,

17:23.140 --> 17:25.140
which was in Lisbon.

17:25.140 --> 17:28.140
That's an annual European Postgres conference.

17:28.140 --> 17:30.140
It changes cities,

17:30.140 --> 17:33.140
or changes countries, even every single year.

17:33.140 --> 17:35.140
And so there I wasn't Lisbon.

17:35.140 --> 17:37.140
It was brand new to the Postgres community,

17:37.140 --> 17:40.140
and people really made me feel like I belonged,

17:40.140 --> 17:43.140
which just like boggled my mind.

17:43.140 --> 17:46.140
There are a lot of conferences and meetups

17:46.140 --> 17:49.140
in the Postgres world where you can kind of build those

17:49.140 --> 17:53.140
in-person trust relationships that are so important.

17:53.140 --> 17:55.140
This particular sketch that you see

17:56.140 --> 17:59.140
is from an annual conference that's fairly new,

17:59.140 --> 18:01.140
called PG Day Lowlands,

18:01.140 --> 18:03.140
happens in the Netherlands every year,

18:03.140 --> 18:06.140
and Bodys Mejias, who is pictured on stage there.

18:06.140 --> 18:09.140
He often jokes that it's the second most popular

18:09.140 --> 18:11.140
European Postgres conference,

18:11.140 --> 18:13.140
and that always leads to a debate of,

18:13.140 --> 18:15.140
what's the first, and what's the third,

18:15.140 --> 18:17.140
and who are you to claim the second?

18:17.140 --> 18:19.140
But anyway,

18:19.140 --> 18:22.140
another thing that's working for us is just

18:22.140 --> 18:24.140
the joy of working on Postgres.

18:24.140 --> 18:27.140
I stole this slide from Bruce Momshin,

18:27.140 --> 18:29.140
who is part of the Postgres court team,

18:29.140 --> 18:33.140
and he is a very prolific conference speaker,

18:33.140 --> 18:36.140
just a really good educator in the Postgres space.

18:36.140 --> 18:38.140
And it's been around in the project

18:38.140 --> 18:41.140
since the very beginning 30 years ago, too.

18:41.140 --> 18:45.140
And he has a slide about why is programming fun

18:45.140 --> 18:48.140
that he gave here at Boston, actually,

18:48.140 --> 18:50.140
and a talk about community building.

18:50.140 --> 18:53.140
But in addition to programming being fun,

18:53.140 --> 18:55.140
Postgres is fun to work on.

18:55.140 --> 18:57.140
And I was talking to an engineer,

18:57.140 --> 18:59.140
the other day, who has been working on Postgres,

18:59.140 --> 19:01.140
probably for about four or five years,

19:01.140 --> 19:05.140
and what he said is that because this database is so big,

19:05.140 --> 19:08.140
and there's so many different subsystems,

19:08.140 --> 19:11.140
that there's a lot of choice about what kind of

19:11.140 --> 19:13.140
challenges that you can tackle,

19:13.140 --> 19:15.140
what you can work on, and he says that,

19:15.140 --> 19:17.140
that's pretty wonderful.

19:17.140 --> 19:19.140
Because even if you don't want to work on

19:19.140 --> 19:21.140
backup, for example,

19:21.140 --> 19:25.140
you can go work on other parts of the system.

19:25.140 --> 19:27.140
Another thing that's working for us,

19:27.140 --> 19:29.140
and this is true across the companies

19:29.140 --> 19:32.140
that are funding Postgres contributors

19:32.140 --> 19:35.140
on the upstream project is just high touch,

19:35.140 --> 19:36.140
one on one mentoring.

19:36.140 --> 19:38.140
And that shouldn't come as a surprise.

19:38.140 --> 19:40.140
I mean, I think that works across projects,

19:40.140 --> 19:42.140
and probably many of you have benefited

19:42.140 --> 19:44.140
from that over the years, or at least,

19:44.140 --> 19:46.140
I hope you have.

19:46.140 --> 19:49.140
So it's tried and true, but it works.

19:50.140 --> 19:52.140
And by the way, you're probably noticing

19:52.140 --> 19:55.140
I have a lot of sketches and graphics in this talk,

19:55.140 --> 19:58.140
and that's just because I'm a visual storyteller,

19:58.140 --> 20:00.140
and I'm allergic to bullets.

20:00.140 --> 20:04.140
But I put a lot of thought into what these graphics are.

20:04.140 --> 20:08.140
So I hope you don't conclude that this is a child

20:08.140 --> 20:10.140
a story or anything.

20:10.140 --> 20:13.140
I think the topic is still pretty important.

20:13.140 --> 20:16.140
In this case, it's a diagram of chemistry,

20:16.140 --> 20:19.140
and we have an experimentation with a photo

20:19.140 --> 20:23.140
above the lab of the six organizers

20:23.140 --> 20:25.140
from last year's PGConf.dev.

20:25.140 --> 20:29.140
We have an annual development conference in Postgres

20:29.140 --> 20:32.140
and about three years ago, a group of people

20:32.140 --> 20:34.140
decided to reboot it.

20:34.140 --> 20:36.140
Historically, it was called PGCon.

20:36.140 --> 20:39.140
It always happened in Ottawa, maybe you've heard of it.

20:39.140 --> 20:42.140
But more recently, it's been happening in Vancouver

20:42.140 --> 20:45.140
in Montreal, and they've really been doing

20:45.140 --> 20:48.140
a lot of experimentation with different formats

20:48.140 --> 20:50.140
and different types of sessions,

20:50.140 --> 20:53.140
and how to make it easier for new contributors

20:53.140 --> 20:55.140
to get involved in the project.

20:55.140 --> 20:57.140
And these are both code contributors,

20:57.140 --> 20:59.140
as well as contributors like me.

20:59.140 --> 21:02.140
So I think this is definitely something

21:02.140 --> 21:04.140
that is working well for the project,

21:04.140 --> 21:08.140
and props to Melanie Plagueman and Steve Singer,

21:08.140 --> 21:10.140
Jonathan Katz, Robert Haas,

21:10.140 --> 21:14.140
Katting Chen, and Paul Ramsey for doing that.

21:14.140 --> 21:17.140
And then another thing that I think is working

21:17.140 --> 21:20.140
is just the recognition of sustained contributors.

21:20.140 --> 21:23.140
And in recent years, there's been an effort

21:23.140 --> 21:26.140
to really work hard and make sure people don't get overlooked,

21:26.140 --> 21:28.140
because at the end of the day,

21:28.140 --> 21:32.140
most people like being recognized for good work,

21:32.140 --> 21:34.140
and it feels good.

21:34.140 --> 21:38.140
And you're more likely to do more of the work

21:38.140 --> 21:40.140
that feels good.

21:40.140 --> 21:44.140
So there's a whole policy that this is a screenshot of on the screen,

21:44.140 --> 21:48.140
and that's part of one of the many governance things in the project,

21:48.140 --> 21:50.140
and there's a contributors committee,

21:50.140 --> 21:54.140
and it's their job to figure out who to recognize

21:54.140 --> 21:56.140
in these different categories,

21:56.140 --> 21:59.140
like significant contributors and major contributors.

21:59.140 --> 22:02.140
And a lot of those people are code contributors,

22:02.140 --> 22:04.140
and then some of them are people like me,

22:04.140 --> 22:07.140
who are contributing to other aspects of the project.

22:08.140 --> 22:12.140
And then where we're struggling in the area of the soul.

22:12.140 --> 22:16.140
One area is just the belief that we probably don't have enough

22:16.140 --> 22:19.140
commuters in the pipeline.

22:19.140 --> 22:22.140
And if we fast forward five to seven years,

22:22.140 --> 22:26.140
I wouldn't be surprised if the people whose names are on that main

22:26.140 --> 22:29.140
tainer map, I showed a few minutes ago,

22:29.140 --> 22:33.140
if a few of those people choose to step back or retire.

22:34.140 --> 22:37.140
And so, you know, what we need to solve this,

22:37.140 --> 22:38.140
it's important.

22:38.140 --> 22:41.140
And people are definitely talking about it and doing things

22:41.140 --> 22:43.140
to contribute to it.

22:43.140 --> 22:45.140
And someone joked the other day,

22:45.140 --> 22:47.140
I went to the developer meeting,

22:47.140 --> 22:50.140
the Postgres developer meeting that happens a couple days

22:50.140 --> 22:52.140
before fondsdom here in Brussels,

22:52.140 --> 22:55.140
and I popped in for a little bit to talk about this talk.

22:55.140 --> 22:57.140
And somebody joked that,

22:57.140 --> 22:59.140
okay, the rule is going to have to be that you cannot retire

22:59.140 --> 23:02.140
until you have nominated and fully trained your successor.

23:02.140 --> 23:06.140
So, you know, that might just work.

23:06.140 --> 23:10.140
And it's no different than people who own businesses, right?

23:10.140 --> 23:14.140
They have to figure out how to train their successors.

23:14.140 --> 23:20.140
Another area where we're struggling is this question,

23:20.140 --> 23:24.140
are we accidentally overlooking people for promotion?

23:24.140 --> 23:28.140
When we say we don't have enough commuters in the pipeline,

23:28.140 --> 23:30.140
are we right about that?

23:30.140 --> 23:33.140
You know, one of the things in an open source project

23:33.140 --> 23:37.140
is you don't have managers out there advocating for their people,

23:37.140 --> 23:41.140
making sure that the potential and the accomplishments of people

23:41.140 --> 23:43.140
aren't getting overlooked.

23:43.140 --> 23:47.140
So, this is a question that one of the maintainers mentioned to me,

23:47.140 --> 23:51.140
and I thought it was a good question to chew on.

23:51.140 --> 23:54.140
And then another question that came up is,

23:54.140 --> 23:57.140
is there a desert in the middle?

23:57.140 --> 23:59.140
If you look at the mailing lists,

23:59.140 --> 24:02.140
we're a lot of postgres conversations take place,

24:02.140 --> 24:06.140
and you see somebody new chime in with questions

24:06.140 --> 24:10.140
or a potential patch proposal or something like that,

24:10.140 --> 24:14.140
a lot of times you'll see commuters jump on it

24:14.140 --> 24:18.140
to make that person first answer their question,

24:18.140 --> 24:22.140
but also to make them feel validated and to be responsive to them.

24:22.140 --> 24:26.140
But for major contributors who've been doing that job

24:26.140 --> 24:29.140
a couple years and don't need special handholding anymore,

24:29.140 --> 24:33.140
are they getting the attention and the mentoring that they need

24:33.140 --> 24:36.140
in order to move up to the committer level?

24:36.140 --> 24:39.140
And so, this was another thing that came up

24:39.140 --> 24:44.140
and that maybe is something that we could do better in.

24:44.140 --> 24:47.140
So, that's the summary of things that are working

24:47.140 --> 24:50.140
and that we're struggling with in the area of the soul.

24:50.140 --> 24:53.140
And now we're going to move on to the machine.

24:53.140 --> 24:56.140
We'll look at some more aspects of the project.

24:56.140 --> 24:58.140
And I'll start off again with the positives,

24:58.140 --> 25:01.140
because you know, it's always good to start with the positives.

25:01.140 --> 25:04.140
So, one of the things that's working is just the very

25:04.140 --> 25:07.140
predictable rhythm of our development life cycle.

25:07.140 --> 25:11.140
It's easy to understand, you know, annual major releases,

25:11.140 --> 25:13.140
quarterly patch releases.

25:13.140 --> 25:18.140
There's a commit fest where happens five times a year,

25:18.140 --> 25:22.140
so July, September, November, January, just finished one.

25:22.140 --> 25:24.140
And another one coming up in March.

25:24.140 --> 25:27.140
And this is a screenshot of the commit fest app

25:27.140 --> 25:30.140
where you can see all the patches that are out there

25:30.140 --> 25:33.140
waiting for review what the status is, all of that.

25:33.140 --> 25:37.140
And so, this is definitely a positive.

25:37.140 --> 25:41.140
And then another area that's working is patch review.

25:41.140 --> 25:45.140
And the fact that it has some interesting benefits

25:45.140 --> 25:48.140
beyond just ensuring the quality of the patches

25:48.140 --> 25:50.140
that get committed to postgres.

25:51.140 --> 25:54.140
I was talking to Tom Lane, and one of the things he said is,

25:54.140 --> 25:58.140
you know, the reason we emphasize patch reviews so much,

25:58.140 --> 26:01.140
it encourages people doing the review to read the code.

26:01.140 --> 26:05.140
Not just to read the patch, but to read the surrounding code,

26:05.140 --> 26:08.140
and that's the best way to increase knowledge of the system.

26:08.140 --> 26:11.140
So, it's not only improving the quality of the patches,

26:11.140 --> 26:16.140
but it's helping skill up the reviewers within the community.

26:16.140 --> 26:19.140
So, I thought that an iceberg was good for that.

26:19.140 --> 26:22.140
Just to show that there are these invisible benefits

26:22.140 --> 26:24.140
under the surface.

26:24.140 --> 26:26.140
Another thing that's working really well

26:26.140 --> 26:30.140
is the dedication and skill of the maintainers.

26:30.140 --> 26:33.140
In fact, as I talk to more junior developers,

26:33.140 --> 26:37.140
they tell me that one of the big magnets of joining the project

26:37.140 --> 26:40.140
and working on postgres is the chance to get to work

26:40.140 --> 26:45.140
with some of these pretty amazing brilliant talented luminaries.

26:45.140 --> 26:48.140
No, I know every project has brilliant people,

26:48.140 --> 26:50.140
and we don't corner the market on that.

26:50.140 --> 26:54.140
But if you're a database person, and you care about postgres,

26:54.140 --> 26:56.140
it's pretty cool.

26:56.140 --> 27:01.140
This is a sketch based on a photo that Tomosh Fondra took earlier.

27:01.140 --> 27:04.140
I guess last spring in Montreal,

27:04.140 --> 27:06.140
we have these twice a year,

27:06.140 --> 27:09.140
invitation only postgres developer meetings,

27:09.140 --> 27:14.140
and so this is what this was a sketch of that I tried to use as a way

27:14.140 --> 27:16.140
of depicting it.

27:16.140 --> 27:18.140
So, a lot of people in that are

27:18.140 --> 27:20.140
commuters and maintainers on the project.

27:20.140 --> 27:22.140
Another thing that's working are,

27:22.140 --> 27:25.140
I mentioned those intro to postgres hacking workshops

27:25.140 --> 27:27.140
that happen more and more commuters

27:27.140 --> 27:30.140
are experimenting with having office hours

27:30.140 --> 27:33.140
as a way to talk to them and get questions answered

27:33.140 --> 27:35.140
in a way that's off the mailing list

27:35.140 --> 27:38.140
and maybe a little bit less intimidating.

27:38.140 --> 27:41.140
And so, those things seem to be working well

27:41.140 --> 27:44.140
in helping new people kind of get their feet wet

27:44.140 --> 27:46.140
and step into the project.

27:46.140 --> 27:48.140
Another thing that's working

27:48.140 --> 27:51.140
is there have been a bunch of pretty dramatic improvements

27:51.140 --> 27:55.140
to CI infrastructure for postgres in the last couple of years.

27:55.140 --> 27:57.140
The way Tomosh Fondra describes that is that

27:57.140 --> 28:00.140
it's brought light to the darkness.

28:00.140 --> 28:03.140
And, obviously, especially if you're a drive-by contributor,

28:03.140 --> 28:05.140
I've got to imagine it's a lot nicer now

28:05.140 --> 28:09.140
to be able to get some automated testing

28:09.140 --> 28:11.140
done on your proposed patch.

28:11.140 --> 28:15.140
In this way, versus to break the build farm,

28:15.140 --> 28:18.140
which is probably what would have happened five years ago.

28:18.140 --> 28:19.140
So, that's working.

28:19.140 --> 28:21.140
But now let's talk about where we're struggling

28:21.140 --> 28:23.140
in the area of the machine.

28:23.140 --> 28:26.140
And one area is patch review bandwidth.

28:26.140 --> 28:29.140
So, the analogy I came up with for this is

28:29.140 --> 28:31.140
you see the planes circling overhead

28:31.140 --> 28:33.140
waiting to hear from air traffic control

28:33.140 --> 28:35.140
about the ability to land

28:35.140 --> 28:37.140
and there's a lot of planes up there

28:38.140 --> 28:40.140
and not that many are landing,

28:40.140 --> 28:42.140
which is a bit of hyperbole.

28:42.140 --> 28:44.140
Obviously, you saw that 3000 commits

28:44.140 --> 28:46.140
made it into postgres 18.

28:46.140 --> 28:48.140
So, it's not this bad,

28:48.140 --> 28:51.140
but it can feel this bad at times

28:51.140 --> 28:54.140
if you're waiting for patch review feedback.

28:54.140 --> 28:57.140
If you've submitted it and you haven't heard anything,

28:57.140 --> 28:59.140
imagine that can be very frustrating.

28:59.140 --> 29:02.140
Or if you're the person who's got

29:02.140 --> 29:04.140
umpteen reviews to do

29:04.140 --> 29:06.140
and you're feeling tremendous pressure

29:06.140 --> 29:08.140
to have been supportive of others in the community,

29:08.140 --> 29:10.140
but there's only 24 hours in the day.

29:10.140 --> 29:12.140
So, this is definitely

29:12.140 --> 29:14.140
I think an area where we're struggling.

29:14.140 --> 29:17.140
Another question that people brought up

29:17.140 --> 29:20.140
to me of all the people I interviewed

29:20.140 --> 29:22.140
quite a number of them brought up this question

29:22.140 --> 29:25.140
that keeps coming up of should we have component

29:25.140 --> 29:26.140
committers?

29:26.140 --> 29:28.140
Or people with restricted commit bits

29:28.140 --> 29:31.140
for just parts of the postgres subsystems,

29:31.140 --> 29:33.140
not for the whole thing.

29:33.140 --> 29:35.140
Right now, the maintainers,

29:35.140 --> 29:38.140
the commit bits that they have apply to all of the code

29:38.140 --> 29:40.140
and all of the docs.

29:40.140 --> 29:44.140
So, even if they're specialist in particular subsystems,

29:44.140 --> 29:48.140
they still are trusted with the entire source base.

29:48.140 --> 29:52.140
And so, people have discussed this over time

29:52.140 --> 29:55.140
and no one's felt comfortable enough to do it yet.

29:55.140 --> 29:56.140
There's pros and there's cons

29:56.140 --> 29:58.140
to having component committers,

29:58.140 --> 30:01.140
but it's going to keep coming up

30:01.140 --> 30:02.140
and who knows,

30:02.140 --> 30:05.140
maybe someday they'll be in attempt to experiment with it

30:05.140 --> 30:07.140
and just give it a try and see

30:07.140 --> 30:10.140
if it helps with the bandwidth issues.

30:10.140 --> 30:12.140
The other thing that has come up

30:12.140 --> 30:15.140
is this question of is mailing list culture

30:15.140 --> 30:18.140
a barrier to entry for new developers.

30:18.140 --> 30:22.140
Particularly for developers who are just more comfortable

30:22.140 --> 30:27.140
with DMs on discord or slack or text message

30:27.140 --> 30:30.140
or all the various channels that people have these days.

30:30.140 --> 30:33.140
What I hear is that for some people

30:33.140 --> 30:37.140
to ask what's a simple question on an email

30:37.140 --> 30:39.140
that's going to be archive forever

30:39.140 --> 30:41.140
can feel a little bit intimidating.

30:41.140 --> 30:45.140
And so, it just came up as an area

30:45.140 --> 30:46.140
that we're struggling.

30:46.140 --> 30:47.140
Now, there are a lot of positives

30:47.140 --> 30:50.140
to the mailing list culture that postgres uses.

30:50.140 --> 30:52.140
That archive is invaluable.

30:52.140 --> 30:55.140
The fact that people do have to be thoughtful

30:55.140 --> 30:58.140
with what they write probably means that those emails

30:59.140 --> 31:02.140
are more carefully written and they're more clear.

31:02.140 --> 31:05.140
So, there's a lot of positives

31:05.140 --> 31:08.140
but it still is uncomfortable for some new people

31:08.140 --> 31:11.140
and that's something that's going to continue to be discussed.

31:11.140 --> 31:15.140
On the bright side, about a year and a half ago,

31:15.140 --> 31:17.140
yeah, year and a half ago,

31:17.140 --> 31:19.140
after PDConf Dev,

31:19.140 --> 31:21.140
in 2024, Robert Hoss,

31:21.140 --> 31:25.140
who works at EDB and he's one of the maintainers of the project,

31:25.140 --> 31:27.140
he started a new mentoring program for new people.

31:27.140 --> 31:29.140
And if you want to be mentored in postgres,

31:29.140 --> 31:32.140
you should definitely reach out to Robert

31:32.140 --> 31:35.140
and apply for one of the next cohorts.

31:35.140 --> 31:38.140
But he ended up creating a discord server

31:38.140 --> 31:41.140
for people to use as part of that mentoring program.

31:41.140 --> 31:45.140
And they have these monthly hacking workshops as well

31:45.140 --> 31:48.140
in addition to the mentoring cohorts

31:48.140 --> 31:51.140
and the discord server ended up more thing

31:51.140 --> 31:54.140
to become a postgres hacking discord server

31:54.140 --> 31:56.140
and there's a lot of conversations happening on there

31:56.140 --> 32:00.140
and I put a screenshot here from someone named Phil Eaton

32:00.140 --> 32:01.140
who I don't know,

32:01.140 --> 32:04.140
but I thought it was interesting what he had to say

32:04.140 --> 32:06.140
that it's like a game changer for him

32:06.140 --> 32:08.140
in terms of accessibility

32:08.140 --> 32:12.140
that for people who want to learn more about postgres,

32:12.140 --> 32:15.140
it's just less intimidating than the mailing list.

32:15.140 --> 32:17.140
So, there you go.

32:17.140 --> 32:19.140
The question also comes up

32:19.140 --> 32:23.140
is the C programming language barrier to entry.

32:24.140 --> 32:27.140
I don't know, and you're getting your computer science degree these days,

32:27.140 --> 32:30.140
is it required to learn to program and see?

32:30.140 --> 32:31.140
I don't know.

32:31.140 --> 32:34.140
It was required when I got my degree years ago.

32:34.140 --> 32:37.140
So, now you know I'm a little bit older

32:37.140 --> 32:39.140
and I'm not a new grad.

32:39.140 --> 32:42.140
But in the postgres world,

32:42.140 --> 32:43.140
some of the engineers are telling me,

32:43.140 --> 32:45.140
we actually have a flavor of C,

32:45.140 --> 32:47.140
it's not a separate language,

32:47.140 --> 32:49.140
it's just a way in which we program and see.

32:49.140 --> 32:51.140
So they call it postgres C.

32:51.140 --> 32:54.140
But I have heard from some newer developers

32:54.140 --> 32:56.140
that it is a bit intimidating

32:56.140 --> 32:58.140
if they're not expert in this

32:58.140 --> 33:00.140
to have to learn about it.

33:00.140 --> 33:02.140
So that's an area that we're struggling.

33:02.140 --> 33:04.140
And then the other thing that came up

33:04.140 --> 33:06.140
is just that are getting started

33:06.140 --> 33:10.140
information for contributors is a bit fragmented,

33:10.140 --> 33:12.140
a bit out of date,

33:12.140 --> 33:14.140
it can be incomplete,

33:14.140 --> 33:16.140
and this is, oh my gosh,

33:16.140 --> 33:18.140
this is a solvable problem,

33:18.140 --> 33:20.140
but everybody's busy

33:20.140 --> 33:23.140
and so and doing other important things.

33:23.140 --> 33:25.140
So we haven't solved this problem yet

33:25.140 --> 33:28.140
and it will help to get there.

33:28.140 --> 33:31.140
And then another area that we're struggling

33:31.140 --> 33:33.140
is with AI SLAP submissions.

33:33.140 --> 33:35.140
Now this is a new problem.

33:35.140 --> 33:38.140
I, if I were giving this talk a year ago,

33:38.140 --> 33:40.140
I don't know that I would have brought this up.

33:40.140 --> 33:43.140
But it is definitely creating a burden

33:43.140 --> 33:45.140
for our maintainers to sift through

33:45.140 --> 33:48.140
to figure out what's real and what's not.

33:49.140 --> 33:52.140
It has the potential to create burnout

33:52.140 --> 33:54.140
amongst the maintainers.

33:54.140 --> 33:57.140
And it can also cause them to stop looking at

33:57.140 --> 34:00.140
email and submissions from new people

34:00.140 --> 34:03.140
because they don't know if that's real

34:03.140 --> 34:05.140
or if that's just AI SLAP.

34:05.140 --> 34:08.140
And so that can be bad

34:08.140 --> 34:11.140
and that new people on the mailing list

34:11.140 --> 34:13.140
might not get the attention they deserve

34:13.140 --> 34:15.140
even when they deserve it.

34:15.140 --> 34:18.140
Perhaps more pernicious question is

34:18.140 --> 34:22.140
will this use the AI cause

34:22.140 --> 34:24.140
some of the more junior developers to not learn

34:24.140 --> 34:26.140
as much as they could or they should?

34:26.140 --> 34:29.140
Because it does give you a great shortcut

34:29.140 --> 34:30.140
in some ways.

34:30.140 --> 34:32.140
But is it blocking learning?

34:32.140 --> 34:35.140
That's a question that people are talking about.

34:35.140 --> 34:37.140
And speaking of AI SLAP,

34:37.140 --> 34:39.140
there is a talk in this room,

34:39.140 --> 34:40.140
later today,

34:40.140 --> 34:42.140
being given by Daniel Stemberg on the curl project

34:42.140 --> 34:44.140
and it's on this very topic.

34:44.140 --> 34:46.140
So if it's something that you're interested in,

34:46.140 --> 34:49.140
you might want to swing back here at 17 o'clock.

34:49.140 --> 34:50.140
All right.

34:50.140 --> 34:53.140
So the other thing I found myself wondering

34:53.140 --> 34:56.140
and this didn't come as feedback from anybody else,

34:56.140 --> 34:58.140
but as I put this talk together,

34:58.140 --> 35:00.140
I wondered if we're measuring enough.

35:00.140 --> 35:02.140
Got it.

35:02.140 --> 35:05.140
I didn't put it in the struggling bucket per se,

35:05.140 --> 35:08.140
but I do think there's an opportunity here

35:08.140 --> 35:11.140
for us to look at the contributor funnel

35:11.140 --> 35:13.140
and try to figure out where the holes are

35:13.140 --> 35:16.140
because maybe they're not where we think.

35:16.140 --> 35:18.140
And not all commits are equal.

35:18.140 --> 35:19.140
And right now,

35:19.140 --> 35:22.140
we tend to look at how many commits

35:22.140 --> 35:25.140
an individual had authored in a particular release.

35:25.140 --> 35:28.140
But if half of them are typos,

35:28.140 --> 35:30.140
it's not quite the same thing.

35:30.140 --> 35:33.140
And so should we be looking at impact

35:33.140 --> 35:36.140
and not just at numbers of commits?

35:36.140 --> 35:40.140
And so I think there might be an opportunity here.

35:40.140 --> 35:42.140
If there's a data scientist in the room

35:42.140 --> 35:44.140
who loves data bases and who loves Postgres,

35:44.140 --> 35:47.140
maybe there's a project here for you.

35:47.140 --> 35:48.140
All right.

35:48.140 --> 35:51.140
So that's the machine looking at what's working

35:51.140 --> 35:53.140
and where we're struggling.

35:53.140 --> 35:56.140
And now I want to talk about the fuel

35:56.140 --> 35:57.140
for just a minute.

35:57.140 --> 36:00.140
The economics behind this project.

36:00.140 --> 36:02.140
And the first thing that's really working

36:02.140 --> 36:05.140
in our favor is that Postgres is hot.

36:05.140 --> 36:07.140
Like a lot of people are using it.

36:07.140 --> 36:09.140
A lot of businesses, a lot of companies.

36:09.140 --> 36:11.140
It's used in mission critical workflows.

36:11.140 --> 36:13.140
It's used in small startups.

36:13.140 --> 36:14.140
Developers love it.

36:14.140 --> 36:15.140
Students learn it.

36:15.140 --> 36:18.140
And there's a lot of Postgres jobs out there.

36:18.140 --> 36:20.140
So this commercial gravity,

36:20.140 --> 36:21.140
if you will,

36:21.140 --> 36:24.140
is attracting people to learn the technology

36:24.140 --> 36:26.140
and work on the project.

36:26.140 --> 36:28.140
And so that's pretty awesome.

36:28.140 --> 36:30.140
Another thing that's working

36:30.140 --> 36:33.140
is the corporate funding of contributors

36:33.140 --> 36:35.140
to work full-time on the project.

36:35.140 --> 36:38.140
Now this screenshot is only

36:38.140 --> 36:41.140
of the maintainers, only of the commissioners.

36:41.140 --> 36:44.140
So, but when I talk about the corporate funding

36:44.140 --> 36:46.140
of contributors, I'm talking about way more

36:46.140 --> 36:49.140
than just this list of 31 people.

36:49.140 --> 36:52.140
But this list of 31 people is correct

36:52.140 --> 36:54.140
in terms of who the maintainers are

36:54.140 --> 36:57.140
as of a couple days ago in January.

36:57.140 --> 36:59.140
And what companies are funding them

36:59.140 --> 37:03.140
to work full-time on the project.

37:03.140 --> 37:07.140
And then, like I said,

37:07.140 --> 37:09.140
there's people who are part-time contributors,

37:09.140 --> 37:11.140
and their companies are funding them to do that.

37:11.140 --> 37:14.140
And other types of, you know,

37:14.140 --> 37:15.140
major contributors,

37:15.140 --> 37:16.140
significant contributors,

37:16.140 --> 37:18.140
also getting paid to work on it.

37:18.140 --> 37:20.140
So that's pretty awesome.

37:20.140 --> 37:23.140
Where we're struggling in the area of fuel.

37:23.140 --> 37:25.140
Robert Hoss, a VDB, gave a talk

37:25.140 --> 37:29.140
at PGConf Dev last spring.

37:29.140 --> 37:31.140
And it was called Committer paranoia.

37:31.140 --> 37:34.140
And as I was doing my research for this talk,

37:34.140 --> 37:39.140
I watched it only at 1.5x speed, so not too fast.

37:39.140 --> 37:43.140
And I found myself laughing when I got to this section,

37:43.140 --> 37:47.140
not laughing at him, laughing with him

37:47.140 --> 37:48.140
and with the situation.

37:48.140 --> 37:51.140
But he had this picture in his talk.

37:51.140 --> 37:53.140
And he said, it's easy to imagine

37:53.140 --> 37:55.140
that if you're a contributor who's

37:55.140 --> 37:58.140
waiting on the committer's to commit

37:58.140 --> 38:02.140
your patch request, it's easy to imagine that this picture

38:02.140 --> 38:06.140
depicts how the committer feels when they type get push.

38:06.140 --> 38:09.140
But in fact, it's a lot more like this.

38:09.140 --> 38:12.140
And he says, when he talks to the other maintainers,

38:12.140 --> 38:14.140
they say it's stressful.

38:14.140 --> 38:16.140
They do a lot of painstaking,

38:16.140 --> 38:19.140
exhaustive verification of a patch,

38:19.140 --> 38:22.140
whether it belongs to someone else or belongs to them,

38:22.140 --> 38:23.140
before they push it.

38:23.140 --> 38:25.140
Because, and he said that often,

38:25.140 --> 38:27.140
there was a phrase to push their own patches

38:27.140 --> 38:29.140
as they are somebody else's.

38:30.140 --> 38:32.140
And that it's hard.

38:32.140 --> 38:35.140
Because obviously, if there is a problem,

38:35.140 --> 38:37.140
you're on the hook to go get it fixed,

38:37.140 --> 38:39.140
and to go get it fixed right away,

38:39.140 --> 38:41.140
and go get it fixed yesterday.

38:41.140 --> 38:44.140
And so it can actually be stressful.

38:44.140 --> 38:47.140
Another area that we're struggling

38:47.140 --> 38:48.140
is the whole premise.

38:48.140 --> 38:51.140
The whole reason I decided to give this talk.

38:51.140 --> 38:54.140
So this image is my image of what a beautiful

38:54.140 --> 38:56.140
retirement party would be.

38:56.140 --> 38:59.140
I'd like to go sailing in the Greek Islands in the summer.

38:59.140 --> 39:02.140
And so this is on a Greek island,

39:02.140 --> 39:05.140
looking out at other Greek islands across the agency.

39:05.140 --> 39:08.140
I just think this would be a really nice place

39:08.140 --> 39:10.140
to celebrate a retirement.

39:10.140 --> 39:14.140
But people are going to move on or step back

39:14.140 --> 39:16.140
or do something different or retire.

39:16.140 --> 39:19.140
And so figuring out those succession plans,

39:19.140 --> 39:22.140
making sure that people are trained and ready

39:22.140 --> 39:24.140
to take on the batons.

39:24.140 --> 39:28.140
You know, is something that the organization and the team

39:28.140 --> 39:31.140
and people are all working on and talking about,

39:31.140 --> 39:32.140
which is good, right?

39:32.140 --> 39:34.140
It's better than sticking your head in the sand

39:34.140 --> 39:35.140
and ignoring it.

39:35.140 --> 39:37.140
So it is getting attention,

39:37.140 --> 39:39.140
but it is an area that I would say

39:39.140 --> 39:43.140
we probably don't have completely figured out yet.

39:43.140 --> 39:46.140
And so that's it for fuel,

39:46.140 --> 39:49.140
summary of what's working and where we're struggling.

39:49.140 --> 39:51.140
So now what?

39:52.140 --> 39:53.140
Why?

39:53.140 --> 39:55.140
What's the TLDR?

39:55.140 --> 39:57.140
What are the takeaways from this talk?

39:57.140 --> 40:01.140
The good news is that I feel like in the last 30 years

40:01.140 --> 40:03.140
of this open source project,

40:03.140 --> 40:05.140
Postgres is already proven that we can evolve

40:05.140 --> 40:06.140
and we can scale.

40:06.140 --> 40:09.140
There are so many aspects to the project

40:09.140 --> 40:11.140
and the governance and the people,

40:11.140 --> 40:13.140
and there's more people than there were

40:13.140 --> 40:15.140
in the very beginning.

40:15.140 --> 40:18.140
So I think I have a lot of confidence

40:19.140 --> 40:21.140
in our ability to evolve.

40:21.140 --> 40:26.140
But the key thing is that we have to keep evolving.

40:26.140 --> 40:29.140
There's a famous quote about sustainability

40:29.140 --> 40:31.140
and it's from this report called

40:31.140 --> 40:32.140
the Brentland report.

40:32.140 --> 40:33.140
Anybody familiar with it?

40:33.140 --> 40:35.140
On sustainability?

40:35.140 --> 40:37.140
Okay.

40:37.140 --> 40:40.140
I didn't know about it either.

40:40.140 --> 40:41.140
So there you go.

40:41.140 --> 40:44.140
But the quote is that you have to meet

40:44.140 --> 40:46.140
the needs of the present

40:46.140 --> 40:49.140
without compromising the ability of future generations

40:49.140 --> 40:51.140
to meet their own needs.

40:51.140 --> 40:53.140
And so Daniel Gustas and I,

40:53.140 --> 40:55.140
who's the Postgres Committee

40:55.140 --> 40:56.140
sitting in the third row right there,

40:56.140 --> 40:58.140
we're talking about this the other day

40:58.140 --> 41:00.140
and we both wanted to kind of flip it around.

41:00.140 --> 41:02.140
So, you know,

41:02.140 --> 41:04.140
our thinking was that we need to embrace

41:04.140 --> 41:07.140
the needs of future developers

41:07.140 --> 41:09.140
without compromising

41:09.140 --> 41:12.140
how the people who are today's maintainers

41:12.140 --> 41:14.140
today's contributors do their job.

41:15.140 --> 41:17.140
And so that's kind of the challenge.

41:17.140 --> 41:20.140
How do you balance those competing trade-offs?

41:20.140 --> 41:22.140
The fact that the future developers don't like

41:22.140 --> 41:25.140
mailing lists or are uncomfortable or intimidated by

41:25.140 --> 41:27.140
see with, you know,

41:27.140 --> 41:31.140
the way things are working quite well today

41:31.140 --> 41:33.140
and how do we find that balance?

41:33.140 --> 41:35.140
So my analogy for this was a bridge

41:35.140 --> 41:37.140
that has traffic going across,

41:37.140 --> 41:39.140
has to continue to have traffic going across

41:39.140 --> 41:42.140
because, you know, otherwise you can't cross that

41:42.140 --> 41:47.140
but there's obviously some constructions going on there too.

41:47.140 --> 41:51.140
And then, oh, I need to go over here.

41:51.140 --> 41:53.140
Is it going to work now?

41:53.140 --> 41:54.140
No.

41:54.140 --> 41:57.140
Okay, that's what I got there.

41:57.140 --> 42:00.140
I would love to see us find a way,

42:00.140 --> 42:02.140
find ways to run experiments,

42:02.140 --> 42:05.140
try things to improve our patch review through

42:05.140 --> 42:08.140
but because if we can improve that,

42:08.140 --> 42:11.140
then we're not discouraging as many people

42:11.140 --> 42:13.140
in that next generation.

42:13.140 --> 42:18.140
And hopefully getting them more engaged versus less engaged

42:18.140 --> 42:21.140
and hopefully then we can also avoid burnout amongst

42:21.140 --> 42:22.140
our own people.

42:22.140 --> 42:26.140
So this is my dream that we keep experimenting

42:26.140 --> 42:28.140
and find a way to address this puppy.

42:28.140 --> 42:31.140
So that's the TLDR right there

42:31.140 --> 42:33.140
in terms of the three things

42:33.140 --> 42:37.140
that I wanted to bring up at the end.

42:37.140 --> 42:39.140
Now, for any of you in the audience

42:39.140 --> 42:41.140
who may be, you know,

42:41.140 --> 42:43.140
have a baby at home who sleeps a lot

42:43.140 --> 42:45.140
and are looking for a new project,

42:45.140 --> 42:47.140
the way that Hakey Lida Kangas was

42:47.140 --> 42:51.140
or who were just interested in doing something new

42:51.140 --> 42:53.140
with databases in the open source space

42:53.140 --> 42:55.140
and if I haven't scared you away

42:55.140 --> 42:59.140
with all of this discussion about areas that we're struggling,

42:59.140 --> 43:02.140
these are the kind of things that it

43:02.140 --> 43:05.140
I believe takes to become a postgres hacker.

43:05.140 --> 43:07.140
This is my perspective

43:07.140 --> 43:09.140
but also based on conversations

43:09.140 --> 43:11.140
with lots of current postgres hackers.

43:11.140 --> 43:13.140
And obviously it takes programming skills.

43:13.140 --> 43:15.140
Obviously it takes knowledge

43:15.140 --> 43:17.140
that you build over time

43:17.140 --> 43:19.140
of the different subsystems in the database.

43:19.140 --> 43:22.140
Communication is super important.

43:22.140 --> 43:24.140
Especially on a global project

43:24.140 --> 43:26.140
where people, you know,

43:26.140 --> 43:28.140
English is the second or third language

43:28.140 --> 43:30.140
for some of the contributors.

43:30.140 --> 43:32.140
You've got to be a good communicator

43:32.140 --> 43:35.140
and particularly a written communicator as well.

43:35.140 --> 43:38.140
You've got to build that track record of delivery

43:38.140 --> 43:40.140
and good decision-making.

43:40.140 --> 43:42.140
If something goes wrong,

43:42.140 --> 43:44.140
you've got to be there to follow through

43:44.140 --> 43:46.140
and fix it, not like off sailing

43:46.140 --> 43:49.140
in the Greek Islands or something like that.

43:49.140 --> 43:52.140
And one of the things Tom Lane talked about

43:52.140 --> 43:55.140
in the podcast discussion that I did with him

43:55.140 --> 43:58.140
on Talking Postgres is he talked about that kind of thick skin

43:58.140 --> 44:01.140
you need to have to work in public

44:01.140 --> 44:03.140
which is probably familiar to many of you

44:03.140 --> 44:06.140
because you're here at an open source conference.

44:06.140 --> 44:09.140
And this is common across all open source projects.

44:09.140 --> 44:12.140
But when you fail in open source,

44:12.140 --> 44:14.140
you can't hide from it.

44:14.140 --> 44:16.140
You can't shirk from it.

44:16.140 --> 44:17.140
It's there.

44:17.140 --> 44:18.140
It's in the source tree.

44:18.140 --> 44:19.140
People can all see it.

44:19.140 --> 44:20.140
It's obvious.

44:20.140 --> 44:22.140
So you need to have that skill

44:22.140 --> 44:24.140
of being able to work in public.

44:24.140 --> 44:27.140
And then the part that people don't always get

44:27.140 --> 44:30.140
and I put that in the collaboration skills bucket

44:30.140 --> 44:31.140
is just that.

44:31.140 --> 44:34.140
You have to also care about how other people perceive you.

44:34.140 --> 44:37.140
And do they think you listen?

44:37.140 --> 44:40.140
And do they think you would be willing to reconsider

44:40.140 --> 44:44.140
if you made a mistake or might have made a mistake?

44:44.140 --> 44:46.140
And do they trust you?

44:46.140 --> 44:49.140
So it's really that self-awareness

44:49.140 --> 44:51.140
that is important to you.

44:51.140 --> 44:52.140
All right.

44:52.140 --> 44:54.140
So if any of you want to become a Postgres hacker

44:54.140 --> 44:57.140
and you have some of these skills

44:57.140 --> 45:00.140
because we can always build new skills, right?

45:00.140 --> 45:02.140
The whole growth mindset thing.

45:02.140 --> 45:04.140
Then you should check out the project.

45:04.140 --> 45:06.140
And the last thing I want to mention,

45:06.140 --> 45:09.140
and this is just because I have you as a captive audience,

45:09.140 --> 45:12.140
how many of you have heard of a Postgres

45:12.140 --> 45:14.140
virtual conference called Pozette

45:14.140 --> 45:16.140
and event for Postgres?

45:16.140 --> 45:17.140
Okay.

45:17.140 --> 45:19.140
So just a small number of hands.

45:19.140 --> 45:20.140
All right.

45:20.140 --> 45:21.140
Well, let me tell you this.

45:21.140 --> 45:23.140
First of all, the name Pozette

45:23.140 --> 45:25.140
was actually inspired by the name Faustum.

45:25.140 --> 45:28.140
Because, okay, how many of you know

45:28.140 --> 45:31.140
what all the letters in Faustum stand for?

45:31.140 --> 45:32.140
Raise your hand.

45:32.140 --> 45:33.140
See?

45:33.140 --> 45:34.140
Not that many.

45:34.140 --> 45:37.140
I mean quite a few, but not even half the room.

45:37.140 --> 45:40.140
So that was kind of where the name Pozette came from.

45:40.140 --> 45:42.140
I was like, you know, let's come up with an acronym

45:42.140 --> 45:43.140
that has some meaning,

45:43.140 --> 45:45.140
but people don't need to know it.

45:45.140 --> 45:46.140
So it's a virtual event.

45:46.140 --> 45:47.140
My team runs it.

45:47.140 --> 45:49.140
It happens once a year.

45:49.140 --> 45:52.140
And the CFP, the call for talk proposals,

45:52.140 --> 45:56.140
actually closes tonight at 1159 PNPST.

45:56.140 --> 45:59.140
So I just thought I would mention that in case any of you

45:59.140 --> 46:03.140
who have used Postgres and have learnings to share

46:03.140 --> 46:07.140
customer stories, user stories about Postgres.

46:07.140 --> 46:10.140
Maybe you want to try your hand at giving a virtual talk.

46:10.140 --> 46:13.140
So that's my personal plug.

46:13.140 --> 46:16.140
And I also want to say thank you to all these people

46:16.140 --> 46:18.140
who helped me put this talk together,

46:18.140 --> 46:21.140
including all the folks that the developer meeting a couple days ago

46:21.140 --> 46:24.140
here in Brussels who advised on it.

46:25.140 --> 46:27.140
So with that, if there are any questions,

46:27.140 --> 46:28.140
I think we have like two minutes.

