WEBVTT

00:00.000 --> 00:09.640
Cool, I like to do people putting their hands in the air in the talks because it stops

00:09.640 --> 00:15.520
you from falling asleep and it makes me more visibly aware that people are actually listening

00:15.520 --> 00:16.520
to what I'm saying.

00:16.520 --> 00:22.160
So put your hand in the air if you've ever used homebrew, okay, reasonable number of people,

00:22.160 --> 00:27.040
put your hand in the air if you ever contributed to homebrew, put your hand in the

00:27.040 --> 00:36.040
air if you ever tried to contribute to homebrew and I closed your PR, okay, sorry, yeah,

00:36.040 --> 00:42.120
so I'm, we've been, I've not been able to hear what we've talked today, I do follow

00:42.120 --> 00:47.040
try as much as I can, closely, what's going on in Package Management World, shout out

00:47.040 --> 00:51.680
to Andrew's written a lot of very good, comparative blog posts on this stuff this year that

00:51.680 --> 00:52.680
I've enjoyed.

00:52.680 --> 00:55.680
So I'm going to try and talk about today, it's like a bit more high level than I might say

00:55.680 --> 01:00.080
with homebrew stuff about, okay, what we've been doing in homebrew now and why and what

01:00.080 --> 01:03.040
can we maybe learn about it in other Package Management.

01:03.040 --> 01:04.040
So who am I?

01:04.040 --> 01:09.640
Hello, I'm Mike McLeod, if you want to know about me now, my website is the best place, it's

01:09.640 --> 01:13.080
all connected to social media and stuff, I don't read anything on social media anymore,

01:13.080 --> 01:16.720
so email me if you want me to actually see it or personal social media if you want to

01:16.720 --> 01:20.040
talk shit about me behind my back and feel great about it.

01:20.040 --> 01:24.160
My background, I guess, like how I've gone to homebrew and stuff, so I've worked

01:24.160 --> 01:29.720
myself where for almost 20 years, I've been working on homebrew for 17 years this year,

01:29.720 --> 01:35.360
I'm the project leader, which is an elected sort of dictatorship, sort of position thing.

01:35.360 --> 01:40.560
I'm a CTPO in my normal life day job, whatever and that sort of vaguely overlaps with

01:40.560 --> 01:42.920
the homebrew, but not very directly.

01:42.920 --> 01:49.760
So why should anyone care about homebrew, Package Manager is why I have to say, I mean, who

01:49.800 --> 01:54.640
can hear cares about Package Manager is, okay, good, I'm glad that someone does other than

01:54.640 --> 02:01.880
Andrew, because otherwise you'll probably cry, but I guess, in my life, the thing that's

02:01.880 --> 02:06.600
great and terrible that homebrew is that it's somewhat taken for granted, like a lot

02:06.600 --> 02:11.680
of Package Manager is just part of the infrastructure of how the internet works, how

02:11.680 --> 02:13.640
I do my job, whatever, right?

02:13.640 --> 02:18.720
So if you go and run, who's run Brewing Stole in the last week, say, okay, right?

02:18.720 --> 02:22.080
Like, you probably didn't really think very much about it, right?

02:22.080 --> 02:25.480
Because you probably just run something and then hopefully it worked.

02:25.480 --> 02:29.760
But then when it doesn't work, then everyone gets upset.

02:29.760 --> 02:34.840
Like most of the time, it only specific things are broken in specific ways for specific

02:34.840 --> 02:40.960
people, but then when it's all broken for everyone, then everyone gets very concerned.

02:40.960 --> 02:47.360
And the emotional reaction that people tend to have to when these tools break is heavy,

02:47.400 --> 02:52.680
because they're so reliant on these tools, like it's really important that it works.

02:52.680 --> 02:58.680
And in some ways, if I can be a little bit philosophical, it scares people a little bit when

02:58.680 --> 03:05.040
they are forced to actually think how many bits of the internet and tools that they rely

03:05.040 --> 03:09.920
on by all these people at all these places all around the world, that they are completely

03:09.920 --> 03:14.240
unable to do their job, unless all of these things connect together.

03:14.240 --> 03:18.560
And often, the people who are the most involved with open source are the people who are

03:18.560 --> 03:23.600
the most forgiving when hungry breaks and the people who are the most disconnected

03:23.600 --> 03:27.720
from open source are the people who are the most angry and sometimes abusive when

03:27.720 --> 03:29.720
hungry breaks.

03:29.720 --> 03:35.680
It's a bit like your toilet, really, because what it's working, you probably don't spend

03:35.680 --> 03:39.120
a lot of time deeply thinking about your toilet unless, like me, you've recently been

03:39.120 --> 03:42.680
in Japan and you're like, wow, they're toilets are so much better here, why is my

03:42.680 --> 03:44.320
toilet like that?

03:44.320 --> 03:50.080
But then, when you toilet breaks, then we just get shit everywhere, like there's chaos,

03:50.080 --> 03:53.760
no one knows what they're doing, no one knows how to fix it, no one really wants to stick

03:53.760 --> 04:00.480
their hands in there, our friends at the beginning of the toilet, we may be at the end.

04:00.480 --> 04:05.360
So most people get very frustrated when they're too slow, another one, bundler is slow,

04:05.360 --> 04:09.360
like everyone often complained about that for a good many years, right?

04:09.360 --> 04:12.640
And then, what gets done, people gets frustrated.

04:12.640 --> 04:17.880
So in, I feel like in many ecosystems, people get the same feedback about things being

04:17.880 --> 04:22.160
or feeling slow, they maybe don't even know why, but then sometimes the reason why it feels

04:22.160 --> 04:24.640
slow is because we get new tools.

04:24.640 --> 04:29.960
So cargo is often held up as an example of a package manager that feels fast, right?

04:29.960 --> 04:35.240
And I've not done huge amounts of rest up, so I'm not super familiar, but it's, you

04:35.240 --> 04:39.320
know, that reputation for speed is something that's appreciated in the community, it's

04:39.320 --> 04:44.480
sort of found the community's expectations of what these two should be like, how they

04:44.480 --> 04:49.040
should behave, how fast they should feel, how responsive they are, in some ways it kind

04:49.040 --> 04:52.640
of helps to buy into like, what does that language community care about?

04:52.640 --> 04:57.760
Like, the, the Rust community seems to care deeply about building lots of tools that are

04:57.760 --> 05:02.480
responsive and fast, well, paralyzed and all these type of things, you know, a lot of the tools

05:02.480 --> 05:06.800
that, like, one of my favorite tools that's embedded just about everywhere now is like

05:06.800 --> 05:12.320
RIP grip, which, if you were like, how many people went down the path of like, oh,

05:12.320 --> 05:16.880
act, and then the silver structure and finding the perfect tool to search through your code

05:16.880 --> 05:21.600
base increasingly quickly, like, yeah, so if you went down that line, then you learn

05:21.600 --> 05:26.000
a few years ago, like a lot of these two will start to be built in Rust, and they're

05:26.000 --> 05:29.960
just became this little niche of people in the Rust ecosystem who really cared deeply

05:29.960 --> 05:34.560
about just being like, I'm going to make the fastest version of X, or I'm going to make a really

05:34.560 --> 05:38.240
parallelized version of some existing Unix tool that hasn't really been updated in 20

05:38.240 --> 05:39.240
or 30 years.

05:39.240 --> 05:40.240
Right?

05:40.240 --> 05:41.240
UV.

05:41.240 --> 05:42.240
Obviously, that's not an example now, right?

05:42.240 --> 05:48.080
Well, that in the Python ecosystem is kind of reshaped expectations of what speed we

05:48.080 --> 05:51.960
should be expecting from these tools, like, what we can do, and I think UV's an interesting

05:51.960 --> 05:57.760
example, because, again, I'm not super-officer, so excuse me if I miss speaks slightly

05:57.760 --> 06:02.120
on this, but my understanding is some of the reasons why they've been able to be faster

06:02.160 --> 06:06.320
is because they've kind of dropped some support for legacy things, which tools like

06:06.320 --> 06:08.920
people, whatever, might still have to rely on, right?

06:08.920 --> 06:13.040
And, again, like, this is where things get a little bit more tricky, and a bit more

06:13.040 --> 06:18.680
murky for us as, like, package manager, like, developers, it's like, okay, so what, to

06:18.680 --> 06:23.320
what extent do we prioritize speed, or backwards compatibility, or following the

06:23.320 --> 06:27.120
reason why the tools, or maybe we have multiple tools in the same ecosystem, who can

06:27.120 --> 06:28.920
say it, right?

06:28.920 --> 06:29.920
So, bundler, right?

06:29.920 --> 06:34.440
Like, I feel like bundler was a tool that 10 years ago, I heard people complaining about

06:34.440 --> 06:37.960
how slow it was all the time, and then a lot of work went into it, and then now it's

06:37.960 --> 06:42.240
a tool where, you know, it's not the fastest thing in the world, but it's still, like, it

06:42.240 --> 06:48.000
does not seem to get that complete, levied against it, nearly as often as it once did, right?

06:48.000 --> 06:51.880
And I think bundler is a nice example, because they didn't, throughout everything that

06:51.880 --> 06:56.720
they were doing, a lot of just time and effort went into it, behind the scenes, that

06:56.720 --> 07:01.040
meant that the tool ended up just being fast, you can add a few more things, then you

07:01.040 --> 07:04.480
have time send it don't work, then 5% don't work, and if you want to get 100% of the

07:04.480 --> 07:08.720
batches working, 100% of all the time, you essentially have to re-imple that most of

07:08.720 --> 07:12.400
a brew, and that's probably going to be a bit slower than you have right now, right?

07:12.400 --> 07:19.520
So, I ask is all to be collectively both inspired, but cautiously skeptical of some of

07:19.520 --> 07:23.080
these tools that appear out of nowhere, and say, hey, we've been able to do this 10

07:23.080 --> 07:26.840
x-fost and everyone else, because there's some stuff you can learn from that for sure,

07:26.840 --> 07:33.800
like, we have learned from that in Hobroo, but there's also, it's very easy to make a prototype

07:33.800 --> 07:38.120
version of this, which never quite gets around to, if they're writing into something that

07:38.120 --> 07:40.360
works reliably, I can be used at scale.

07:40.360 --> 07:41.360
Thank you.

07:41.360 --> 07:47.360
Why do people do that, not?

07:47.360 --> 07:50.560
In some ways, this reminds me, like, I don't know, how many people will ever sort of like

07:50.560 --> 07:55.080
the legendary Stack Overflow answer that descends into madness about parsing HTML with

07:55.080 --> 07:56.080
rejects?

07:56.080 --> 07:57.080
Yeah.

07:57.080 --> 08:01.760
It reminds me a bit of this, because it's like, you can parse HTML in a simple way

08:01.760 --> 08:05.760
with rejects really quickly and easily, and it's like, look how low code this took,

08:05.760 --> 08:09.960
and it was really quick and efficient, and, like, I'm 90% of the way to solving this problem,

08:09.960 --> 08:13.240
and then I just need to put a bit more time, oh, I'm almost there, I'm almost there,

08:13.240 --> 08:17.680
but then if you know, essentially enough about the problem stays, you know that, like,

08:17.680 --> 08:22.160
fundamentally, you are trying to do something that is, with most of Ajax parses, I know

08:22.160 --> 08:26.480
this pearl does some special things, it's fundamentally impossible, right?

08:26.480 --> 08:31.160
And it's a similar sort of vein here, right, where what they are trying to do is

08:31.160 --> 08:36.080
amrable, but they have taken a shortcut to do so that makes the end result essentially

08:36.080 --> 08:38.440
fundamentally impossible.

08:38.440 --> 08:42.880
So back to home, like, so the, the big thing we did recently in the last year, essentially

08:42.880 --> 08:47.240
was, if you've used home, where you've seen, we do this kind of concurrent downloading

08:47.240 --> 08:48.240
stuff, right?

08:48.240 --> 08:52.320
So, in fact, the person who didn't much of the work, Marcus, is in the room with us right

08:52.320 --> 08:53.320
now.

08:53.320 --> 08:57.480
That's off to Marcus.

08:57.480 --> 09:00.880
And we also have done some work on, like, a slimmer, like, internal API, and stuff

09:00.880 --> 09:06.480
like that, to try and focus on this stuff with speed, when I, as Ruby 4.0.1, like, the

09:06.480 --> 09:10.680
time it takes to out-pahello-wall to a terminal is dramatically slower than the time things

09:10.680 --> 09:12.080
back to do the same thing.

09:12.080 --> 09:17.800
And, okay, most people, like, someone literally with the home-ruh performance stuff, I

09:17.800 --> 09:18.800
personally want social media.

09:18.800 --> 09:23.600
Someone replied saying, in what world this home-ruh performance actually matter to end

09:23.600 --> 09:24.600
users anyway.

09:24.600 --> 09:28.720
Like, yes, this is a good point, but we still get people whining when, like, their shell

09:28.720 --> 09:34.000
initialization takes 0.1 seconds longer than it should have done or whatever, right?

09:34.000 --> 09:38.320
And then, pointing stuff to bash, make things, you know, in our case, sometimes 100 times

09:38.320 --> 09:41.600
faster than just by the time you spin up the Ruby interpreter, right?

09:41.600 --> 09:45.960
So, again, like, it's a weird thing, and it's very project-specific, and it's not

09:45.960 --> 09:46.960
general advice.

09:46.960 --> 09:52.560
But, again, for all of you working-package managers, probably your three items are completely

09:52.560 --> 09:56.760
different, and some naive person from the outside looking in will probably have ideas

09:56.760 --> 09:58.480
of why you're slowing what needs to be fixed.

09:58.480 --> 10:01.840
But you will know what these things are, and you need to make sure you put these things

10:01.840 --> 10:05.560
in front of your team, and in front of contributors you might want to come in, so that

10:05.560 --> 10:09.080
they actually know how they can improve the stuff in a meaningful fashion.

10:09.080 --> 10:14.000
So, as a result of that, like, I think Humbru, with the five point overlice, like, people

10:14.000 --> 10:15.880
are complaining about it less.

10:15.880 --> 10:19.920
I think we've done a bit of a bundle of things, where Humbru's definitely not fast compared

10:19.920 --> 10:23.880
to his competitors, but it certainly feels a bit faster than it was before, and I think

10:23.880 --> 10:29.720
we have now room for understanding and improvement of how we can move forwards.

10:29.960 --> 10:36.160
So, act 2 is, let's think about, like, what we're doing in package manager land, okay,

10:36.160 --> 10:39.120
we talked about, like, user expectations and performance and things like that.

10:39.120 --> 10:47.120
But, I think another big part of software in general, right, like, I've taken over as, like,

10:47.120 --> 10:51.200
a CTO of relatively recently, and one of my big things is, like, how can I make things

10:51.200 --> 10:52.520
go faster?

10:52.520 --> 10:56.640
And one way of making things go faster is performance and profile, like an optimization,

10:56.720 --> 10:58.440
and let's, like, do that.

10:58.440 --> 11:03.440
Another way of making things go faster is thinking about what are we doing today, and what

11:03.440 --> 11:07.000
are the things we can stop doing, and if you can just do fewer things that you get this

11:07.000 --> 11:10.760
combinatorial explosion of, once you have these different options in ways of building

11:10.760 --> 11:15.720
packages and their dependency trees and everything like that, such that it became almost

11:15.720 --> 11:19.400
impossible to debug these issues in a meaningful way and support them and stuff like that.

11:19.400 --> 11:23.360
Because, again, we have limited CIO infrastructure, so we're not able to just go and

11:23.360 --> 11:26.320
say, okay, well, we're going to build everything in every combination every time for

11:26.320 --> 11:29.200
every dependency and figure out if that works.

11:29.200 --> 11:34.000
So, instead, we moved essentially to a model of, like, our binary packages, where instead

11:34.000 --> 11:38.040
of going from room to composite, much of your machine, it's, when we get to a table, there's

11:38.040 --> 11:40.400
or we've been about somewhere else and extracts that, right?

11:40.400 --> 11:44.720
So, that was dramatically faster for users, which dramatically less error for users,

11:44.720 --> 11:48.480
but for power users, that results in an all-spacey being like, hey, there's a bunch of stuff

11:48.480 --> 11:53.560
that you could do with homeboom before that you now can't really do, or at least, to be

11:53.560 --> 11:54.800
more exact.

11:54.800 --> 11:57.960
If you want to do this, you need to go over there and do the work yourselves, because we're

11:57.960 --> 12:01.520
not going to do that work for you, which, as far as a lot of room to do, source users

12:01.520 --> 12:07.000
have concerned, is the same as saying, this is now fundamentally impossible.

12:07.000 --> 12:11.960
But the tricky thing with this is now we're in the situation where, because no, everything's

12:11.960 --> 12:15.440
being built on individual user machines, we need to figure out, like, well, what we're

12:15.440 --> 12:18.520
going to support and what we're going to build and all that type of stuff.

12:18.520 --> 12:22.680
So, it's so, no, we're just like, okay, we build one package and one platform, we pick

12:22.680 --> 12:29.920
a macOS version, we build on X8664, great, then eventually we add the Linux support, then

12:29.920 --> 12:33.760
Apple came along with Apple Silicon, and then we have to do, well, I'm 64 support, and

12:33.760 --> 12:37.560
then we decided, because we hate ourselves, we're going to do, oh, I'm 64 support and Linux

12:37.560 --> 12:41.760
as well, and then I'm sure at some point there will be something else, right?

12:41.760 --> 12:47.920
So, like, yeah, we're at risk, we'll come, I'm sure, you can run homeboom in your

12:47.920 --> 12:49.880
poster, whatever, right?

12:49.880 --> 12:55.560
So, if hands up, any folks in here who support, like software on multiple platforms, or more

12:55.560 --> 13:00.160
platforms than they did 10 years ago, it's a bit of a pain in the ass, right, about what

13:00.160 --> 13:05.160
works for 90% of people, most of the time, right, and then that was their primary focus,

13:05.160 --> 13:06.160
right?

13:06.160 --> 13:08.400
So, in homeboom, we've tried to do the same thing, right?

13:08.400 --> 13:13.000
We tried to focus on, like, what the most of our users actually do, and what that looks

13:13.000 --> 13:17.320
like is getting to a point where you realize, well, we're supporting a bit too much, right?

13:17.320 --> 13:22.120
So, we used to support, in theory, at least, every macOS version, and then a few years

13:22.120 --> 13:25.080
ago, we decided we're going to support three, we're going to support the current one,

13:25.080 --> 13:26.760
and the two preceding ones, right?

13:26.760 --> 13:30.960
This makes people upset sometimes, because they're still using their old Mac, and they

13:30.960 --> 13:34.720
feel like apples abandon them, and now we abandon them, and this is really unfair.

13:34.720 --> 13:38.360
But then even then, even with these three versions, without looks like it's, okay, well,

13:38.360 --> 13:40.080
does that mean we have to support all this?

13:40.080 --> 13:45.640
Or actually all of this, which just gets into madness, right, because every, like, line

13:45.680 --> 13:51.680
here, if you're going to support that, like, we're saying, we expect all of 10,000 packages

13:51.680 --> 13:55.360
that we claim that work on these, we're going to work on these all the time, and then when

13:55.360 --> 13:58.600
it doesn't, it's a bug, we're going to fix it, and it's going to break whatever, and then

13:58.600 --> 14:01.600
this comes back to the, like, well, homeboom is slow, right?

14:01.600 --> 14:05.400
And maybe this isn't slower in terms of the behavior, but homeboom is slower to fix bugs,

14:05.400 --> 14:09.880
there's slower to larger PRs, because we have this matrix of issues that we have to deal

14:09.880 --> 14:12.000
with all of the time, right?

14:12.680 --> 14:14.920
Well, that means is you end up having this limit done, right?

14:14.920 --> 14:17.200
So we say, okay, well, we're not going to support everything all the time.

14:17.200 --> 14:21.440
So we now don't build binary packages for the newest versions of macOS, because we're, like,

14:21.440 --> 14:24.760
well, hey, we don't need to necessarily hyper optimize for that.

14:24.760 --> 14:30.000
Be, we probably get reasonable matrix coverage from the otherwise, and see, like, Apple

14:30.000 --> 14:30.800
is dropping this, right?

14:30.800 --> 14:36.800
So on the 9th September, so on September, 2026, we're going to stop building binary

14:36.800 --> 14:41.560
packages for Intel all together, right, on macOS, still on Linux, because that's the

14:41.560 --> 14:43.440
majority architecture there.

14:43.440 --> 14:45.280
But it's like, well, why are we doing this?

14:45.280 --> 14:47.640
Could we indefinitely build this?

14:47.640 --> 14:50.840
Sure we could, but it's going to make the project slower, and we're at a point where

14:50.840 --> 14:54.880
Apple will have announced their plans to get off this.

14:54.880 --> 15:00.680
So again, multi-billion-dollar corporation, 30 volunteers, right, who receive a small

15:00.680 --> 15:06.000
slide-pend, like, we should not be holding ourselves so higher standard than multi-billion-dollar

15:06.000 --> 15:07.000
corporations, right?

15:07.000 --> 15:10.320
On this, we have to fight harder and harder against that in order to have something that

15:10.320 --> 15:11.320
works for our users.

15:11.320 --> 15:13.880
And eventually we get to a point where we're like, well, this is a security feature

15:13.880 --> 15:14.880
anyway.

15:14.880 --> 15:18.040
No, no, we're not interested in doing this anymore, right?

15:18.040 --> 15:21.520
So we used to just go, okay, we have these features that we turn them off, and then now

15:21.520 --> 15:26.280
we have, like, with a major or minor release, we dedicate, then we disable, then we delete

15:26.280 --> 15:27.280
that code, right?

15:27.280 --> 15:30.800
And again, that, if you don't already do something like this in your project, and you

15:30.800 --> 15:35.400
have, like, a clear cadence, please, it's so satisfying, going, and having a little

15:35.400 --> 15:38.920
bit of that code that goes to your pain in the ass, and knowing, putting little markers

15:38.920 --> 15:43.560
and then being like, in six months, I can just delete all of this mess and not have to

15:43.560 --> 15:44.960
think about this ever again.

15:44.960 --> 15:51.360
Okay, yes, it breaks backwards compatibility, but then, if only we, like, one day, I think

15:51.360 --> 15:56.080
someone will invent something, let's hypothetically call it a version control system, where

15:56.080 --> 16:00.560
if they wanted an old version of some code, they could, in fact, go back in time.

16:01.440 --> 16:06.680
It's a crazy idea, but I think, one day, it might pay off, but, you know, people, again,

16:06.680 --> 16:10.040
it's this thing, it's entitlement, we don't have to deal with that, and we shouldn't

16:10.040 --> 16:11.600
have to deal with that, right?

16:11.600 --> 16:14.360
Rust isn't a nice good example of this, right?

16:14.360 --> 16:18.440
Where they just stay, okay, here's our platform support, here's what we have, we have Tier

16:18.440 --> 16:24.000
1, Tier 1 targets, can be thought of as guarantee to work, and in the spirit of open source,

16:24.000 --> 16:27.440
we almost directly stole this, and we now have our own support, here's our group, where

16:27.520 --> 16:32.600
we say, here, we have our Tier 1 platforms, these are what we expect to work, Tier 2 is

16:32.600 --> 16:37.600
like, maybe this is going to work, Tier 3, it's probably going to be broken, and then,

16:37.600 --> 16:42.880
it's two hundred-sucking, we want you to know, like, hey, we told you to do it this

16:42.880 --> 16:50.040
way, you were doing it a different way, someone said, you are sucking, for those

16:50.040 --> 16:55.680
of the back, I will neither confirm or deny that, but yeah, but it's important, right?

16:55.680 --> 17:01.200
If you can just write this stuff down, you will find people are more likely to accept

17:01.200 --> 17:05.000
a thing which you put in a document or a section on your website, even if you repeat yourself

17:05.000 --> 17:09.960
verbatim in issue clients all day long, they will argue with you until the sun goes home,

17:09.960 --> 17:13.600
but if you say, here's our support document, you can submit a PR with a proposal of why

17:13.600 --> 17:17.200
this should be changed, they will never do that, and they will stop arguing with you.

17:17.200 --> 17:25.640
So, there we go, really, we're going to answer the, I, I thought I had to

17:25.720 --> 17:30.640
slamer here, but I think it's maybe gone, but, no, if I, no, it's coming, right, let's skip

17:30.640 --> 17:38.560
over that for a second, right? So, act 3, sustainability stuff, right? So, what do we think

17:38.560 --> 17:44.800
is the most important thing in open source sustainability, right? Money, put your hands

17:44.800 --> 17:52.320
up if you think it's money, the hacklers are the fun of ruining this delightful cell, I

17:52.400 --> 17:56.600
run a thing to hacklers and the fun, have given them a lot of money to do that.

17:56.600 --> 18:04.640
But we live without any money for many years and I work fine, code, like, let's just

18:04.640 --> 18:08.640
fix all, but we can fix human problems with code, right? We just need to write enough,

18:08.640 --> 18:15.480
no, no, no, okay, yeah, okay, yeah, yeah, we don't like, yeah, humans, okay, the humans

18:15.480 --> 18:20.480
we are what matter, right? Like, if you were a maintainer or an open source project,

18:20.480 --> 18:23.600
no matter how much money you have, no matter how much code you have, no matter how many

18:23.600 --> 18:27.480
users you have, if you decide and you're the so maintainer, you're not going to work

18:27.480 --> 18:32.080
in this anymore, this project is effectively dead, right? Someone can fork and they can

18:32.080 --> 18:36.640
take it on and lead from where you left off, sometimes people do that, a lot of the time

18:36.640 --> 18:41.360
they do not, right? So, what this means is we need to take care of the humans, right?

18:41.360 --> 18:45.360
If you're in a project where you've got multiple maintainers, take care of each other,

18:45.360 --> 18:49.600
if it's just you take care of yourself. I apologize in advance, there's a lot of cell

18:49.600 --> 18:53.360
promotion coming because I've written a bunch about this stuff, it's a double-eye care

18:53.360 --> 18:57.600
and awful lot about, and I'm not going to reiterate all my blog posts, but I am just going

18:57.600 --> 19:01.600
to put them on the screen, so you can go and look them up if you're really that bored.

19:01.600 --> 19:07.600
Right, so the first one, I wrote this thing a while ago, I wrote it before AI stuff,

19:07.600 --> 19:12.400
robot-pedantry human empathy, so this idea of like what we should try and do in our projects

19:12.400 --> 19:17.440
is automate as much as we possibly can, but also not automate the stuff that humans are

19:17.440 --> 19:20.880
actually good at. Like, I remember I wrote this colleague in response to seeing projects

19:20.880 --> 19:26.240
that were like automating their messages of being like, you have made a new PR, good job,

19:26.240 --> 19:32.160
you are valued as a human, and it's like, well, that doesn't really mean a lot to people.

19:38.720 --> 19:46.000
What? Let's have the robots do as much as we can, get them to do, again, pre-AI.

19:46.000 --> 19:50.320
This is mainly talking about CI when I'm talking about this, I love an AI, I'm not going to get it to AI today.

19:51.200 --> 19:57.040
And that's, as humans, right, we can tell people like, good job, thank you, you've kicked us,

19:57.040 --> 20:00.400
I'm looking forward to seeing another PR for me, because you did such a good job in this stuff.

20:00.400 --> 20:05.360
That really makes a difference. There are people who contribute to open source for a long time,

20:05.360 --> 20:09.840
just because of nice things one or two people did. Right, all right, there's a guy here at this

20:09.840 --> 20:14.960
conference, most years, Cornelius Schumacher, he was my mentor on Google Summer of Code 2006,

20:15.040 --> 20:18.800
when I worked on Katie, I can say there's absolutely no way I would have done any work on her

20:18.800 --> 20:23.200
brew, where it not for him being a really good, you know, Summer of Code Mentor, right, there's so many

20:23.200 --> 20:27.440
people throughout this entire conference, it's entire industry, that's stories like that, where this

20:27.440 --> 20:31.920
one person made a difference, I'm probably not sure exactly, right, that person could be you,

20:31.920 --> 20:37.600
by just being nice, saying nice things, encouraging people, right, and I know we have to deal with a lot of

20:37.600 --> 20:43.600
toxicity, and it's hard, you can get a thick skin, I have a very thick skin, but trying to free

20:43.680 --> 20:47.200
yourself out for those moments, where you can connect with someone else, can be like,

20:47.200 --> 20:52.800
good job, well done, it makes a big difference, right, next thing, contribute to funnel, right,

20:53.920 --> 20:59.600
very brief TLDR of this, think about you have a nice funnel on your project, right, a bit like

20:59.600 --> 21:03.440
a sales funnel, any of you know what that is, but basically this idea of like the people who use

21:03.440 --> 21:08.080
your project, some small proportion of them will end up contributing to your project,

21:08.080 --> 21:11.440
and then some small proportion of them will contribute enough that you want to make them

21:11.520 --> 21:17.520
containers, right, but like, if you can get that funnel to be as effective as transitioning

21:17.520 --> 21:20.560
between each stage, that's going to be really good. So one of the things, when we're really

21:20.560 --> 21:25.280
early on, there's so many expectations that like, this is not a project run by us for you,

21:25.280 --> 21:30.480
this is a project run by all of us together, right, whom we had no way of doing automatic version

21:30.480 --> 21:34.640
bumps or anything like that, but it first created max, the greater it was just like, right,

21:34.640 --> 21:38.320
I'm not going to point maintainers for every package, I'm just going to say, if you notice this

21:38.400 --> 21:42.080
is outdated, submit a poor first to fix it, right, that did a really good job of getting a

21:42.080 --> 21:46.560
whole brew, a really, really decent number of contributors for the number of users we had,

21:46.560 --> 21:50.880
and we have a tiny number of maintainers relatively, we have like 30, so that's way better than it

21:50.880 --> 21:57.520
was like 10 years ago. Over to our economics, again, just restaying the stuff about like money,

21:57.520 --> 22:04.000
right, like money is not really what matters, like money helps with some problems, if you want to

22:04.000 --> 22:07.760
come to my Ruby James talk later today, you'll hear me talk about how money creates some other

22:07.760 --> 22:17.680
problems. But what we want to use is the money to help humans, right, so we can help the humans

22:17.680 --> 22:22.800
do the right things, because ultimately I think the scarce resource in open source is maintainer,

22:22.800 --> 22:27.520
not even maintainer time, maintainer motivation, right, and if you have a project where the

22:27.520 --> 22:32.240
environment and the users and the support structure and whatever makes you go, this fucking sucks,

22:32.240 --> 22:39.840
I don't want to do this anymore, then that project will die very soon. Cool, so how do you do that?

22:39.840 --> 22:46.240
Say no to things, say no to most things, most of the time, right, like chances are, unless you hear

22:46.240 --> 22:50.320
a feature request a bunch of times or you strongly disagree, you can say no, that's fine,

22:50.320 --> 22:55.680
you're allowed to do that, because ultimately you owe no one anything, read the licenses of

22:55.680 --> 23:00.640
yourself where it says pretty much, and I'm not a lawyer, so please don't do this. If I fuck

23:00.640 --> 23:04.480
up your shit on purpose, you still can't sue me, because you agreed to the license.

23:05.200 --> 23:10.640
Again, I'm not a lawyer to not do this. So what do we talk about today?

23:11.760 --> 23:15.760
Default to fast, right, like, performance, people care about it,

23:15.760 --> 23:18.960
particularly when other tools have lost in the yours, it's not about idea to think about

23:18.960 --> 23:23.360
performance, even if you're just thinking about performance from the scope of what you do with

23:23.360 --> 23:27.520
the support, right, having a support reality that you can publish and you can use that to

23:27.600 --> 23:31.440
set expectations, and then finally, optimize for the maintainers, because they are the people who

23:31.440 --> 23:38.640
you can project a live. So, one change is enough, right, just think about today, the projects you

23:38.640 --> 23:42.880
work on, what's something you could do to help one of these three things. Makes something faster,

23:43.440 --> 23:47.120
maybe clarify even if it's one sentence and you're reading what you support and what you don't,

23:47.120 --> 23:52.160
or set a boundary for yourself or other maintainers for how you can, like, best to support

23:52.160 --> 23:56.000
yourself as a human. That's all who's going to do one of these three things in the next month.

23:58.400 --> 24:01.360
Some people put up their hand while saying, no, we're just confusing.

24:03.200 --> 24:08.160
If you have questions, I don't know if we've got time for any now, we don't, but semi-anymell,

24:08.160 --> 24:13.440
go my love so you've got to have to contact me, and thank you very much for coming.

