|
| 1 | +# TensorFlow Request for Comments (TF-RFC) |
| 2 | + |
| 3 | +The purpose of a TensorFlow RFC is to engage the TensorFlow community in |
| 4 | +development, by getting feedback from stakeholders and experts, and |
| 5 | +communicating design changes broadly. |
| 6 | + |
| 7 | +## Who is involved? |
| 8 | + |
| 9 | +Any **community member** may help by providing feedback on whether the RFC will |
| 10 | +meet their needs. |
| 11 | + |
| 12 | +An **RFC author** is one or more community member who writes an RFC and is |
| 13 | +committed to championing it through the process. |
| 14 | + |
| 15 | +An **RFC sponsor** is any maintainer who sponsors the RFC and will shepherd it |
| 16 | +through the RFC review process. |
| 17 | + |
| 18 | +A **review committee** is a group of maintainers who have the responsibility of |
| 19 | +recommending the adoption of the RFC. |
| 20 | + |
| 21 | +## What is a TensorFlow RFC? |
| 22 | + |
| 23 | +An RFC is a document that describes a requirement and the proposed changes that |
| 24 | +will solve it. Specifically, the RFC will: |
| 25 | + |
| 26 | +* be formatted according to the RFC template |
| 27 | +* be submitted as a pull request to the community/rfcs directory |
| 28 | +* be subject to discussion and a review meeting prior to acceptance |
| 29 | + |
| 30 | +## RFC process |
| 31 | + |
| 32 | +Before submitting an RFC, it is a good idea to discuss your aims with project |
| 33 | +contributors and maintainers and get early feedback. Use the developer mailing |
| 34 | +list for the project concerned ( [email protected], or the list for the |
| 35 | +relevant SIG). After writing the RFC draft, get feedback from these |
| 36 | +experts before submitting it. |
| 37 | + |
| 38 | +1. Submit your RFC as a pull request to community/rfcs. |
| 39 | + |
| 40 | + Name your RFC file using the [template](https://github.com/tensorflow/community/blob/master/rfcs/yyyymmdd-rfc-template.md) `YYYYMMDD-descriptive-name.md`, where |
| 41 | + YYYYMMDD is the date of submission, and ‘descriptive-name’ relates to the |
| 42 | + title of your RFC. For instance, if your RFC is titled “Parallel Widgets API”, |
| 43 | + you might use the filename `20180531-parallel-widgets.md`. If you have images |
| 44 | + or other auxiliary files, create a directory of the form `YYYYMMDD-descriptive-name` |
| 45 | + in which to store those files. |
| 46 | + |
| 47 | +2. Recruit a sponsor from the maintainers of the project which your RFC concerns. |
| 48 | + Identify them in the PR, ideally before posting the PR. If no sponsor is found |
| 49 | + within a month of posting the PR, it will be closed. |
| 50 | + |
| 51 | +3. Email the developer mailing list with a brief description, and a link to the |
| 52 | + PR and a request for review. |
| 53 | + |
| 54 | +4. The sponsor will request a review committee meeting, no sooner than two weeks |
| 55 | + after the RFC PR is posted. If discussion is lively, wait until it has |
| 56 | + settled before going to review. The goal of the review meeting is to resolve |
| 57 | + minor issues; consensus should be reached on major issues beforehand. |
| 58 | + |
| 59 | +5. The meeting may approve the RFC, reject it, or require changes before it |
| 60 | + can be considered again. Approved RFCs will be merged into community/rfcs, and |
| 61 | + rejected RFCs will have their PRs closed. |
| 62 | + |
| 63 | +6. Implementations of a successful RFC should reference it in their |
| 64 | + documentation, and work with the sponsor to successfully land the code. |
| 65 | + |
| 66 | +While implementation code is not necessary to start the RFC process, its |
| 67 | +existence in full or part may help the design discussion. |
| 68 | + |
| 69 | +## Community members |
| 70 | + |
| 71 | +As the purpose of RFCs is to ensure the community is well represented and served |
| 72 | +by new changes to TensorFlow, it is the responsibility of community members to |
| 73 | +participate in reviewing RFCs where they have an interest in the outcome. |
| 74 | + |
| 75 | +Community members should: |
| 76 | + |
| 77 | +* provide feedback as soon as possible to allow adequate time for consideration |
| 78 | +* read RFCs thoroughly before providing feedback |
| 79 | +* be civil and constructive |
| 80 | + |
| 81 | +## Review committees |
| 82 | + |
| 83 | +The constitution of a review committee may change according to the particular |
| 84 | +governance style and leadership of each project. For core TensorFlow, the |
| 85 | +committee will exist of contributors to the TensorFlow project, who have |
| 86 | +expertise in the domain area concerned. |
| 87 | + |
| 88 | +Review committees must: |
| 89 | + |
| 90 | +* ensure that substantive items of public feedback have been accounted for |
| 91 | +* add their meeting notes as comments to the PR |
| 92 | +* provide reasons for their decisions |
| 93 | + |
| 94 | +If a review committee requires changes before acceptance, it is the |
| 95 | +responsibility of the sponsor to ensure these are made and seek subsequent |
| 96 | +approval from the committee members. |
| 97 | + |
| 98 | +## RFC sponsors |
| 99 | + |
| 100 | +A sponsor is a project maintainer responsible for ensuring the best possible |
| 101 | +outcome of the RFC process. In particular this includes: |
| 102 | + |
| 103 | +* advocating for the proposed design |
| 104 | +* guiding the RFC to adhere to existing design and style conventions |
| 105 | +* guiding the review committee to come to a productive consensus |
| 106 | +* if the RFC moves to implementation: |
| 107 | + * ensuring proposed implementation adheres to the design |
| 108 | + * liaison with appropriate parties to successfully land implementation |
| 109 | + |
| 110 | +## Keeping the bar high |
| 111 | + |
| 112 | +While we encourage and celebrate every contributor, the bar for RFC acceptance |
| 113 | +should be kept intentionally high. A design may be rejected or need significant |
| 114 | +revision at any one of these stages: |
| 115 | + |
| 116 | +* initial design conversations on the relevant mailing list |
| 117 | +* failure to recruit a sponsor |
| 118 | +* critical objections during the feedback phase |
| 119 | +* failure to achieve consensus during the design review |
| 120 | +* concerns raised during implementation (e.g., inability to achieve backwards |
| 121 | + compatibility, concerns about maintenance appearing once a partial implementation |
| 122 | + is available) |
| 123 | + |
| 124 | +If this process is functioning well, RFCs are expected to fail in the earlier, |
| 125 | +rather than later, stages. |
| 126 | + |
| 127 | +An approved RFC is no guarantee of a commitment to implement, and acceptance of |
| 128 | +a proposed RFC implementation is still subject to the usual code review |
| 129 | +process. |
| 130 | + |
| 131 | +## RFC Template |
| 132 | + |
| 133 | +Use the template [from |
| 134 | +GitHub](https://github.com/tensorflow/community/blob/master/rfcs/yyyymmdd-rfc-template.md), |
| 135 | +being sure to follow the naming conventions described above. |
0 commit comments