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.