Skip to content

Commit ef8c05b

Browse files
gaearonrickhanloniimAAdhaTTah
authored
Meta RFC: Clarify expectations about the RFC process (#200)
* Clarify expectations about the RFC process * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Apply suggestions from code review Co-authored-by: Ricky <[email protected]> Co-authored-by: James DiGioia <[email protected]> Co-authored-by: Ricky <[email protected]> Co-authored-by: James DiGioia <[email protected]>
1 parent b48f2c0 commit ef8c05b

File tree

1 file changed

+66
-24
lines changed

1 file changed

+66
-24
lines changed

README.md

Lines changed: 66 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ consistent and controlled path for new features to enter the project.
1212

1313
[Active RFC List](https://github.com/reactjs/rfcs/pulls)
1414

15-
React is still **actively developing** this process, and it will still change as
16-
more features are implemented and the community settles on specific approaches
17-
to feature development.
1815

1916
## Contributor License Agreement (CLA)
2017

@@ -32,23 +29,13 @@ You should consider using this process if you intend to make "substantial"
3229
changes to React or its documentation. Some examples that would benefit
3330
from an RFC are:
3431

35-
- A new feature that creates new API surface area, and would
32+
- A new feature that creates new API surface area, and would
3633
require a feature flag if introduced.
37-
- The removal of features that already shipped as part of the release
34+
- The removal of features that already shipped as part of the release
3835
channel.
39-
- The introduction of new idiomatic usage or conventions, even if they
36+
- The introduction of new idiomatic usage or conventions, even if they
4037
do not include code changes to React itself.
4138

42-
The RFC process is a great opportunity to get more eyeballs on your proposal
43-
before it becomes a part of a released version of React. Quite often, even
44-
proposals that seem "obvious" can be significantly improved once a wider
45-
group of interested people have a chance to weigh in.
46-
47-
The RFC process can also be helpful to encourage discussions about a proposed
48-
feature as it is being designed, and incorporate important constraints into
49-
the design while it's easier to change, before the design has been fully
50-
implemented.
51-
5239
Some changes do not require an RFC:
5340

5441
- Rephrasing, reorganizing or refactoring
@@ -58,6 +45,46 @@ Some changes do not require an RFC:
5845
- Additions only likely to be _noticed by_ other implementors-of-React,
5946
invisible to users-of-React.
6047

48+
## What to expect
49+
50+
It is hard to write an RFC that would get accepted. Nevertheless, this shouldn't
51+
discourage you from writing one.
52+
53+
React has a very limited API surface area, and each feature needs to work seamlessly with all other features.
54+
Even among the team members who work on React full time every day, ramping up
55+
and gaining enough context to write a good RFC takes more than a year.
56+
57+
In practice, React RFCs serve two purposes:
58+
59+
* **React Team RFCs** are submitted by [React Team members](https://reactjs.org/community/team.html) after extensive (sometimes,
60+
multi-month or multi-year) design, discussion, and experimentation. In practice, they comprise the
61+
majority of the RFCs that got merged so far. The purpose of these RFCs is to preview the design
62+
for the community and to provide an opportunity for feedback. We read every comment on the RFCs
63+
we publish, respond to questions, and sometimes incorporate the feedback into the proposal.
64+
Since our time is limited, we don't tend to write an RFC for a React feature unless we're very
65+
confident that it fits the design. Although it might look like most React Team RFCs easily
66+
get accepted, in practice it's because 98% of ideas were left on the cutting room floor. The remaining
67+
68+
2% that we feel very confident and have team consensus on about are the ones that we announce as RFCs for community feedback.
69+
70+
* **Community RFCs** can be submitted by anyone. In practice, most community RFCs do not get merged.
71+
The most common reasons we reject an RFC is that it has significant design gaps or flaws, does not work
72+
cohesively with all the other features, or does not fall into our view of the scope of React. However,
73+
getting merged is not the only success criteria for an RFC. Even when the API design does not match
74+
the direction we'd like to take, we find RFC discussions very valuable for research and inspiration.
75+
We don't always review community RFCs in a timely manner, but whenever we start work on a related area, we check
76+
77+
the RFCs in that area, and review the use cases and concerns that the community members have posted.
78+
When you send an RFC, your primary goal should not be necessarily to get it merged into React as is,
79+
but to generate a rich discussion with the community members. If your proposal later becomes accepted,
80+
that's great. But even if it doesn't, it won't be in vain. The resulting discussion often informs the next
81+
proposal in the same problem space, whether it comes from the community or from the React Team. Many library
82+
authors are reading the discussions, so RFCs often lead to community experimentation and userland solutions.
83+
84+
We apply the same level of rigour both to React Team RFCs and Community RFCs. The primary difference
85+
between them is in the design phase: React Team RFCs tend to be submitted at the end of the design
86+
process whereas the Community RFCs tend to be submitted at the beginning as a way to kickstart it.
87+
6188
## What the process is
6289

6390
In short, to get a major feature added to React, one usually first gets
@@ -79,7 +106,8 @@ to revise it in response.
79106
are much more likely to make progress than those that don't receive any
80107
comments.
81108
* Eventually, the team will decide whether the RFC is a candidate
82-
for inclusion in React.
109+
for inclusion in React. Note that a team review may take a long time,
110+
and we suggest that you ask members of the community to review it first.
83111
* RFCs that are candidates for inclusion in React will enter a "final comment
84112
period" lasting 3 calendar days. The beginning of this period will be signaled with a
85113
comment and tag on the RFCs pull request.
@@ -92,7 +120,8 @@ the team should then close the RFCs associated pull request.
92120
member will merge the RFCs associated pull request, at which point the RFC will
93121
become 'active'.
94122

95-
## The RFC life-cycle
123+
124+
## The RFC lifecycle
96125

97126
Once an RFC becomes active, then authors may implement it and submit the
98127
feature as a pull request to the React repo. Becoming 'active' is not a rubber
@@ -124,15 +153,28 @@ feel free to ask (e.g. by leaving a comment on the associated issue).
124153

125154
## Reviewing RFCs
126155

127-
Each week the team will attempt to review some set of open RFC
128-
pull requests.
156+
Currently, the React Team cannot commit to reviewing RFCs in a timely manner.
157+
When you submit an RFC, your primary goal should be to solicit community feedback
158+
and generate a rich discussion. The React Team re-evaluates the current list of
129159

130-
We try to make sure that any RFC that we accept is accepted at the
131-
weekly team meeting. Every accepted feature should have a core team champion,
132-
who will represent the feature and its progress.
160+
projects and priorities every several months. Even if an RFC is well-designed,
161+
we often can't commit to integrating it right away. However, we find it very
162+
valuable to revisit the open RFCs every few months, and see if anything catches
163+
our eye. Whenever we start working on a new problem space, we also make sure
164+
to check for prior work and discussion in any related RFCs, and engage with them.
133165

134-
**React's RFC process owes its inspiration to the [Yarn RFC process], [Rust RFC process], and [Ember RFC process]**
166+
We read all RFCs within a few weeks of submission. If we think the design fits React well,
167+
and if we're ready to evaluate it, we will try to review it sooner. If we're hesitant about
168+
the design or if we don't have enough information to evaluate it, we will leave it open
169+
until it receives enough community feedback. We recognize it is frustrating to not receive
170+
a timely review, but you can be sure that none of the work you put into an RFC is in vain.
171+
172+
## Inspiration
173+
174+
React's RFC process owes its inspiration to the [Yarn RFC process], [Rust RFC process], and [Ember RFC process]
135175

136176
[Yarn RFC process]: https://github.com/yarnpkg/rfcs
137177
[Rust RFC process]: https://github.com/rust-lang/rfcs
138178
[Ember RFC process]: https://github.com/emberjs/rfcs
179+
180+
We've changed it in the past in response to feedback, and we're open to changing it again if needed.

0 commit comments

Comments
 (0)