以下四項文化原則有助於 Fuchsia FIDL 團隊保持專注。如果有多個看似合適的路徑,這些值有助於選擇適當的行動方案。這些文化原則旨在引導我們處理工作、專案、呈現團隊的方式,並協助定義我們的合作方式。
檢查設計素材庫存
我們很重視將「已設計但尚未實作」的廣告空間維持在低量。我們將想法編碼,並避免在太遙遠的未來發想。
我們希望盡量減少已接受但尚未實作的 RFC,或避免參與我們知道在合理時間內 (即我們的時間範圍) 不會實現的計畫。隨著時間推移,「合理時間」的長度從幾個月、半年,到現在約 1 到 2 年。這段時間的擴展受到各種因素1影響。我們也發現,未實作的設計會快速過時,而最初制定的需求和架構,很少能適用於日後的實際情況。
我們致力於避免「目前已淘汰,未來無法運作」的陷阱,因此會持續快速建構未來,積極將客戶群遷移至這些新功能,並大致維持低遷移次數。
此外,我們也會盡量提供具體答案,說明如何使用目前的工具解決問題,而不是以「[在此插入過時的設計文件] 將修正此問題」等未來功能為藉口,迴避問題。當我們知道更好的工具即將推出時,卻仍使用現有工具提供建議,這令人感到痛苦,也提醒我們應盡快在使用者附近的程式碼中提供這項價值 (而不是在設計文件中,因為設計文件只會產生潛在影響)。
單一聲音
代表 Fuchsia FIDL 團隊立場時,我們意見一致。我們致力於向同儕傳達清楚一致的訊息。我們都應該一致回答問題、說明藍圖、描述技術方向,並就優先順序達成共識等。
舉例來說,在 fidl-dev@fuchsia.dev 提供協助時,所有團隊成員都應提供相同的建議。如果團隊意見不合,我們有責任解決問題,以便向使用者呈現共同的觀點。
舉例來說,代表 FIDL 團隊撰寫 RFC 時,我們隱含地表示團隊全體都支持設計的大方向 (雖然詳細資料通常會在 CL 上討論)。這表示 RFC 進入「疊代」步驟前,團隊已達成某種程度的共識,可能是透過 Google 文件等其他媒介進行預先作業,而非 Gerrit CL。
如果內部無法達成共識,就會將我們的猶豫或疑慮傳達給使用者,但使用者對我們所做的技術取捨瞭解不深。有時,這表示我們必須承認「我們不知道」或「我們還沒有最佳做法」。在這種情況下,我們應說明各選項的優缺點,並與使用者合作,引導他們選擇最適合的行動方案。
行動偏誤
我們以行動為先,並重視工作和交付內容。我們會在意的地方發表評論、引導和批評,以實際行動證明自己所言不假。
在我們所做的每件事中,思考正向結果是什麼,以及我們可以鋪設哪些墊腳石來向前邁進,都很有幫助。舉例來說,如果我們在團隊同步期間進行有趣的設計對話,可以快速以幾個要點總結討論內容。下次再開啟對話時,系統就會根據這些資訊,從更穩固的基礎重新開啟對話。或者,如果我們在 1 對 1 討論中發現某些程式碼庫存在技術債,並抱怨現況,我們可以選擇將此問題具體化,即使只是讓大家意識到問題,並命名問題和期望的最終狀態。
從小規模著手2
我們分階段實現宏大願景、細分工作,並從小型概念驗證開始。我們樂於採取暫時的捷徑,並專注於維持長期目標的動能。
這包括安排優先順序、將工作細分,以及逐步改善,朝理想目標邁進。舉例來說,我們有時會先解決使用者遇到的問題,再處理架構上的落差。
舉例來說,導入 Dart FIDL JSON 範本時發生問題,因為這項範本採用了謹慎的組裝方式 (確保我們不會呈現任何控制代碼,類似於視覺檢視),且一開始就受到負面評價。這項 Dart FIDL JSON 功能利用的架構缺口,直到 18 個月後才由 RFC-0057:預設為無控制代碼封閉。
另一個例子是程式碼大小分析 (請參閱 76 的 PS1)。我們決定先採用不完美的解決方案,取得一些資料。然後逐步疊代及改良這項解決方案。重點在於,我們在改善評估指標的同時,也對 FIDL 擁有的程式碼進行具體變更,以縮減二進位大小。因此,我們投入了足夠的資金,產生「ideas list」。我們執行了該清單,然後沖洗,並重複這個過程。經過一季的開發,這項工具的準確度大幅提升,報表功能也完全符合具體用途。這項工具隨後經過一般化,現在是 Fuchsia 縮減大小工作的重要一環。
第三個例子是使用 FIDL 語言描述 Zircon API。這項功能最初是從非常粗略的 FIDL 檔案開始,有些甚至無法編譯。我們打造了全新的後端 (kazoo),並陸續新增對各種目標的支援。時至今日,FIDL 檔案仍依賴各種變通方法、實驗功能等。但我們對這項工作的長期發展方向很有信心,並謹慎避免設計債務,以免 FIDL 陷入困境。
一端是純粹的研究,另一端則是解決眼前的問題,完全不考慮對未來計畫的影響。我們應瞭解自己處於這個連續體的哪個位置,並積極調整,確保我們兼顧前瞻性與效率。在可接受的捷徑與可能造成嚴重後果的捷徑之間取得平衡,是工程師的專業技能之一。熟能生巧。