RFC Process: more productive conversations

php.internals

Dan Ackroyd

7 years ago
Hi Internals, A little while ago Zeev suggested that it was time to update the RFC process to make it more fit for purpose. As part of that conversation I would like to suggest some 'etiquette' around RFC discussions. PHP internals has a reputation for being 'toxic'. While I don't think it's as bad as some people try to suggest it is, we could make RFC discussions be more productive and less emotionally draining by people being more careful how they interact with each other on this list. I've written some suggestions on people could have more productive conversations which I'm going to maintain here (https://github.com/Danack/RfcCodex/blob/master/rfc_etiquette.md), and have attached to the end of this email. These would be mostly suggestions for keeping conversations rather than hard rules, as most of them involve gray areas, which couldn't and shouldn't be enforced with hard rules. I'm sending this list now, but the full conversation might be better to have as a part of a full review of the RFC process. However, there are a few that I think we should discuss sooner rather than later. # Better process for handling suggestions that are never likely to pass Recently, someone suggested adding the capability for PHP to print strings that are automatically terminated with a new line. Putting it mildly, that conversation didn't go well, as by the end of it people were swearing at each other on the list. PHP internals could do with a better process for giving negative feedback an idea without someone having to go through the whole RFC process. I don't have a good suggestion for how to do this. Does anyone else? # People other than the author announcing RFCs on internals Through possibly a series of errors, someone who was not the author started a thread on internals for an RFC right after it had been created, while it was still in draft status. The site wiki.php.net/rfc is a tool that is meant to allow people to draft RFCs and share the idea with other people who want to work on the RFC before it is a polished idea, and before it is ready to be presented to the world. Having someone other than the RFC author announce the RFC on internals before the author thinks the RFC is ready for comment, is "not okay". If you discuss an RFC on internals before the author thinks the RFC is ready to be discussed, the only thing that could achieve is to make the conversation less productive. If you want to influence how the RFC is drafted, it can appropriate to reach out to the RFC author, and offer to help them. # Contacting RFC authors should go through PHP internals list Drafting RFCs and pushing them through internals is an exhausting process. Several PHP contributors have suddenly stopped contributing to the project after successfully getting an RFC passed, due to them being entirely fed up. One of the things that quickly becomes tiresome is people contacting the RFC author (or voters) through communication channels (other than the PHP internals list), particularly when what they are going to say is either negative or even just based on not understanding part of the RFC. There is a difference between giving positive feedback and negative feedback. And there is a difference between giving feedback to someone you have communicated with many times before, and contacting someone for the first time. It's hard to draw an exact line for which communication is fine to go off-list, and which should stay on list. But here are some examples: "You are awesome for writing such an amazing RFC" - fine to send off-list. "I found some typos in the RFC" - probably fine to send off-list, particularly if you communicate with the RFC author already. "Please can you answer this question about the RFC" - possibly fine to send off-list, but only if you know the RFC author already. "The RFC is a terrible idea for these reasons" - should only be sent via the list. cheers Dan Below is the full list of suggestions. As I said, I'll maintain it at https://github.com/Danack/RfcCodex/blob/master/rfc_etiquette.md until a more formal RFC process discussion kicks off. ## Don't publicise draft work The site wiki.php.net/rfc is a tool that is meant to allow people to draft RFCs and share the idea with other people who want to work on the RFC before it is a polished idea, and before it is ready to be presented to the world. Having someone other than the RFC author announce the RFC on internals before the author thinks the RFC is ready for comment, is "not okay". If you discuss an RFC on internals before the author thinks the RFC is ready to be discussed, the only thing that could achieve is to make the conversation less productive. If you want to influence how the RFC is drafted, it is appropriate to reach out to the RFC author, and offer to help them. ## Do open new RFCs rather than re-use existing documents. When revisiting ideas, and the previous version of an RFC hasn't been discussed in a long time (e.g. more than 6 months) or when a previous version was declined by vote, it is preferable to open new documents on the wiki, rather than re-use existing documents. We have rules in place about when RFCs are allowed to be put into voting. If a RFC document has been re-used there could be some confusion about when it is allowed to be put to a vote. Additionally, leaving the previous RFC document intact, with the results of a vote if one was taken, leaves a clearer document trail than if the document has been recycled. To put it another way - in general the status of an RFC should not be moved backwards to an earlier status. In practice there will be times when people accidentally open the voting too early, or some serious problem is found with an RFC during the voting phase, in which cases it's fine to move the status back until the problem is fixed. But in general leaving each RFC document with a clear history of what happened to that RFC makes it easier to understand past discussions. ## Don't volunteer other people for huge amounts of work The response to some RFCs has been to suggest that the RFC doesn't cover enough scope, and that the RFC author should make the RFC be a lot bigger. While that sounds reasonable on the surface, the amount of time people have to work on PHP RFCs is often limited. Having someone say "thanks for volunteering, but now I want you to do a lot more work than you volunteered for" is a subtle way of preventing RFCs from being implemented. In some cases the suggestion to make the RFC be bigger has been well-intentioned, and so the damage has been accidental. In other cases, it would seem that the suggestion that the RFC needs to be a lot bigger or not done at all has come from someone who doesn't want the RFC to pass, which could be interpreted as deliberately making it more difficult for the RFC to pass. It's okay for RFCs to be small in scope, so long as they are self-contained. It would only be appropriate to say that the RFC needs to be bigger if it would otherwise leave new inconsistencies in the language that would need to be resolved before the next release. ## Do try to talk about the problem before talking about possible solutions Some RFCs don't make it clear what problem it is they are trying to solve before proposing a solution. This leads to the discussions being not as productive as if the problem was introduced first. Some people might disagree on what the exact problem is, or disagree that it even is a problem that needs solving to begin with. If people can't clearly understand that there is a problem that needs solving, then the discussion about possible solutions is going to be incredibly heated, with people not understanding the other side. Some people might offer different solutions to the same set of problems. If the original RFC has skipped over defining the problem clearly, then it makes it a lot harder for people to suggest alternative solutions to the same problem. Additionally, although some sets of problems may be closely related, by talking about the problems clearly, they might be broken up into separate problems to be solved by separate RFCs. ## Don't say that other people's use cases are invalid The response to some RFCs is disappointing. Rather than accepting other people as being individuals with different priorities and motivations, some people on internals have responded with "I don't want to use this proposed feature, therefore I don't think any people should use this feature". When you have someone saying "I want this feature", and your response is "I don't believe you actually want that feature", then you've crossed a line from being reasonable to arguing based on Solipsism, which is not going to lead to a productive discussion. It's still okay to question how many people would want or actually use a feature, but just straight refusing to believe that anyone could find something useful doesn't give a productive discussion. ## Do try to improve RFCs Even if you disagree with an RFC, it is good to try suggest improvements to it, if you can see them, rather than just criticising the RFC. If the vote passes, and the RFC contains your suggested improvement - congratulations, you've helped make PHP better. If the vote doesn't pass, even though the RFC was as good as it could be, then it will be clear to anyone who might think about reopening the RFC that it needs to be dramatically improved or take another approach for it to have a chance to be passed, rather than just having a small tweak. ## Don't be too put out if people don't like your RFC It is quite natural for an RFC author to think that the RFC the are proposing is clearly a good idea - why else would they be proposing it? It's also natural for them to hope that everyone else will think it's a good idea also. However it is also entirely possible for people to have rational reasons to disagree with a proposal. Maybe some people haven't experienced the problem the RFC is trying to solve, and so they don't think the problem is even one that needs solving. Maybe they have experienced in a different language what is being proposed for PHP, and they didn't like using it in that language, so they find it hard to see why it would be good for PHP. Whatever the reason, when people respond with something less than overwhelming support for the idea, they aren't doing it out of malice, they're doing it because they also want PHP to be the best possible language it can be - they just disagree about what that means. ## Do take your time to respond to emails For a couple of reasons, it is appropriate to take time to read and compose emails about RFCs; much longer than you spend writing emails on other subjects.
> "I'm sorry I wrote you such a long letter; I didn't have time to write a short one.
Emails that are sent on PHP internals that discuss RFCs are read by hundreds if not thousands of people. Writing concisely will save a lot of other people's time. It is also far more likely that people will read and understand your email if it is short than if you write long emails. Additionally, unless someone was just discussing trivial issues (such as a typo in the RFC) it is appropriate to think about and digest what they were saying, rather than giving a response based on your first thoughts. ## Don't try to demand that people justify their opinions It is the role of RFC authors to convince other people that an RFC is definitely a good idea, and that people should vote yes on it. People might have many reasons to vote no, e.g. not convinced the problem the RFC addresses is one that needs solving, not convinced the problem is solved in the right way, not convinced that the solution is a correct one. Some of these feelings about why a proposal doesn't deserve a 'yes' vote are hard to express. It isn't the responsibility of voters to explain why they're voting no. ## Don't shout down other people Even if you don't like an RFC being discussed, it is more appropriate to ignore that thread, rather than asking people in the thread to stop talking about an idea you don't like. # Contacting RFC authors should go through PHP internals list Drafting RFCs and pushing them through internals is an exhausting process. Several PHP contributors have suddenly stopped contributing to the project after successfully getting an RFC passed, due to them being entirely fed up. One of the things that is tiresome is people contacting the RFC author through communication channels (other than the PHP internals list), particularly when what they are going to say is either negative or even just based on not understanding part of the RFC. There is a difference between giving positive feedback and negative feedback. And there is a difference between giving feedback to someone you have communicated with many times before, and contacting someone for the first time. It's hard to draw an exact line of where communication is fine to go off-list, and where it should stay on list. But here are some examples: "You are awesome for writing such an amazing RFC" - fine to send off-list. "I found some typos in the RFC" - probably fine to send off-list, particularly if you communicate with the RFC author already. "Please can you answer this question about the RFC" - possibly fine to send off-list, but only if you know the RFC author already. "The RFC is a terrible idea for these reasons" - should only be sent via the list.

Rowan Collins

7 years ago
On Mon, 25 Mar 2019 at 13:04, Dan Ackroyd <Danack@basereality.com> wrote:
> I've written some suggestions on people could have more productive > conversations which I'm going to maintain here > (https://github.com/Danack/RfcCodex/blob/master/rfc_etiquette.md), and > have attached to the end of this email. >
Hi Dan, Thanks for putting this together, I think it's a great addition to the current RFC guidance. The only part I can see being controversial is this:
> It isn't the responsibility of voters to explain why they're voting no.
It has actually been suggested multiple times that voters *should* justify their votes, so that it's clear whether a future RFC could address the perceived problems, or if similar RFCs are likely to receive the same votes against. I'm on the fence whether making it a hard requirement is reasonable, but I don't think we should enshrine the opposite. One suggestion for an additional section: update the RFC with feedback, particularly if it is withdrawn or rejected. If someone comes along with a suggestion that's been discussed before, it's really helpful if we can say "see this page for why it didn't happen last time, and see if you can fix those issues", rather than just "it didn't get very far before, but we can't remember why". This is something I intend to do with my own "locked classes" RFC: I'm probably going to withdraw it because I don't have time to rework it, but will try to summarise where a new RFC could pick things up. Regards,
-- Rowan Collins [IMSoP]

Kalle Sommer Nielsen

7 years ago
Den man. 25. mar. 2019 kl. 15.30 skrev Rowan Collins <rowan.collins@gmail.com>:
> > It isn't the responsibility of voters to explain why they're voting no. > > It has actually been suggested multiple times that voters *should* justify > their votes, so that it's clear whether a future RFC could address the > perceived problems, or if similar RFCs are likely to receive the same votes > against. I'm on the fence whether making it a hard requirement is > reasonable, but I don't think we should enshrine the opposite.
As a voter and maintainer, I don't really wish to state my opinion on every single vote I do, I think that is too much. I know it is preferable as a maintainer, certainly, however instead I think to be following the proposed style of etiquette, it would be recommended, but not a hard requirement to state your reasoning for a vote. If anything I think we should extend the voting addon for dokuwiki to have such an option for primary voting polls.
-- regards, Kalle Sommer Nielsen kalle@php.net

Dan Ackroyd

7 years ago
On Mon, 25 Mar 2019 at 13:30, Rowan Collins <rowan.collins@gmail.com> wrote:
> > One suggestion for an additional section: update the RFC with feedback, > particularly if it is withdrawn or rejected.
I think that knowledge could live separately from the RFCs, which is why I'm maintaining https://github.com/Danack/RfcCodex The reasons for doing it separately are: * the last thing someone wants to do after having their RFC voted down is spending more time documenting it. * some ideas have had multiple RFCs, while other ideas are proposed on the list without having a formal RFC. For both scenarios documenting why it failed in a single place needs to be elsewhere than an RFC page.
> It has actually been suggested multiple times that > voters *should* justify their votes,
Yes. However that is unlikely to provide a useful conversation. Thinking that the RFC is just a terrible idea is always a valid reason to vote no. Having people say that "this RFC is terrible" doesn't lead to a productive conversation.
> so that it's clear whether a future RFC could address the > perceived problems,
I don't believe forcing people to explain their votes actually does that. It does something quite similar, of forcing people to try to articulate how the RFC needs to change for them to change their vote from a no to a yes. At least that is how I have perceived the intentions of people who have asked for 'no' voters to explain their vote. The problem with that is that some RFCs are just fundamentally not good and so there isn't any changes that could be made that would make the RFC acceptable. In those scenarios, putting pressure on 'no' voters to say what needs to be fixed, is just putting pressure on people to not vote no. Additionally in some of the RFC discussions we've had, where the author has asked for people to explain the 'no' votes, the reasons have already been said clearly in the discussion phase. But the RFC author has dismissed those reasons as 'invalid'. Again, trying to force people to justify their reasons, to the satisfaction of the RFC author isn't going to lead to a productive conversation. cheers Dan

Rowan Collins

7 years ago
On Mon, 25 Mar 2019 at 14:02, Dan Ackroyd <Danack@basereality.com> wrote:
> On Mon, 25 Mar 2019 at 13:30, Rowan Collins <rowan.collins@gmail.com> > wrote: > > > > One suggestion for an additional section: update the RFC with feedback, > > particularly if it is withdrawn or rejected. > > I think that knowledge could live separately from the RFCs, which is > why I'm maintaining https://github.com/Danack/RfcCodex > > The reasons for doing it separately are: > > * the last thing someone wants to do after having their RFC voted down > is spending more time documenting it. >
That feels pessimistic to me: is assumes that the author feels unhappy with the RFC failing, rather than taking on board the feedback. You already have a section headed "Don't be too put out if people don't like your RFC", and I think taking on board why people disagreed is a big part of that.
> * some ideas have had multiple RFCs, while other ideas are proposed on > the list without having a formal RFC. For both scenarios documenting > why it failed in a single place needs to be elsewhere than an RFC > page. >
That's certainly an issue, which I've suggested before in the form of an "Internals FAQ". However, it somewhat contradicts your previous point: you're now asking someone to do *even more work* after an RFC is rejected, to summarise it in a new format, in a new location. Either that's the RFC author, or it's someone interested enough that they could offer to write it in the RFC itself. As RFCs re-raising previous ideas, they can and should link to and explain their relationship to related RFCs, and this should probably be in the guidelines if it's not already.
> > It has actually been suggested multiple times that > > voters *should* justify their votes, > > Yes. However that is unlikely to provide a useful conversation. > Thinking that the RFC is just a terrible idea is always a valid reason > to vote no. Having people say that "this RFC is terrible" doesn't lead > to a productive conversation. >
That's because it's an unhelpful comment. What does "terrible" mean? Other than "I assume you raised this in bad faith", there is *always* a more productive explanation than that - "I don't think this fits the style/purpose/scope of the language", "I think this would encourage/only be useful for bad practices", etc.
> > so that it's clear whether a future RFC could address the > > perceived problems, > > I don't believe forcing people to explain their votes actually does that. >
Right, which is why I said I'm on the fence about *forcing* it, but that we should at least *encourage* it.
> The problem with that is that some RFCs are just fundamentally not > good and so there isn't any changes that could be made that would make > the RFC acceptable. > > In those scenarios, putting pressure on 'no' voters to say what needs > to be fixed, is just putting pressure on people to not vote no. >
I don't think that follows. If the answer to "what would make you change your mind?" is "nothing", that's still useful feedback - it tells future RFC authors not to approach the suggestion at all.
> Additionally in some of the RFC discussions we've had, where the > author has asked for people to explain the 'no' votes, the reasons > have already been said clearly in the discussion phase. >
Yes, the important thing is that the different reasons for no votes are captured, not that the exact counts for each are tallied. It's also a reason to add a text field to the voting widget: it doesn't invite responses in the same way a post to the mailing list thread does. I think a reasonable compromise is to say that voters should mention the reasons they're voting no if they have not already been mentioned; but that proposers should assume that votes without a reason are agreeing with previously stated reasons. That discourages voters assuming proposers can read their mind ("well, obviously it's bad") but also discourages proposer pestering and cross-examining voters. Regards,
-- Rowan Collins [IMSoP]

Peter Bowyer

7 years ago
On Mon, 25 Mar 2019 at 14:02, Dan Ackroyd <Danack@basereality.com> wrote:
> I don't believe forcing people to explain their votes actually does that. > > It does something quite similar, of forcing people to try to > articulate how the RFC needs to change for them to change their vote > from a no to a yes. At least that is how I have perceived the > intentions of people who have asked for 'no' voters to explain their > vote. >
It also ties in with the view previously expressed that we should restrict voting rights because (my paraphrase) "too many people can vote for something they don't understand and won't have to maintain". Asking people to say why they voted the way they did helps explore this: can people give a cogent reason for their vote? Peter

Andreas Heigl

7 years ago
> Am 25.03.2019 um 15:39 schrieb Peter Bowyer <phpmailinglists@gmail.com>: > >> On Mon, 25 Mar 2019 at 14:02, Dan Ackroyd <Danack@basereality.com> wrote: >> >> I don't believe forcing people to explain their votes actually does that. >> >> It does something quite similar, of forcing people to try to >> articulate how the RFC needs to change for them to change their vote >> from a no to a yes. At least that is how I have perceived the >> intentions of people who have asked for 'no' voters to explain their >> vote. >> > > It also ties in with the view previously expressed that we should restrict > voting rights because (my paraphrase) "too many people can vote for > something they don't understand and won't have to maintain". > > Asking people to say why they voted the way they did helps explore this: > can people give a cogent reason for their vote?
Shall we then also expect people that vote "yes" to explain why they voted for the feature? To see whether they understood what they where voting on? Then we should couple the vote to a comment in the wikinpage and without a comment there's no way to vote. That way all the information would be readily available in the RFC and no one would need to add comments after an RFC was voted upon. Because IMO that information as well as the process that lead to acceptance of the RFC are also important to afterwards make clear why that feature was implememted the way it was. So all RFCs and also all voters would be treated the same. Just my 0.02€ Cheers Andreas

Peter Bowyer

7 years ago
On Mon, 25 Mar 2019 at 15:24, Andreas Heigl <andreas@heigl.org> wrote:
> Shall we then also expect people that vote "yes" to explain why they voted > for the feature? To see whether they understood what they where voting on? >
Yes.
> Then we should couple the vote to a comment in the wikinpage and without a > comment there's no way to vote. > > That way all the information would be readily available in the RFC and no > one would need to add comments after an RFC was voted upon. Because IMO > that information as well as the process that lead to acceptance of the RFC > are also important to afterwards make clear why that feature was > implememted the way it was. So all RFCs and also all voters would be > treated the same. >
Yes, that is the system I would like. Whether the comments are hidden during voting or visible I have no strong feelings - but I would like a comment to be required to vote. As you say it is useful history. People may enter nonsense into the comment field. They may paste in their message(s) from internals. I'm OK with any of that as it's an experiment. If it's not useful, we can stop asking for a comment. Given the concerns raised around voting, it would be interesting to see the effect this has. Peter

Ben Ramsey

7 years ago
> On Mar 25, 2019, at 11:56, Peter Bowyer <phpmailinglists@gmail.com> wrote: > > On Mon, 25 Mar 2019 at 15:24, Andreas Heigl <andreas@heigl.org> wrote: > >> Shall we then also expect people that vote "yes" to explain why they voted >> for the feature? To see whether they understood what they where voting on? >> > > Yes. > > >> Then we should couple the vote to a comment in the wikinpage and without a >> comment there's no way to vote. >> >> That way all the information would be readily available in the RFC and no >> one would need to add comments after an RFC was voted upon. Because IMO >> that information as well as the process that lead to acceptance of the RFC >> are also important to afterwards make clear why that feature was >> implememted the way it was. So all RFCs and also all voters would be >> treated the same. >> > > Yes, that is the system I would like. Whether the comments are hidden > during voting or visible I have no strong feelings - but I would like a > comment to be required to vote. As you say it is useful history. > > People may enter nonsense into the comment field. They may paste in their > message(s) from internals. I'm OK with any of that as it's an experiment. > If it's not useful, we can stop asking for a comment. > > Given the concerns raised around voting, it would be interesting to see the > effect this has.
If someone enters nonsense or “n/a” or any value that doesn’t justify their vote or doesn’t appear to satisfactorily justify it according to some metric of justification satisfaction, then does that person’s vote get thrown out or discounted? What is the goal of the experiment? Cheers, Ben

Peter Bowyer

7 years ago
On Mon, 25 Mar 2019 at 19:28, Ben Ramsey <ben@benramsey.com> wrote:
> If someone enters nonsense or “n/a” or any value that doesn’t justify > their vote or doesn’t appear to satisfactorily justify it according to some > metric of justification satisfaction, then does that person’s vote get > thrown out or discounted? >
During the experiment, not at all. I'm not presupposing any outcome, and if commenting was kept after the experiment and if it was to have an effect like you describe, it would need to go through the RFC process and be approved.
> What is the goal of the experiment? >
To see if there's a basis in practice for the concern expressed around who can vote and the problems it may/does cause; To see how people respond to being asked to comment, explaining their choice of vote; To see what impact commenting has on the voting process. It would need to be run for a set period of time; perhaps best measured in "Number of votes carried out". Completely guessed without looking at past vote frequency, but say 4 months or 10 votes, whichever is longer. Peter

Chase Peeler

7 years ago
On Tue, Mar 26, 2019 at 4:02 AM Peter Bowyer <phpmailinglists@gmail.com> wrote:
> On Mon, 25 Mar 2019 at 19:28, Ben Ramsey <ben@benramsey.com> wrote: > > > If someone enters nonsense or “n/a” or any value that doesn’t justify > > their vote or doesn’t appear to satisfactorily justify it according to > some > > metric of justification satisfaction, then does that person’s vote get > > thrown out or discounted? > > > > During the experiment, not at all. > > I'm not presupposing any outcome, and if commenting was kept after the > experiment and if it was to have an effect like you describe, it would need > to go through the RFC process and be approved. > > > > What is the goal of the experiment? > > > > To see if there's a basis in practice for the concern expressed around who > can vote and the problems it may/does cause; > To see how people respond to being asked to comment, explaining their > choice of vote; > To see what impact commenting has on the voting process. > > It would need to be run for a set period of time; perhaps best measured in > "Number of votes carried out". Completely guessed without looking at past > vote frequency, but say 4 months or 10 votes, whichever is longer. > > Peter >
For this to have meaningful results, I think you would also need the ability for people to abstain, along with a comment as to why they aren't voting.
-- Chase Peeler chasepeeler@gmail.com