Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

doc: introduce RFC process #37953

Closed
wants to merge 1 commit into from
Closed

doc: introduce RFC process #37953

wants to merge 1 commit into from

Conversation

Trott
Copy link
Member

@Trott Trott commented Mar 28, 2021

@nodejs-github-bot nodejs-github-bot added the doc Issues and PRs related to the documentations. label Mar 28, 2021
Copy link
Member

@benjamingr benjamingr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this will solve any of the problems with the current process while adding more boilerplate and extra steps people who want to make changes will have to take.

I'll leave a longer comment below.

@benjamingr
Copy link
Member

This will probably give people more chances and places to block. It will also encourage discussion on pros/cons of features before we experiment and gather feedback on them effectively "waterfall"ing our process.

I think the things that make changes hard at the moment are:

  • The consensus seeking process (although arguably by design).
  • Lack of engagement from a lot of collaborators when people want to introduce new features.
  • It's very easy to block or derail discussions about new features.
  • All of this is true even for experimental features.

I think an RFC is kind of the opposite of what I'd want - I think it should instead be significantly easier to add experimental features as long as we're absolutely fine with removing them.

It should also be easier to ask people for reviews and help when working on features - currently the process is "reach out to people I know on social media and beg for reviews" which isn't a great process.


The request for comments (RFC) process is intended to provide a consistent and
controlled path for new features to enter Node.js. The process helps find
consensus among Node.js community and collaborators on substantial changes to
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think consensus among the Node.js community which is very diverse in ideas and opinions is not really attainable for most features. I cannot name a single Node.js feature with consensus among the community :)

Consensus among collaborators (who we also try to make sure is a diverse group of many opinions) is already a very high bar.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess it depends on your definition of consensus. Which means that maybe I ought to define the term in the doc so it's clear how I mean it.


Examples that may have benefited from an RFC process:

* [Implement window.fetch into core][]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I... think window.fetch has been blocked on the same thing all along - someone actually doing all the work to get window.fetch into core.

When we had the half-formal process (of talking about it in 2 collaborator summits) we were always in agreement (mostly). I am happy to dig up the notes from those meetings if that's helpful.

The thing blocking fetch in core has always been the fact that providing a reasonable implementation is a lot more work than it seems and we didn't actually want to ship a broken one that doesn't actually behave like browser fetch in many cases (like Deno's). If someone feels strongly about shipping a broken fetch and fixing things as we go along later - that is also something collaborators were OK with.

That said - we've landed thousands of lines of code in core already to enable fetch in core including things (like AbortController) that don't actually work in Deno or other runtimes (yet, I'm sure they'll fix it! At least I'm rooting for it). Users have always had a reasonable workaround (use a polyfill).

Copy link
Member

@benjamingr benjamingr Mar 28, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other ideas that could benefit from an RFC process though:

  • Switching our API defaults (somehow, eventually) to promises.
  • Modules, the module team governance and process ended up being very frustrating to many and several collaborators quit the project.
  • The whole unhandledRejection thing and discussion that eventually only happened (after endless discussion) through Mary's hard work and diplomacy.
  • Promise APIs (everywhere)
  • Stuff like HTTP3/QUIC

That said, I believe in most of them it's important the RFC process happens swiftly and after we have an initial implementation landed.


## Drawbacks

* This approach means a formal process for substantial features where we do not
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What if we only go through this process if there is no consensus on a feature? I'd hate to have to fill out an RFC form whenever I want to make a consistency API change (like adding AbortSignal support to another API)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What if we only go through this process if there is no consensus on a feature?

I'll move "When to use the RFC process?" to the "Unresolved questions" section.

I'd hate to have to fill out an RFC form whenever I want to make a consistency API change (like adding AbortSignal support to another API)

One RFC does not have to correspond to just one PR. You could do a single RFC for AbortSignal support generally and then add it to multiple APIs over time.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is that different from what we've done in collaborator summits for project-wide initiatives in the past?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps not, but it removes the necessity of attendance at a summit to propose something. (Perhaps that's not a good thing?)

@Trott
Copy link
Member Author

Trott commented Mar 28, 2021

Thanks for all the thoughtful comments, @benjamingr. I opened this as a draft because it is definitely not in any sort of final useable form yet, but it is also complete enough for people to react to and improve. So those are exactly the kinds of comments I was hoping to get.

@benjamingr
Copy link
Member

Thanks for opening this Rich :) While I don't think an RFC process as outlined here is a good way to solve the fact it's hard to add things but it doesn't mean an RFC process can't work at any configuration. I appreciate the willingness to engage with these important and unpleasant issues for the good of the project <3

@jasnell
Copy link
Member

jasnell commented Mar 29, 2021

I'm generally a strong -1 on any new formalized rfc process. It's not needed and won't solve the issues we have with existing process.

@Trott
Copy link
Member Author

Trott commented Jun 7, 2021

won't solve the issues we have with existing process.

@jasnell In your opinion, what are the issues we have with the existing process?

@jasnell
Copy link
Member

jasnell commented Jun 10, 2021

Best illustrated through example... For simple changes, we have no issues. For complex changes (say, QUIC) where only one person is driving it forward, it's also simple. For complex issues where there's more than one opposing view, having a more formal way of arguing is not going to help. It does back to what @mcollina said in the nodejs/tsc issue -- that it incentivizes just writing a long detailed argument that no one has time or context to evaluate.

An RFC process needs to emphasize how we reasonably advance (or not) in light of those kinds of intractable issues where there's no clear right or wrong goalpost and I'm not seeing that here. When I say that I'm opposed to an RFC process I specifically mean any RFC process that does not also address this specific problem.

@Trott
Copy link
Member Author

Trott commented Jun 12, 2021

@jasnell You made a comment here and another one in the original TSC issue and I think they are both great food for thought. But they are also leading me in opposite directions and I want to know what you think is the right way to go.

The snapshot interaction is a pretty good example of something to aim to solve. But the whole TC39-inspired process doesn't seem to suit it well. Snapshots weren't a thing where a lot of people were working on it and had ideas. It was basically two people who had different ideas. By the time it was apparent that there was a problem to solve, we already had two competing implementations. Do we start the RFC process at that point? I suppose we could and leave those implementations to sit until we work some stuff out. Might be challenging to identify a champion in this situation when there are two people with different ideas, and not many other people with a lot of knowledge that are engaging. I guess the RFC process could/should be tailored to try to get that engagement/participation, but I'm not sure how in a situation like this.

I'm kind of thinking out loud more than asking a question, but the purpose is to prompt a response from you or others, so give me your thoughts!

@jasnell
Copy link
Member

jasnell commented Jun 12, 2021

Short answer: I don't know. I just know I don't want to just add process that trades one set of problems for another

@mhdawson
Copy link
Member

It was basically two people who had different ideas.

That is always going to be hard. The more effort that has been invested, the harder it will be to compromise/find a way forward. While it does not solve the problem the only thing I can think of is catching potential differences in approach earlier so that there is less invested. That's were I think an RFC process can help.

If we all develop our own silo then submit a large PR we are more likely run into conflict after we have invested significant effort. If we have an RFC process that allows other people to know what is being worked on, what's already been discussed and agreed it will hopefully encourage joining an existing effort versus starting a parallel one.

@Trott
Copy link
Member Author

Trott commented Jun 27, 2021

I think I'm going to close this and the TSC issue and regroup a bit.

@Trott Trott closed this Jun 27, 2021
@Trott Trott deleted the rfc branch September 25, 2022 17:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
doc Issues and PRs related to the documentations.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants