Skip to content

Commit

Permalink
rfc: update the RFC process
Browse files Browse the repository at this point in the history
  • Loading branch information
knz committed Aug 25, 2017
1 parent 90840ef commit 31b2d57
Show file tree
Hide file tree
Showing 75 changed files with 149 additions and 25 deletions.
95 changes: 95 additions & 0 deletions docs/RFCS/00000000_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
- Feature Name:
- Status: draft/in-progress/completed/rejected/obsolete
- Start Date: YYYY-MM-DD
- Authors:
- RFC PR: (PR # after acceptance of initial draft)
- Cockroach Issue: (one or more # from the issue tracker)

**Remember, you can submit a PR with your RFC before the text is
complete. Refer to the [README](README.md#rfc-process) for details.**

# Summary

One paragraph explanation of the proposed change.

Suggested contents:
- What is being proposed
- Why (short reason)
- How (short plan)
- Impact

# Motivation

Why are we doing this? What use cases does it support? What is the expected outcome?

# Guide-level explanation

How do we teach this?

Explain the proposal as if it was already included in the project and
you were teaching it to another CockroachDB programmer. That generally means:

- Introducing new named concepts.
- Explaining the feature largely in terms of examples.
- Explaining how CockroachDB contributors and users should think about
the feature, and how it should impact the way they use
CockroachDB. It should explain the impact as concretely as possible.
- If applicable, provide sample error messages, deprecation warnings, or migration guidance.
- If applicable, describe the differences between teaching this to
existing roachers and new roachers.

For implementation-oriented RFCs (e.g. for core internals), this
section should focus on how contributors should think about
the change, and give examples of its concrete impact. For policy RFCs,
this section should provide an example-driven introduction to the
policy, and explain its impact in concrete terms.

# Reference-level explanation

This is the technical portion of the RFC. Explain the design in sufficient detail that:

(You may replace the section title if the intent stays clear.)

- Its interaction with other features is clear.
- It is reasonably clear how the feature would be implemented.
- Corner cases are dissected by example.

The section should return to the examples given in the previous
section, and explain more fully how the detailed proposal makes those
examples work.

## Detailed design

What / how.

Outline both "how it works" and "what needs to be changed and in which order to get there."

Describe the overview of the design, and then explain each part of the
implementation in enough detail that reviewers will be able to
identify any missing pieces. Make sure to call out interactions with
other active RFCs.

## Drawbacks

Why should we *not* do this?

If applicable, list mitigating factors that may make each drawback acceptable.

## Rationale and Alternatives

This section is extremely important. See the
[README](README.md##rfc-process) file for details.

- 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?
- What is the impact of not doing this?

## Unresolved questions

- What parts of the design do you expect to resolve through the RFC
process before this gets merged?
- What parts of the design do you expect to resolve through the
implementation of this feature before stabilization?
- What related issues do you consider out of scope for this RFC that
could be addressed in the future independently of the solution that
comes out of this RFC?
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
61 changes: 54 additions & 7 deletions docs/RFCS/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,32 +3,71 @@
This directory contains RFCs (design documents) that describe
proposed changes to cockroach.

# RFC process
# Why and when to send a RFC?

Before making major changes, consider sending an RFC for discussion.
This is a lightweight design-document process that is inspired by the
[process used by the rust project](https://github.com/rust-lang/rfcs).

1. Copy `template.md` to a new file and fill in the details. Commit
What is a major change?

A change is "major" and requires a RFC when any of the following
conditions apply:

- completing the change will cost you more than a week of work.
- reviewers from more than one team are needed to review the change.
- users will need to change the way they use CockroachDB as a result.
- other CockroachDB contributors will need to change the way
they work as a result.
- the architecture of the software or the project changes in a way visible
to more than a handful of developers.
- the change impacts the cost model of CockroachDB (how much time and
how much memory is used for common operations) in a way that's
noticeable by users.

# RFC process

1. Copy `00000000_template.md` to a new file and fill in the details. Commit
this version in your own fork of the repository or a branch.

2. Submit a pull request to add your new file to the main repository.
2. Submit a pull request (PR) to add your new file to the main repository.
Each RFC should get its own pull request; do not combine RFCs with
other files.

Note: you can submit a PR before the RFC is complete, to solicit
input about what to write in the RFC. In this case, include the word
"WIP" in the PR title and use the label do-not-merge, until
you are confident the RFC is complete and can be reviewed.

**Before you consider the RFC ready to be reviewed, give extra
attention to the section "Rationale and Alternatives". It's
important for the reviewers to understand why the solution chosen
was right. It is an unfortunate fact that often a solution is
determined first and the RFC is then written to support that
solution, without much consideration being given to the
alternatives. You should be mindful of this when it happens and
attempt to compensate by a serious review of alternatives.**

3. Go through the PR review. When the dust on the PR review has settled,
and if there is consensus to proceed with the project, begin the
final comment period (FCP) by (1) posting a comment on the PR and
(2) posting an announcement on the persistent public communication
channel du jour (https://forum.cockroachlabs.com/ at the time of
this writing).
The FCP should last a minimum of two working days to allow
collaborators to voice any last-minute concerns. If there is still
consensus to proceed after the FCP, change the `Status` field of the
document to `in-progress`, update the `RFC PR` field, and merge the
PR. If the project is rejected, either abandon the PR or merge it
collaborators to voice any last-minute concerns.

4. If there is still consensus to proceed after the FCP:

- change the `Status` field of the document to `in-progress`;
- rename the RFC document to prefix it with the current date (`YYYYMMDD_`);
- update the `RFC PR` field;
- and merge the PR.

If the project is rejected, either abandon the PR or merge it
with a status of `rejected` (depending on whether the document and
discussion are worth preserving for posterity).

Note that it is possible for an RFC to receive discussion after it
has been approved and its PR merged, e.g. during implementation.
While this is undesirable and should generally be avoided, such
Expand All @@ -54,6 +93,14 @@ During its lifetime an RFC can have the following status:
accepted (next possible status: in-progress) or that it is DOA (next
possible status: rejected).

- Rejected

A RFC receives this status when the PR discussions have concluded
the proposal should not be implemented.

Next possible status: none. If you want to ressucitate an idea, make
a new RFC.

- In-progress

A RFC receives this status when the PR discussions have concluded
Expand Down
18 changes: 0 additions & 18 deletions docs/RFCS/template.md

This file was deleted.

0 comments on commit 31b2d57

Please sign in to comment.