最近參與一個從零開始的開源專案,開完幾次會議後正式分組準備進入第一階段的功能實作,由於之前對RFC流程很有興趣,就在Discord群裡推廣了下RFC流程。
TL;DR: 在沒有實際產品前的開發階段不適合使用RFC,比較適合在有產品的開源專案裡使用,以及大家有共識的work flow才是好的work flow。
RFC (Request for Comments)又稱意見請求、意見徵求,很多開源專案都能看到有自己的RFC work flow
Rust
Bytecodealliance
Reactjs
VueJS
Ethereum
在開源專案裡執行RFC driven development的好處是任何改動可以透明的被討論與取得共識,最後在根據定義好的RFC文件去實作改動。
自己也是第一次實作RFC流程,參考了幾篇流程文章後,在Discord中與大家分享(推坑 ,團隊都對RFC流程很有興趣但不知道該怎麼執行,與有在執行RFC的朋友討論跟其他公司的流程分享,最後起草了一份template讓大家來討論。
RFC driven development
Gatsby RFC process
The "RFC" (request for comments) process is intended to provide a consistent and controlled path for changes to product (such as new features) so that all member can be confident about the direction of the project.
Many changes, including bug fixes and documentation improvements can be implemented and reviewed via the normal GitHub pull request workflow.
Some changes though are "substantial", and we ask that these be put through a bit of a design process and produce a consensus among the product community.
---
name: RFC
about: Suggest an idea for this project
title: "[RFC]"
labels: enhancement
assignees: ''
---
# RFC: [Your Topic Title]
## Summary
A short, concise description of the feature or change proposed. This should be used to provide a high-level understanding of the proposal.
## Motivation
Explain the context and why you're making this proposal. What is the problem that needs solving? What use cases does it support? What is the expected outcome?
## Proposal Sketch / Detailed Design
For early-stage RFCs, provide at least a sketch of how to address the problem to help center the discussion on a concrete starting point.
For more detailed RFCs, this section should contain enough information for others to understand and evaluate the proposal. It should cover the key points and design considerations, including a discussion of the architecture, an explanation of design details, and a reasoning behind your choices.
### Components Diagram
Provide a components diagram if possible.
### Sequence Diagram
Provide a sequence diagram if possible.
### Class Diagram
Provide a class diagram if it adds value and understanding to the proposal.
### OpenAPI Spec
Include an OpenAPI specification if the proposal involves an API.
## Rationale and Alternatives
Discuss the reasons for choosing the proposed design along with the trade-offs it involves. Moreover, describe the alternatives that have been considered and why they were discarded.
## Open Questions
Discuss aspects of the design which are still unresolved or require further discussion. It can be divided into two sections, questions that you hope to answer before finalizing the RFC and questions that would be resolved during the implementation phase.
## Drawbacks
What are the potential downsides of this proposal? What are the implications for users or existing systems?
## Adoption Strategy
If the proposal gets accepted, describe the path for adoption in your current system. What is the integration strategy?
## Action Plans
List the key actions that need to be completed once the RFC is approved. Also include dates for discussions, reviews, and approvals if possible.
- [ ] Design discussion at YYYY-MM-DD
- [ ] RFC review at YYYY-MM-DD
- [ ] RFC approval at YYYY-MM-DD
---
name: RFC
about: Suggest an idea for this project
title: "[RFC]"
labels: enhancement
assignees: ''
---
# RFC Title
## Summary
Provide a brief single-paragraph explanation of the change.
## Motivation
Describe the motivation behind this RFC. What is the current state, and why is this change beneficial? What use cases does it support? What is the expected outcome?
## Proposal Sketch
At this stage, the proposal does not need to be fully formed. A sketch is enough to center the discussion. Detail the proposed solution at a high level. If any new concepts or terms are introduced, define them here.
## Open Questions
What parts of the design are still unclear or need resolving? What do you hope to resolve through discussion with the community before progressing this RFC to a full proposal?
## Trade-offs
What are the potential trade-offs or impacts of this proposal? How does it affect other areas of the system, if any?
## Unresolved Questions
What parts of the proposal are TBD (to be decided)?
Discussion to RFC: Start with an open discussion thread in the repo's Discussion section. After reaching a consensus, the author of the thread drafts an RFC. Once the RFC is ready, development can commence, ending with a Pull Request.
Draft RFC to Pull Request: The proposer initiates the process by creating a draft RFC and submitting it as a draft Pull Request. After discussions and refinements, the Pull Request is formally reviewed and then either merged or closed.
Combined Approach: Begin with preliminary discussions in the Discussion section. Once the idea is somewhat clear and specific, move to drafting an RFC and submitting it as a Pull Request for in-depth discussions and formal review. This combines the open nature of discussions with the structured format of the RFC and Pull Request process.
剛前面有提到,我參與的是從零開始設計討論的開源專案,我們一開始的開會模式是使用FigmaJam做產品發想與討論,而後面則是使用google doc紀錄了需要開發的功能,由於產品屬於準備進入實作時期,大家討論的點是在spec還未正式定案加上已有google doc版本的spec和UIUX對於github的操作流程不一定熟悉等的因素,我們做了一次投票,最終大家決定先以google doc + FigmaJam為主要開發文件,主要是開發初期要做好RFC文件對於大家都有難度,也會使產品的開發週期變得更長;最終大家有共識的work flow才是最適合的work flow。