Skip to content

Commit 489aa1b

Browse files
committed
Rewrite Contributor Competition.
1 parent 7177bae commit 489aa1b

4 files changed

+252
-305
lines changed

blog/The_Contributor_Competition-unstyled.html

+84-102
Original file line numberDiff line numberDiff line change
@@ -7,89 +7,67 @@
77
<title>The Contributor Competition</title>
88
</head>
99
<body>
10-
<h1 id="the-contributor-competition">The Contributor Competition</h1>
10+
<h1 id="the-open-source-contributor-competition">The Open Source
11+
Contributor Competition</h1>
1112
<p><br></p>
1213
<div style="text-align: center;">
13-
<p><img src="images/ruin_sword.jpg" /></p>
14+
<p><img src="images/Ibuki_Maya.png" /></p>
1415
</div>
1516
<h4
16-
id="open-source-projects-compete-for-contributors.-how-can-you-make-your-project-win">Open
17-
source projects compete for contributors. How can you make your project
18-
win?</h4>
17+
id="open-source-maintainers-compete-for-contributors.-how-can-you-win">Open
18+
source maintainers compete for contributors. How can you win?</h4>
1919
<h2 id="a-case-study.">A case study.</h2>
2020
<hr>
2121
<p>    Python and Julia are programming languages that fill a very
2222
similar niche. They're both dynamic scripting languages popular in the
2323
scientific computing space. Why is Julia languishing, while Python is
2424
flourishing?</p>
25-
<br>
26-
<div style="text-align: center;">
27-
<p><img src="images/Python_vs_Julia.png" /></p>
28-
</div>
29-
<p><br></p>
30-
<p>    Julia has been relatively successful at attracting users. A lot
31-
of CS students learn Julia in college. But very few have been convinced
32-
to become contributors. I was curious, so I looked at the recent PRs. I
33-
was looking for a PR from someone not in the Julia programming language
34-
organization. I found one. It was the 63rd PR I looked at. A prolific
35-
contributor who wasn't technically in the organization, but had
36-
contributed all over the Julia package ecosystem. I scrolled through a
37-
couple more pages, but couldn't find a name that I didn't recognize. The
38-
Julia community is very tight-knit and insular.</p>
39-
<p>    I did the same for Python. The fourth PR from the top was
40-
submitted by a first time contributor. The Julia organization on Github
41-
has 187 members. Python has by far more users, but only 129 members.
42-
Anyway, this is circumstantial evidence that doesn't prove anything. But
43-
something is going on here.</p>
4425
<p>    No language is "better" than another. Usually these comparisons
45-
are an excercise in tribalism. But bear with me here. Let's look at just
46-
the technology. In a vaccum, Julia seems "better" than Python.</p>
47-
<p>    It's faster. It automatically deduces types, then uses them to
48-
jit compile using LLVM ORC. You can compile a function and read the
49-
assembly. It has perhaps (tied with ipython) the best REPL in the world,
50-
built into the base language. It solves the <a
51-
href="https://en.wikipedia.org/wiki/Expression_problem">expression
52-
problem</a>, which python cannot. It has a more principled package
53-
manager. You can run Julia code on the GPU. The compiler is extensible.
54-
Very fancy. It's a complex and incredible marvel of engineering. It has
55-
everything going for it, from a technical perspective, minus the
56-
maintainability issues.</p>
57-
<p>    Why, then, does Julia not attract contributors? Surely all of
58-
that should make people want to work on it, right?</p>
26+
are an exercise in tribalism. But bear with me here. Let's look at just
27+
the technology. In a vacuum, Julia seems overwhelmingly "better" than
28+
Python. It's a complex and incredible marvel of engineering. It has
29+
everything going for it, from a technical perspective. Why, then, does
30+
Julia not attract any new contributors? Surely all of that should make
31+
people want to work on it, right?</p>
5932
<p><br></p>
6033
<h2 id="the-problem">The Problem</h2>
6134
<hr>
62-
<p>    Yeah, no. None of that matters. You can have the fanciest
63-
compiler in the world. Nobody cares.</p>
35+
<p>    Yeah, no. None of that matters. We don't live in a vaccum. You
36+
can have the fanciest compiler in the world. Nobody cares.</p>
37+
<p>    Developer experience matters. More than enough to sink an entire
38+
project.</p>
6439
<p>    Fundamentally, what contributors want is to solve their own
6540
problems and optimize their own experience. They are selfish. They think
6641
about how to use the project to accomplish their own goals. They don't
6742
care about the maintainer's problems as much as the maintainer may hope.
6843
Especially if they cannot at a glance understand those problems.</p>
69-
<p>    Potential contributors may support your mission, but they won't
70-
sacrifice anything for it. Julia is too complicated to contribute to
71-
without sacrifice. I know because I have sacrificed. This is Julia's
72-
biggest problem.</p>
44+
<p>    Potential contributors may support your mission, but it's hard to
45+
make them sacrifice for it.</p>
7346
<p>    Contributors want to contribute so that they can avoid pain, not
74-
take on more pain. They also have a very short attention span. If they
75-
can't immediately solve their problem, they will leave. They'll find a
76-
workaround without upstreaming a fix, or they will just find some other
77-
project. The only way to get someone to sacrifice for your cause is to
78-
pay them, or offer some other incentive. Nobody wants to clean up your
79-
mess for you. Open sourcing your code is not going to change that.
80-
Nobody is going to materialize next to you with a solution.</p>
47+
take on more pain. They have a very short attention span. If they can't
48+
immediately solve their problem, they will leave. They'll find a
49+
workaround without upstreaming a fix, or just find some other project.
50+
Unless you can find a select few rare and ideologically motivated
51+
individuals, the only way to get contributors who will sacrifice for
52+
your cause is to pay them. Nobody wants to clean up your mess for you.
53+
Open sourcing your code is not going to change that. Nobody is going to
54+
materialize next to you with a solution.</p>
8155
<p>    I've had multiple conversations with maintainers to the effect of
8256
"We have a long list of good first issues, why is nobody picking them
8357
up? We have like three hundred of them! Fix our type inference bugs!
8458
Debug our segfaults! Why are there no new contributors? They should be
8559
cleaning up after us!"</p>
86-
<p>They forget that people have their own problems to deal with.</p>
60+
<p>    They forget that non-ideologues have their own problems to deal
61+
with.</p>
8762
<p><br></p>
8863
<h2 id="the-solution">The Solution</h2>
8964
<hr>
90-
<p>    For an open source contributor, the decision to contribute or not
91-
is a simple risk vs reward. The risk is wasted time. The reward is
92-
getting features and fixes merged.</p>
65+
<p>    This requires a paradigm shift. For an open source contributor,
66+
the decision to contribute or not is a simple risk vs reward. The risk
67+
is wasted time. The reward is getting features and fixes merged. In this
68+
way, it's a lot like a startup product. The more annoying the
69+
experience, the more users and contributors will churn. But get it
70+
right, and you could experience explosive growth.</p>
9371
<p>    To maximize external contributions, maintainers need to
9472
drastically lower the barrier to entry while making the project as
9573
useful as possible. That way people are drawn to the project, and useful
@@ -100,69 +78,73 @@ <h2 id="the-solution">The Solution</h2>
10078
features with, who can review your code and point out conceptual
10179
issues.</p>
10280
<p>    In addition to lowering the barrier to entry, You need to make
103-
sure that people know it's low. Otherwise they will make a subconcious
104-
error in their risk/reward analysis. Frequent communication is key for
105-
this. If they see people on discord asking how a feature works, they
106-
know that if they write a PR, if they encounter issues they can ask
107-
questions as well. Then they will go do that. But if you need to find
108-
someone willing to review your PR and you haven't already befriended a
109-
maintainer, and you're not sure that the code will be readable in the
110-
first place, then maybe not. Your time is probably better spent
111-
elsewhere.</p>
112-
<p>    "Low attention span" describes most first time contributors, but
113-
there do exist other kinds. The other kind is a contributor with a
114-
difficult problem and some determination. They want to use your project
115-
to do something, something it may not even be designed for. And they
116-
need your help. These people are great. Empower them as much as you
117-
can.</p>
81+
sure people know it's low. Otherwise they may make a subconscious error
82+
in their risk/reward analysis and not contribute, to the detriment of
83+
all parties. Advertising good developer experience is helpful in
84+
advertising the project, but even more helpful for the maintinence of
85+
the project.</p>
11886
<p><br></p>
11987
<h2 id="actionable-advice.">Actionable Advice.</h2>
12088
<hr>
12189
<p>This is all well and good. But it's not actionable advice. Here is
12290
some actionable advice.</p>
12391
<p><br></p>
12492
<ol type="1">
125-
<li><p>Automated testing is a must. Write good, exhaustive tests so that
126-
contributors can be confident that their features and fixes won't cause
127-
regressions elsewhere. Equally important, write up a guide on how run
128-
tests and add tests, and place this guide somewhere prominent. Both
129-
should be as frictionless as possible.</p></li>
93+
<li><p>Automated testing is a must. Write good, exhaustive tests that
94+
don't flake so that contributors can be confident that their features
95+
and fixes won't cause regressions elsewhere. Prioritize integration
96+
tests. Equally important, write up a guide on how to add tests and run
97+
them, and place it somewhere prominent. Both processes should be as
98+
frictionless as possible.</p></li>
13099
<li><p>Document anything that would not be immediately understandable by
131-
a layperson. As a Julia example, nobody without a degree in compiler
132-
engineering is going to understand what a phi node or a dominance
133-
frontier is. It's core knowledge for understanding how Julia works, but
134-
that doesn't matter. If you want contributors, then this is
135-
unacceptable. It needs to be documented and made simple. At very least,
136-
point to resources that can be consumed in &lt; 15 minutes. If it
137-
doesn't exist, then write it yourself. No single problem is so
138-
complicated that it should take more than 15 minutes to explain. If it
139-
does, the explanation can probably be broken up.</p></li>
100+
a layperson. As a Julia/LLVM example, nobody without a degree in
101+
compiler engineering is going to understand what a phi node is. It's
102+
core knowledge for understanding how Julia works, but that doesn't
103+
matter. You can't expect people to have this knowledge when they start
104+
reading your code. If you want contributors, then this is unacceptable.
105+
It needs to be documented and made simple.</p></li>
140106
<li><p>APIs should be self documenting, but you should document them
141107
anyway. Exhaustively. You can do this with LLMs, they're very good at
142-
it. If it's python, add type annotations. Not as a tool for
143-
communicating with a type checker, but as a rule for communicating with
144-
humans. It makes the code more readable. I find myself spending a long
108+
it. If it's python or another language with optional typing, add type
109+
annotations. Not as a tool for communicating with a type checker, but as
110+
a tool for communicating with humans. When they're absent, people spend
145111
time figuring out all the different places a function could be called
146-
from so that I can figure out types. The better solution is to just put
147-
them there yourself.</p></li>
148-
<li><p>Set up a Discord server. Most people don't have Slack, and people
149-
usually don't want to sign up for your Discourse. But I understand that
150-
those do work for some projects. Github discussions are a suitable
151-
alternative, but work best for single repo projects. Whatever you
152-
choose, be active there answering questions. Think of this time
153-
investment as an investment. More people will arrive later with the same
154-
question, and other people will know the answer. Maybe you'll even get
155-
your own <a
156-
href="https://discuss.pytorch.org/u/ptrblck/summary">ptrblk</a>.
157-
Distributing the knowledge is very important.</p></li>
112+
from. Don't annoy your contributors. Add type annotations.</p></li>
113+
<li><p>Set up a Discord server. Or a public slack, an IRC, a Discourse,
114+
or Github discussions, or whatever. Wherever your potential users are.
115+
It's usually Discord, but might be somewhere else. Then be active there
116+
answering questions. Think of this time as an investment. If people see
117+
discussions about features and PR, they know that if they write a PR and
118+
encounter issues they can ask questions there as well. Then they may go
119+
do that. It's also a good way to disseminate knowledge.</p></li>
158120
<li><p>Acknowledge and appreciate contributions. Doesn't matter how
159121
large or small. You want contributing to your project to feel good. Make
160122
sure they feel proud of their work. This too is an investment. The goal
161123
is to turn short term contributors into long term contributors.</p></li>
162-
<li><p>Create tutorials. If your project has a feature, then it needs a
163-
tutorial. These tutorials can also serve as marketing material.</p></li>
164-
<li><p>Office hours are incredibly useful.</p></li>
124+
<li><p>Create tutorials and examples. If your project has a feature it
125+
needs a tutorial or example. Otherwise nobody will know about it. These
126+
can also serve as very effective marketing material.</p></li>
127+
<li><p>Office hours can be incredibly useful. Voice and/or video
128+
communication is much higher bandwidth than text alone, making it the
129+
superior medium for feature design discussions. But why office hours
130+
specifically? It's possible to ask the relevant parties if they want to
131+
VC, but demanding that much time can be seen as daunting or rude. It's
132+
often better just to set a regular meeting time for discussions of any
133+
sort.</p></li>
134+
<li><p>Imagine yourself in the shoes of a new user and contributor.
135+
You're using the project for X, and you want to implement new feature Y.
136+
Where is it likely you would get stuck, if you were to use and read your
137+
code for the first time? Are all the places that would need to be
138+
changed intuitive and easy to find? How can you fix or document this? If
139+
you have willing contributors, use them as test subjects and solicit
140+
feedback on the experience. Not just the experience of using the
141+
project, also the experience of modifying it.</p></li>
142+
<li><p>Maintain a high bar for quality.</p></li>
165143
</ol>
166144
<p><br></p>
145+
<h2 id="conclusion">Conclusion</h2>
146+
<p>TLDR, empower your contributors.</p>
147+
<p>Identify potential roadblocks and rip them out before they become a
148+
problem. things that might be holding them back. Remove roadblocks.</p>
167149
</body>
168150
</html>

0 commit comments

Comments
 (0)