本文件提供指南,說明作者和審查者如何善用 RFC 程序。
將 RFC 視為設計文件
RFC 程序是 Fuchsia 專案做出決策的方式。部分 RFC 包含在專案中採用某些政策的決策。舉例來說,RFC-0004 規定儲存空間大小應以 IEC 符號表示 (例如 KiB,而不是 KB)。當 RFC 獲得核准時,代表我們這個專案決定遵循該政策。不過,這類政策設定 RFC 相對較少。
大多數的 RFC 基本上都是設計文件。設計文件 RFC 獲得核准,代表我們決定以特定方式解決問題。已接受的 RFC 是一份歷來文獻,記錄了所有與該設計相關的利益相關者都同意繼續推動該設計的事實。
著重於取得支持
撰寫 RFC (或任何內容) 時,請問自己:「為什麼要撰寫這份文件?」
您之所以撰寫 RFC,可能是因為想變更某些項目,但您認為變更可能會對專案的其他成員造成影響。在繼續進行之前,請先確認對方知道你打算做什麼,且不介意你這麼做。這些可能受到變更影響的使用者就是您的利害關係人。當他們對你的 RFC 按讚並接受後,你就會有書面記錄,證明他們對你的變更感到滿意。放心進行!
讓這個目標引導 RFC 的內容:
- 強調設計中需要利益相關者支持的部分。舉例來說,利益相關者使用的介面比實作更重要。
- 說明設計的影響。如果利害關係人必須費心瞭解設計對他們的影響,審查作業就會變得緩慢,而且在導入期間,他們更有可能向您表示:「這不是我同意的內容!」
- 清楚說明您要提出的內容。舉例來說,RFC 可能會承諾設計會如何運作,並提供示例說明其可能的運作方式。說明系統「現況」和實作完成後系統「將會」的功能需求,可能會提供背景資訊。讓利害關係人輕鬆分辨兩者差異。您不希望利益相關者看到您想提供規範的建議。
提供正確詳細資料
您不需要在 RFC 中指定設計的每個細節。事實上,過多的細節會讓利害關係人更難瞭解設計的必要權衡。另一方面,如果您未提供足夠的詳細資訊,不同讀者可能會對 RFC 的含意做出不同的結論。找到適當的細節程度是一門藝術。
RFC 應包含所有對設計可接受度有重大影響的詳細資料,不應包含其他內容。這項資訊的詳細程度剛好,可讓利害關係人核准您的設計,也能讓日後的讀者瞭解核准原因。不相關的詳細資料只會讓 RFC 更難審查。
有些 RFC 在審查期間會變得越來越詳細。這對作者和利害關係人來說都很令人沮喪。當利害關係人對設計的某些部分提出問題 (或提出異議) 時,您可能會本能地想加入更多詳細資料,以便說明或說明理由。請先考量是否應移除詳細資料。如果他們所提及的部分對 RFC 沒有實質差異,您可以刪除該部分或將其變得更一般化和抽象化,以便縮短討論時間。
如要判斷某些細節是否會對設計產生重大影響,請考慮以下問題:
- 如果你變更了這個詳細資料,有人會因為這個原因,將投票結果從 +1 改為 -1 嗎?
- 如果這個詳細資料的實作方式與說明內容不同,可以嗎?您的利害關係人是否想知道這項異動?
- 您是否需要現在決定這項細節?讓實作人員和他們的程式碼審查人員做出決定會比較好嗎?
考量日後的讀者
利益相關者是 RFC 的主要讀者,但您不應忘記,日後閱讀者在嘗試瞭解已接受的設計時,也需要考量這點。以下提供幾個訣竅,協助您讓 RFC 觸及更廣大的觀眾:
- 假設利益相關者是透過 RFC 首次得知您的設計。提供足夠的背景資訊 (或連結至說明文件),讓 RFC 能融入上下文。
- 假設利害關係人「只」透過 RFC 得知您的設計。您和利益相關者可能會透過電子郵件、即時通訊、會議或至少程式碼審查留言來討論 RFC。日後的讀者無法輕易存取這些對話,因此請務必在 RFC 的文字中納入您在非正式管道中得出的任何重要結論。
- 使用穩定的連結。如果「背景資訊」連結發生重大變更或變成 404,RFC 就會變得難以理解。請盡可能連結至文件的特定修訂版本,讓日後的讀者看到與您相同的頁面。
請勿將 RFC 做為說明文件
一旦接受,RFC 就會記錄利害關係人對您設計的功能感到滿意。不過,不應將其用於功能本身的說明文件。
RFC 和說明文件的目標不同:
- 隨著系統變更,說明文件必須不斷更新,但 RFC 一旦接受後,就不得變更 (除了小幅修訂)。
- RFC 會向利害關係人說明設計為何合理,且比其他替代方案更優,但這可能對使用者不太有幫助。
- 說明文件會提供精確的程序範例,說明如何使用這項功能,但這需要一定的細節,對利害關係人不太有幫助。
請勿在程式碼或說明文件中連結 RFC,以便說明功能的運作方式。請改為為該功能提供專屬的說明文件和連結。
以下提供一些建議,說明這類文件的放置位置:
- 使用詳細的文件註解,新增特定 API 或程式碼模組的說明文件。
- 在
fuchsia.git
中建立//src/my_subsystem/docs/
子目錄。Gitiles 可轉譯fuchsia.git
中代管的說明文件,非常適合為子系統提供概念指南。 - 如果您的文件對更廣泛的 Fuchsia 社群有用,請將文件新增至 fuchsia.dev。
另一方面,RFC 可能會連結至說明文件。事實上,如果 RFC 包含大量背景資訊,建議您將該背景資訊移至說明文件,並連結至該文件!
更新這些最佳做法
如果您有最佳做法的建議 (或認為上述某些最佳做法需要更新),請與 eng-council@fuchsia.dev 聯絡,或將變更內容傳送至 FEC!