-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Update RFC template #3982
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
base: master
Are you sure you want to change the base?
Update RFC template #3982
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -17,7 +17,9 @@ This section should explain this problem in detail, including necessary backgrou | |
| It should also contain several specific use cases where this feature can help a user, and explain how it helps. | ||
| This can then be used to guide the design of the feature. | ||
|
|
||
| This section is one of the most important sections of any RFC, and can be lengthy. | ||
| It can be tempting to confuse *motivation* with *rationale*. | ||
| The motivation helps you understand what the problem is, and the explanation is the *proposed* solution. | ||
| After the solution is explained, you should take care to explain why *this* solution is the best one, in the rationale. | ||
|
|
||
| ## Guide-level explanation | ||
| [guide-level-explanation]: #guide-level-explanation | ||
|
|
@@ -44,16 +46,18 @@ This is the technical portion of the RFC. Explain the design in sufficient detai | |
|
|
||
| The section should return to the examples given in the previous section, and explain more fully how the detailed proposal makes those examples work. | ||
|
|
||
| ## Drawbacks | ||
| [drawbacks]: #drawbacks | ||
| ## Drawbacks and limitations | ||
| [drawbacks-and-limitations]: #drawbacks-and-limitations | ||
|
|
||
| Why should we *not* do this? | ||
| - What are the downsides to this particular approach? | ||
| - How will this change limit future changes? | ||
|
Comment on lines
-47
to
+53
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What I like about “why should we not do this?” is that it challenges you to give a “positive” answer. You should try your best to already collect the best arguments for why not doing this is actually better. When it’s more like “this is the ‘drawbacks’ section; please list ‘downsides’ here” - then I might feel more motivated to minimize the amount of downsides listed since - well - downsides are a bad thing, right? I like the idea to consider limitations to future change and I can’t find that mentioned elsewhere yet! It seems vaguely related to “future possibilities” (kinda “future non-possibilities”?) but also different. One problem with asking this question might be that RFC authors aren’t usually required to be those people who already have in mind all the - maybe wanted - future changes that could possibly be limited by a particular proposal. Though if they do know some, that’s a great thing to already include in the RFC (and if not, it’s also not a bad idea to talk to other people in advance in order to get some ideas).
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I have been mulling this over for a bit, and there probably is a way to word this more positively, but I guess the main thing that's important here is for folks to really think about what the limits of the change are, and whether other features are still able to be present if this change is accepted. In a real sense, it's kind of asking the author to use their imagination and think about the most out-there features that we could be doing instead of this one, and whether they could be done in addition to this feature. That said, there are some cases where this is a truly negative case: for example, stuff like Not really sure what the best wording is, here. |
||
|
|
||
| ## Rationale and alternatives | ||
| [rationale-and-alternatives]: #rationale-and-alternatives | ||
|
|
||
| - Why is this design the best in the space of possible designs? | ||
| - What other designs have been considered and what is the rationale for not choosing them? | ||
| - Note that the *lack* of a change is one of the possible designs. | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this actually true though? “Possible designs” sounds to me like “possible designs that solve the problem”. Though admittedly, the explicit framing around a problem is newer than this section. That is not to say I’m opposed to the idea of pointing out more clearly than currently the case, that “no change” is something that should be properly compared against in this rationale section. I am just wondering if this framing works best. Some more thoughts on that:
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this change is important: people should always consider and document the null alternative. The line below of "impact of not doing this" covers this as well. But in general, people get attached to the idea of their solution, and it's worth getting people to think carefully about what would actually happen in their problem domain if we decided not to make a change. |
||
| - What is the impact of not doing this? | ||
| - If this is a language proposal, could this be done in a library or macro instead? Does the proposed change make Rust code easier or harder to read, understand, and maintain? | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I like the idea of pointing out that rationale is different from motivation.
At the same time, with this current text, it feels like you’re just repeating the things that are already clearly explained elsewhere. Right above this, there’s already
so “The motivation helps you understand what the problem is” sounds a bit repetetive.
And further down in the template, there’s already
so “After the solution is explained, you should take care to explain why this solution is the best one, in the rationale” sounds redundant as well.
IMHO make sense to point out here that – hey, make sure not to overlook that rationale goes down there into it’s own different section1 – if that avoids an otherwise common problem in RFCs, or at least confusion point in the writing process, but we don’t need to repeat defining what each section is about.
I think, it’s possible to even misunderstand this text as it is now: By not explicitly referring down to the “Rationale and alternatives” section, this last note about “After the solution is explained, you should …” might initially sound - to a reader of this template - like it’s listing this rationale as another thing that should be included here (in the motivation section) as well.
I also don’t understand the sentence “the explanation is the proposed solution”. I see the words, I’m not quite sure what they’re actually telling me. “The explanation” of what? The explanation of the problem – … – is the solution(?) The explanation of the solution – … – helps understand the problem(?) Or just: the proposed solution should be explained as well(?) Something else?
Footnotes
I haven’t come up with an actual/concrete formulation of what to use, sorry. ↩
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not all repetition is a bad thing. We don't necessarily optimize human communication, including documentation, for maximum non-redundancy. A limited amount of repetition can be a form of error-correcting code, and can help people understand things.