The Art of Closing
blog.jessfraz.com
blog.jessfraz.com
Even if it's something you really need and plan on maintaining your own fork if rejected, you could still get some tips on how to best implement it or potential tricky bits to be aware of.
Granting commit access is different level.
If harder, it had better be a stunning new addition that makes the extra maintenance worth it... And often, it had better include an automated test!
Agreed. Once this practice is in place, it's much easier to keep going - we have 100% coverage on urllib3 and require any new contributions to meet that bar.
How we structure work on these projects needs to be rethought so that the majority of these don't happen. The attitude of code-or-gtfo is kinda broken with respect to how much work people put into a project with an uncertain outcome.
Maybe we should
* submit an issue outlining new feature, or technique to fix bug
* create a branch, reference that issue
* update issue for a branch review, get greenlight
* do possibly hours worth of work
* submit PR that isn't outright rejected
Just communicating through pull requests seems very macho and wasteful to me.And maintainers will put many, many more hours into maintaining it. The submitter only has to interact with us once. We have to interact with their code for a long time.
> How we structure work on these projects needs to be rethought [...]
Most projects work the way you described (including Docker). You open an issue (and/or send a mail to the mailing list) describing the problem and a proposal to fix it. We then discuss the design and once the maintainers all agree with the design (more or less) you move onto creating a PR.
Sometimes maintainers won't agree, and it'll take writing a PR to convince them that it will work (this does happen). But in most cases, the design is the important part (if it's a non-trivial change).
The only counter-example I can think of is the Linux kernel. But that's an extreme example and usually a dummy PR will be enough to convince them to discuss your idea.
That said, like most tribal knowledge, it's the people who already do a lot of this kind of thing that know this kind of thing, and it's getting new people in that's the tough part.
I would definitely not follow their model of open source development as they are an example of the opposite and equally ineffective extreme.
Underdelivered features at that scale is to be expected — quality is a bar that can't be compromised.
In the end I think the question is not about "yes" or "no" but about what's the actual problem and not making the easiest choice but trying to make the best.
> Hi X, We really appreciate you taking the time to make this patch. However the design was not discussed prior to writing it. We do see potential in what you are trying to build, but we think it would be more effective as blah, blah, and blah. We are going to close this but would love to see you open a patch that takes the above direction. Thanks, this could really be an awesome feature!
That doesn't sound like a "no" to me. It sounds like they are tell me to change some stuff around and resubmit, which is a type of "yes, but."
4 months ago: However, please read the notes in Roadmap and new features before continuing with this work, as I'm not yet sure whether or not they are within the scope of Umbrella
[...]
4 months ago: I don't think it's a good idea to change it, so only Strings will be available for after, before, etc.
3 months ago: I opened it to implement what was suggested here.
3 months ago: Okay, it was added.
This tells us you are a big liar even if they didn't read your post. If a patch is amazing it should be merged, if it's not then it's obviously not amazing. This kind of message is not useful. You should be more explicit in explaining the reasons you are not accepting the patch. If you don't want the feature other contributors won't even try to write it in another way before convincing you to accept the feature. If you like the feature but didn't like the patch this should be stated if you could be kind enough to explain why you didn't like the patch, they (or others) could try other approaches.
Most of the times I get a PR I'm not interested in, my response is something like this:
"I'm not accepting this PR due to [real reason here]. Please, since I value your time and don't want it wasted, before submitting any PR, please open a ticket to discuss it first. That way I can tell you beforehand whether a change is desired or not and the reasons behind this decision and this would save you some time."
This is one of the reasons I decided to stop contributing to Rails long ago. After wasting too much with two patches that got ignored or rejected I decided contributing to Rails didn't worth my time. I often ask about the new feature before working on it. But their usual response was in the line "send us a PR and we can discuss". I feel this is plain wrong because it doesn't respect the contributor's time. They should think about the feature and decide on whether it's desired, acceptable or not. Even though they say they need to take a look at the code to know, this is not true. It's just laziness. And I'm not willing to take some time I could be practicing Mandolin to spend on some changes that have great chances of being ignored. This is a valuable wasted time.
Finally, back to the original post:
"These are just a few of the techniques we’ve used in the past. I hope if you are a maintainer of a project they are helpful for you, but I would love to know your tips as well."
It's hard to believe so, since the blog doesn't accept comments and the author does not say how he would like to get this feedback. Also this is a very selfish behavior in my opinion. I find it really frustrating when I see some idea being brought to discussion in the wide but without a comments session. Lots of what we learn comes from those discussions, sometimes even more than from the original article. When you say you would like to hear the feedback, this is selfish, because only you are going to get that feedback while other readers might be interested as well.