Contributors do not save time
drmaciver.com
drmaciver.com
Contributors rock! More of them would help me get my projects done so much faster.
One of course is the maintainer's ability to mentor new contributors into becoming co-maintainers - writing guides etc.
Another would be a project's scope. If it's really small, then people will step on each other's toes.
Yet another would be "fun-ness" - how intrinsically rewarding it is to work on the project. It would be alot harder to get people to stick around if they find the work tedious.
The pinned projects there are groomed.
Love that line. That's what we high-assurance people keep telling developers to do to all the established stuff. You said it better, though. Might remix that in some way with your permission. :)
The article begins by laying out a premise that not all work is equal, in the sense that contributors will contribute work that maintainers aren't wont to do for one reason or another.
But what follows is the claim that this creates an additional work burden for maintainers, in terms of review. But what is each contribution, and how does it contribute to future work by maintainers and contributors alike?
Projects with a lot of attention benefit not just from "work" but from advancing design and efficiency where, as the author says, "each contributor brings fresh eyes and experience to the project". Simply counting hours worked doesn't account for this, because a tremendous amount of work may simply be avoided by this kind of contribution.
The solution I see, is to make it so that rather than commenting on pull requests, I "adopt" the pull requests. I merge them into a private branch, fix the spelling errors and the "bad" variable names, and then I push the bundle. For some reason, most contributors want to have a clean commit history and don't like this method. I agree that it is messy. I think that my "solution" points to the need for a better solution. Either one implemented by github or one implemented by a competitor which destroys github.
- Your project has two mainline branches, one against which development is done and the other from which releases are cut.
- The development mainline is the default branch
- this is the first thing contributors see, and the first branch PRs target
- You "adopt" PRs into the development branch, and when you feel the work is suitable, release it to the release mainline branch
1. Merge without comment. Unless the contributor is closely following development, they won't even notice what you do with the contribution between your development and release branches. 2. Merge with a comment that you'll be cleaning it up before release, and if you want the person to continue contributing explain what you'll be doing.
Differentiating stewardship from producing solutions can go a long way toward eliminating debate over minutiae.
If there's still tense back and forth, it's probably over approach, understanding of the problem, or awareness of consequences. In none of those cases should the PR be merged. If you want to engage the contribution, explain what the contributor missed and close the PR. If you don't think the contribution is going to be productive, just close it.
However, in this post (http://felixge.de/2013/03/11/the-pull-request-hack.html) and the related HN discussion (https://news.ycombinator.com/item?id=5357417), we see that by empowering and trusting contributors we can often get surprising and unintuitive results. I've tentatively tried this and been pleasantly surprised in my own projects.
I'm involved in two projects (Rust, Servo) which have immense numbers of contributions from volunteers. Both have mentorship programs (Servo's is more evolved, Rust's is getting on its feet). In Servo we spend a lot of time mentoring people. In return, once every few new contributors we get someone who sticks around, and perhaps even works on major things. This saves ton of time. I haven't ever measured this formally, but by eyeballing it I'd say contributors save more time than the review process and mentorship take.
I also have a personal project, rust-clippy (http://github.com/manishearth/rust-clippy/). It started out as my own thing, and I merged with another similar project and got a co-maintainer. It was mostly the two of us working on it. We could have gotten it to the stage which it is at now, but it would have taken forever. At one point I started tagging issues as easy/medium/hard, and wrote some documentation for newbies wanting to contribute. I advertised this a bit in the appropriate forums, and now I have tons of contributors; three of which have become maintainers (they still contribute a lot), and a couple others who frequently contribute. I don't have much time to work on this project these days, but it has grown so much without me needing to put much time in it at all. These days I mostly review PRs and take part in discussions, but rarely write code for it. The project is now a tool with more than 150 lints which most of the Rust community uses and loves. It would not have gotten there without the contributors.
If you'd like your project to be mroe receptive to new contributors, I have a blog post I once wrote for this: http://manishearth.github.io/blog/2016/01/03/making-your-ope.... Many of the tips there don't require much effort -- it's either a one-time thing you have to do, or a change in process that doesn't make the process longer.
Aside: Often a distinction between "contributor" and "maintainer" is made, and this is cropping up in this thread too. In clippy this has never really been a thing. We have maintainers, but when someone becomes a maintainer they don't really do anything different -- they don't take on more responsibilities. Rather, most of the contributors I have ramp up from working on individual issues to reviewing and doing maintainer-y things, and once we think they've got the gist of it we give them merge powers. In Servo/Rust we also have a similar continuum -- we have folks who take part in review without having review access ("review access" is the ability to tell our autoland bot that something is reviewed and ready to test/merge), and at some point they are given reviewer permissions. So there is of course a difference in the powers available to contributors and maintainers, but in the projects I work on the most there's not much of a difference in what they do; maintainers don't have additional responsibilities, they just have powers which help they carry out what they were doing as a contributor anyway.