
Contributions in the broader sense (code, documentation, quality assurance, marketing, education, financial support) are central to every project. Open source or not. Giving users what they need and want is what makes any project appealing. It’s just that with open source, the cost to procuring these is not that directly attached to the actual use. So, there is a gap to cross between passive use and active participation. Especially so in complex areas like databases.
I came across an excellent paper by the Linux Foundation. In it I find solid economical evidence for a very fundamental idea: contributions are the life-blood of an open source project.
Contribution Types
Don’t get me wrong: we all love and can’t get enough of focused changes kind! Reliability and neatness, especially in a database server, is what “puts food on the table” for most of us. Since these are relatively constrained issues, the economics of these are I believe simple: there’s a cost of “living” with the issue and a cost of fixing it. Pick your favorite issue here. And try to calculate the costs for it. Do share the result.
- Focused local changes. Bug-fixes are a great example. These are usually touching on a couple of files and are somewhat easy to analyze, implement, test and understand in general. Everybody wants these. And quite a few people are inclined to provide them too. These are a great, very useful and a relatively fast way for individuals to contribute.
- Others. These larger changes are the exact opposite of the former. But it’s what most users see. As they implement larger, hopefully highly desirable features.
Now think about amortizing the fixing cost. That’s right! Sharing the cost with others affected the easiest way to lower it! But how do you find your fellow affectees? Go hit that “Vote” button! Or file a bug or a feature request if there isn’t one already! Talk about this at conferences! And otherwise advocate towards solving the issues. Even buy it a cake and record a video for its anniversary! Somebody eventually will get influenced enough to just do it. We have plenty of this kind of project management in our community as it stands it seems to me.
Focused Changes
To give you a real life example about the difference between the two: Fixing my first server bug took about 3 days to get right. Completing my first non-trivial contribution took 6 months. Given that I was not a stranger to database servers even before this.
The paper also says that needs misalignment is the biggest obstacle to doing this.
How About These Bigger Ticket Items?
In my own experience working with code contributions, there’s largely two types of contributions:
In my experience this is not a sprint, but a marathon. And what is the biggest issue with longer runs? I believe it’s where the finish line really is 🙂
This is why “driving home” these larger features requires a completely different attitude and skillset. Contrarian won’t do it here I believe. It’s a team sport. Be the wise elder here! Or the crafty apprentice 😉 Seek consensus. Communicate.
Every Change is Important!
Let’s look into the economics of these. It’s a significant factor: these require much more effort than the other kind. Effort as in time, skill and money. Note also that it is not a one-time cost. It’s relatively easy to fork some codebase and implement a feature you need. Easy compared to having to maintain this day in and day out, fix the bugs into it, harden it and make it reliable in the long run. Long term vs. short term goals.
Well, with economics being what it is, both short and long term are important.
But this doesn’t remove the fact that cooperation can help decrease the cost even in this case. Once the short term goals are hit, the paper advocates that taking one extra effort to make your implementation generally usable and a “good citizen” wrt architecture will allow you to submit it upstream. This is much less expensive than being stuck with a downstream fork that needs constant maintenance.
My Questions to You:
- Do you know which are the most voted features in jira.mariadb.org?
- Are they aligned to your needs?
- Do you see yourself contributing towards non-trivial features? And what would it take?