RFC 最佳做法

本文件提供作者和審查人員如何充分運用 RFC 程序的指南。

將 RFC 視為設計文件

RFC 程序是 Fuchsia 專案製定決策的方式。部分 RFC 包含決定在整個專案中採用部分政策的決定。舉例來說,RFC-0004 會指定 IEC 標記法應提供的儲存空間大小 (例如KiB,而非 KB)。專案接受該 RFC 後,就代表本專案決定遵守該政策。不過,這些政策設定的 RFC 相當罕見。

大多數的 RFC 基本上都是設計文件。一旦接受設計文件 RFC,意味著本專案決定以某種方式解決問題。我們接受的 RFC 是歷史文件,記錄了質疑設計的所有人都能放心使用。

專注於獲得認可

撰寫 RFC (或任何事項) 時,請自問:「為何我這麼做?」

假設您在撰寫 RFC 是因為想要變更某些內容,但您認為變更可能會影響專案的其他成員。繼續之前,您需要確保對方知道您正在採取的行動,且並不介意。可能受到變更影響的使用者就是利害關係人。當他們 +1 您的 RFC 並受到接受後,就會產生一份寫入記錄,表示對您的變更感到滿意。放心繼續下去!

請根據這個目標引導 RFC 的內容:

  • 將設計重點放在讓利害關係人認可的設計層面。舉例來說,利害關係人使用的介面比實作方式更重要。
  • 請列出設計的影響。如果利害關係人必須努力瞭解設計對他們的影響,審查速度就會變慢,而在實作過程中,對方很可能會跟你說:「這不是我同意的!」
  • 請清楚說明您的提案內容。舉例來說,您的 RFC 可能會包含設計「作用」的承諾,以及「可能」運作方式的說明範例。可以描述系統的「原樣」,以及實作完成後系統運作方式的要求,藉此提供背景資訊。方便相關人員輕鬆辨識。您不希望利害關係人看到您提出需求的建議。

附上右側的詳細資料

且不必指定設計的所有細節。事實上,太多細節可能會讓利害關係人更難瞭解設計的重要缺點。另一方面,如果您未提供「充足」的詳細資料,不同的讀者可能會對於 RFC 所代表的意義做出不同的結論。找出正確層級的細節是一項藝術。

您的 RFC 應包含對設計項目接受性造成重大影響的所有詳細資料,而且不會再有其他細節。如此一來,相關人員就能取得充足的詳細資料,方便相關人員為您的設計背書,方便日後讀者瞭解設計通過的原因。附帶細節可使 RFC 難以審查。

在審核期間,部分 RFC 會變得更詳細。這可能會令作者和利害關係人感到困擾。當利害關係人詢問 (或物件) 設計的部分時,您的直覺可能是加入更多詳細資料來說明或正當理由。在開始之前,請評估移除詳細資料是否較為適當。如果他們加註的位元並未對 RFC 有實質差異,您可以刪除這些位元,或讓討論變得更簡單、更抽象,藉此縮短冗長的討論內容。

為協助您判斷某些詳細資料是否會對設計造成實質影響,請考慮以下問題:

  • 如果變更這項詳細資料,有人是否會因為 +1 而從 +1 變更為 -1?
  • 如果這項詳細資料實作方式與寫入的內容不同,這樣可以嗎?您的利害關係人是否希望收到這項異動的相關通知?
  • 現在是否應該決定這項細節?請問是否應讓實作者及其程式碼審查人員撥打電話?

留意日後讀者的想法

利害關係人就是 RFC 的主要目標對象,但您不應該忘記後來的讀者在接受您的設計後嘗試瞭解其設計。以下提供一些提示,協助您讓更多目標對象存取您的 RFC:

  • 假設利害關係人第一次透過 RFC 瞭解您的設計。提供 (或連結至相關說明文件) 足夠的背景,將您的 RFC 內容放在情境中。
  • 假定利害關係人「只」透過 RFC 聆聽您的設計。您和利害關係人可能會透過電子郵件、即時通訊、會議或至少程式碼審查註解討論 RFC。日後讀者不會輕鬆存取這些對話,因此,請確認 RFC 的文字內容包含您從頻外得出的所有重要結論。
  • 使用固定連結。您的 RFC 將難以瞭解「背景資訊」連結是否大幅變更,或變成 404。如果可以,請連結至文件的特定修訂版本,以便日後讀者看到相同頁面。

不要使用 RFC 的說明文件

接受之後,RFC 會記錄相關人員對於您設計的功能感到滿意的事實。但不應做為功能本身的說明文件使用。

RFC 和說明文件的目標只是使用不同的目標:

  • 隨著系統變更,說明文件必須持續更新,但接受 RFC 後即無法變更 (除了次要修訂條款之外)。
  • RFC 會將 RFC 的合理性告知相關人員,說明設計為何聽起來較替代替代品,但對使用者而言可能沒有幫助。
  • 說明文件提供精確的程序範例,說明如何使用這項功能,這需要一定程度的細節對利害關係人毫無助益。

請勿連結至程式碼或說明文件中的 RFC,藉此說明功能的運作方式。請改為提供功能專屬的說明文件和連結。

有關文件放置位置的建議:

  • 使用詳細的文件註解,新增有關特定 API 或程式碼模組的說明文件。
  • fuchsia.git 中建立 //src/my_subsystem/docs/ 子目錄。在 fuchsia.git 中託管的文件可透過 Gitiles 轉譯,非常適合用來為子系統提供概念指南。
  • 如果對更廣大的 Fuchsia 社群有用,請將說明文件新增至 fuchsia.dev

另一方面,RFC 「可能」連結至說明文件。事實上,如果您的 RFC 包含大量背景資訊,請考慮將該背景移至說明文件並改為連結至說明文件!

更新這些最佳做法

如果您對最佳做法有任何建議 (或認為上述部分範例可能會使用更新功能),請與 eng-council@fuchsia.dev 聯絡,或傳送變更至 FEC!