Ask HN: How to handle open source contributors that do “too much”?

26 points by moizici ↗ HN
Hello everyone,

An open source app of mine is being "hijacked" by a contributor, and I have no idea how to handle this the right way.

In a span of 6 months, they contributed a lot. During these 6 months, I wasn't careful enough while reviewing their PR (because of personal issues), and they took the initiative to change existing features and made the codebase "messier".

Since then, I started rewriting and cleaning everything, but they keep creating PRs with feature changes, adding features without discussing them beforehand, and it's frustrating, since they are creating multiple PRs a week, with more and more changes.

Reviewing their PR is becoming harder and harder, because I feel like I'm wasting my time arguing with them, as we don't have the same "view" of how should the app work.

I feel like I can't say no to them (or I don't know how to do so) because I should be grateful as they helped with some bug fixes, yet I feel like I'm loosing my own project.

How to handle this (without blocking them) ?

20 comments

[ 3.2 ms ] story [ 48.5 ms ] thread
Listen mate, I really appreciate the help but I feel like our visions aren’t completely aligned. There’s a fork button right here, probably best you click it. If you add anything I like I’ll port it over as well but until then, yeah, make your own project.
Tell them your vision of the project's future is different than theirs, and encourage them to fork off and maintain their own version. Then you can take a more measured approach to adopting their contributions, perhaps after others have filed off some of the rougher edges.
Like others, explain the situation clearly, but unlike others are suggesting, don't jump to the fork button. Instead, get on a call with them. In the end, you will have to decide if you want to keep accepting their work. Best to talk it through with a non-text medium, video is best, more than half of your communication is lost by not using it.

Also, get over the "I might hurt their feelings" and think more like "I might have to fire this person". On the plus side, you are not impacting their finances or family, just take care to explain your position clearly, oh, and listen first.

Sharing the repo link here might help us help you better.

> Sharing the repo link here might help us help you better.

If you do this, it might embarrass the PR author, and PRs might become inundated with HN comments.

I wouldn't share the repo link.

One would hope that the HN crowd is more respectful than this. This is a low traffic story with several offering help
(comment deleted)
I totally agree with this and also hope the HN crowd would be more respectful than “this”. But… would also not recommend OP making the repo/ICs public
This is very true. Learning how to say no in a constructive way is hard. Doing it over text is impossible. The contributor obviously is passionate about your project and that is great. You might be able to channel that to work with your vision. The chances are they'd be grateful for some mentorship if that worked for you both. I suspect it might as you'd get more work done on your project and they'd get to improve as a developer.

I would try to let go of your frustrations with this person (easier said than done). If you do that you can try to maximize what you can get out of this. Possibly a life long friend, probably more work on your project.

Having been one of those people who wanted to help out another project (https://goa.design) where the vision did not align, I left to build something on my own (https://hofstadter.io) and am having way more fun doing it and there were no hard feelings. It's best to not try to force things when the vision is different, as OP describes it
Yeah that's true. I have a friend that fired all his staff and has never been happier. For him not having to deal with others to get the job done is a much better experience.

Personally I've always loved working along side others. Having my ideas challenged and coming up with something other than my own vision.

Different people have different preferences I guess.

Letting go of one individual does not mean you are abandoning teamwork, often you have to because one bad apple will spoil the bunch. If your happiness and excitement are drained by this person, I'd say the choice is pretty clear.
Also very true and those projects you linked look very cool. I've not really explored code generation in the past but I'll have to have a look. I like idea. Put the magic up front so later when you're maintaining there is no magic.
I like the way you describe the magic being upfront, that might end up in the docs somewhere :]

With hof, the magic is at development time, than just once upfront, you can regen code as you designs and data models evolve. I think what you are getting at is that it is not runtime code gen and you can see all the code that makes up your program in files and got.

> don't jump to the fork button

Doesn't PR refer to pull request? That means there is already a de facto fork: a repository from which the changes are supposed to be pulled into the upstream.

yes, but that is besides the point. Fork here is being used in the permanent sense, where you continue development and never open a PR
Firstly, congrats on having a popular project, caring about contributors, and seeking advice on how to handle this tricky situation.

When giving pushback, try to avoid raising the stakes, i.e. avoid public criticism, don't issue ultimatums.

If you have a private chat, that'd be great.

If not, try to state your concerns as plainly and non-judgementally as possible, from the perspective of your project.

"Hey X, I'm glad that you are and have been contributing so much to the project. There's a few different ways I see the program and codebase evolving, and I'm keen to work together on figuring out that right path.

It looks like there are places that have different visions, and if you could split PRs into smaller PRs, we can more easily find the changes that fit both our visions."

If there truly is disagreement on some PRs, you can be polite but firm, "I can see the value in X because Y, but this compromises Z, which is a core value of the project."

You have merge access, and should also consider whether this contributor is worth the hassle of all of what I just said. (In which case, skip straight to "polite but firm").

It sounds like you're getting frustrated with the process (working with other people on an open source project), but you should really just let the process work _for_ you, not against you.

Work with your community (which might just be this single developer at this point) to collaboratively create a style guide or a set of standards for all future code submissions. This will be an outlet for you to professionally air your grievances and allow them to see where you're coming from. Simultaneously, this might provide you with some additional context that could help you better support them.

Best of luck!

Interesting perspective. I’m actually on the other side, wanting to get started contributing to open source by making a few bug fixes to small single author projects I use, but its essentially one persons baby so I don’t want to annoy them, but also forking to make a tiny change seems like stealing credit when they wrote 99% of the code. One the other hand big projects are complicated and hard to wrap my head around. If you had any thoughts about how to approach a single maintainer respectfully that would be very helpful.
Ask! Create an issue if there's a tracker or send a short email explaining what you want to do and see if they're open to the idea, have more questions, or aren't interested in supporting it. No need to overthink formalities (although a quick "thanks for xyz" never hurt anyone's feelings), just be polite and concise.