NEP 48 — NumPy 專案資金支出#

作者:

Ralf Gommers <ralf.gommers@gmail.com>

作者:

Inessa Pawson <inessa@albuscode.org>

作者:

Stefan van der Walt <stefanv@berkeley.edu>

狀態:

活動中

類型:

資訊性

建立於:

2021-02-07

決議:

摘要#

NumPy 專案在歷史上從未獲得顯著的無限制資金。然而,這種情況正開始改變。本 NEP 旨在透過制定一套關於資助什麼資助誰的原則,為 NumPy 專案無限制資金的支出提供指導。它也將觸及關於資金支出的決策如何制定、資金如何管理以及這些主題的透明度。

動機與範疇#

NumPy 是 NumFOCUS 的財政贊助專案,NumFOCUS 是一個總部位於德州奧斯汀的 501(c)(3) 非營利組織。因此,對於所有法律和會計事務,NumPy 專案都必須遵守美國非營利組織的規則和條例。所有非營利捐款都分為兩類:無限制資金,可用於適合該組織的任何合法目的;以及限制性資金,是為特定目的(例如,專案、教育計畫等)預留的資金。

關於 NumPy 資金的詳細時間軸,請參閱NumPy 資金 — 歷史與現況

自成立以來直到 2020 年,NumPy 專案僅支出約 10,000 美元的資金,這些資金並未限定用於特定計畫。此類型的專案收入一直以來都仰賴個人捐款,以及從 2019 年年中開始,來自 Tidelift 的定期每月捐款。到 2020 年底,Tidelift 的捐款增加到每月 3,000 美元,而且直接捐給專案的捐款和補助金也有可能增加。對於如何使用這些資金制定一套明確的原則,將有助於公平且有效地支出這些資金。此外,這也將更容易徵求捐款和其他貢獻。

本 NEP 的一個關鍵假設是,NumPy 仍然是一個主要由志工驅動的專案,並且專案資金不足以全職聘僱維護者。如果資金增加到不再符合此假設的程度,則應更新本 NEP。

本 NEP 的範疇包括

  • 專案資金支出原則:資助什麼,以及資助誰。

  • 描述 NumPy 的資金如何管理。

  • 描述支出資金的決策如何被提議和制定。

本 NEP 的範疇不包括

  • 針對特定專案或活動做出任何關於支出專案資金的決策。

  • 用於 NumPy 開發但未歸類於 NumPy 無限制資金的資金支出原則。這包括大多數補助金,這些補助金通常指定用於某些活動/交付項目,並且撥款給機構合作夥伴,而不是直接撥款給 NumPy 專案,以及資助特定功能的公司或機構。理由:作為一個專案,我們無法直接控制這項工作如何執行(至少在正式上是如此,直到問題或 PR 出現)。在某些情況下,我們甚至可能不知道這些貢獻是獲得資助的,還是由員工在工作時間完成的。(無論情況是否如此,都不應改變我們處理貢獻的方式)。然而,對於補助金而言,我們確實期望研究/專案負責人和獲得資助的團隊使其工作與 NumPy 的需求保持一致,並樂於接受來自其他 NumPy 維護者和貢獻者的回饋。

專案資金支出原則#

NumPy 很可能永遠是一個志工貢獻者遠多於受資助人員的專案。因此,讓那些受資助的人員以吸引更多志工並提升他們的參與體驗的方式運作至關重要。這個關鍵原則促成了以下更詳細的原則,說明資助什麼和資助誰。

資金支出的方法將是

  • 首先確定我們要資助什麼,

  • 然後尋找優秀的候選人,

  • 在確定之後,決定合理的報酬水平。

接下來的章節將詳細介紹這三個要點中的每一個。

資助什麼#

  1. 資助重要的否則不會完成的事情。理由:需要做的事情遠遠超出用於完成所有這些事情的資金。因此,仰賴感興趣的志工或外部贊助的工作來完成許多事情。

  2. 為永續性規劃。不要依賴資金永遠都在。

  3. 考量對 NumPy 維護者和貢獻者、其他專案的維護者、終端使用者以及其他利害關係人(如封裝者和教育工作者)的潛在正面效益。

  4. 廣泛思考。一個專案不僅僅是程式碼:網站、文件、社群建立、治理 — 這一切都很重要。

  5. 對於提議的資助工作,如果預期審查工作量很大,則應包含付費時間讓其他人審查您的工作 — 不要只是增加志工維護者的負擔。理由:我們希望資金支出的效果對每個人都是正面的,而不僅僅是對獲得報酬的人。這也是公平問題。

在考量開發工作時,原則 (1) 意味著應優先考慮 (a) 沒有人喜歡做的最枯燥/痛苦的任務,以及 (b) 對於程式碼庫的必要結構性變更,這些變更規模太大,無法在合理的時間內由志工完成。

在開發工作之外,還有許多重要的任務、活動和專案,可以增強專案或社群 — 例如,使用者調查、翻譯、外展、對新手的專門指導、社群組織、網站改進和行政任務。

人員執行任務的時間也不是資金可以使用的唯一用途:面對面開發者會議或衝刺會議的費用、用於基準測試或開發工作的託管硬體,以及 CI 或其他軟體服務都可能是支出資金的好選項。

資助誰#

  1. 在所有條件相同的情況下,優先考慮現有的維護者/貢獻者。

  2. 當在現有團隊之外尋找人選時,請將此視為讓專案更加多元化的機會。

  3. 在考量支付某人報酬時,請注意以下事項

    • 執行任務所需的必要技術或特定領域技能,

    • 溝通和自我管理技能,

    • 貢獻和參與開放原始碼專案的經驗。

這很可能取決於專案/任務,NumPy 團隊內部是否已經有明確的最佳候選人,或者我們是否尋找新的人員參與。在做出任何決定之前,決策者(根據 NumPy 治理文件 — 目前是指導委員會)應考慮是否應公告機會,讓更廣泛的人群有機會申請。

公平的報酬#

注意

即使整個 NEP 已被接受,關於公平報酬的本節仍將被視為草案。一旦我們至少應用此處概述的方法 2-3 次,並且我們對此感到滿意,我們將移除此註記並將本節視為已接受

公平地支付人們報酬是一個困難的議題,尤其是在涉及到分散式團隊時。因此,我們在此僅提供一些指導。最終決策始終必須由承擔此責任的群體(根據目前的 NumPy 治理結構,這將是 NumPy 指導委員會)考量和批准。

關於遠端員工報酬的討論往往由兩種說法主導:「支付當地市場價格」和「相同工作 — 相同報酬」。

我們認為這兩種說法都太過極端

  • 「相同工作 — 相同報酬」對於居住在生活成本較高地區的人們是不公平的。例如,單戶公寓的平均租金可能相差很大(從每月幾百美元到數千美元不等)。

  • 「支付當地市場價格」會將國家之間現有的不平等現象納入考量,並使固定成本項目(如開發機器或國外度假旅行)在市場價格較低的地區相對難以負擔。

我們尋求在這兩個極端之間找到一個中間點。

有用的參考點包括 GitLab 和 Buffer 等公司,它們對其薪酬政策保持透明([3][4])、Google Summer of Code 津貼([5])、其他以透明方式管理其預算的開放原始碼專案(例如,Open Collective 上的 Babel 和 Webpack([6][7])),以及標準薪資比較網站。

由於 NumPy 是一個非營利專案,我們也參考非營利部門關於薪酬政策和報酬水平的指南。我們的調查結果顯示,大多數較小的非營利組織傾向於支付中位數薪資/工資。我們認可這種方法的優點:申請候選人可能對開放原始碼有真正的興趣,而不僅僅是受到經濟誘因的驅使。

考量以上所有因素,我們將使用以下指南來決定報酬

  1. 目標是適當地支付人們報酬,達到適用於資深工程師或其他專業人士的預期水平。

  2. 建立 125,000 美元的報酬上限,即使對於來自最昂貴/競爭最激烈地區的居民也不得超過此上限([8])。

  3. 對於相同的工作和資歷,不同地區之間的薪資差異永遠不應超過 2 倍。例如,如果我們支付來自紐約的資深級開發人員 110,000 美元,那麼對於相同的工作,來自東南亞的資深級開發人員應至少獲得 55,000 美元。為了比較地區,我們將使用 Numbeo 生活成本計算器(或其同等工具)。

其他一些考量

  • 通常,有償工作是以有限的工作時數或固定期限提供的。在這些情況下,請考量相當於永久職位的薪酬待遇(例如,一個月的工作應最多以全年薪資 + 福利的 1/12 比例計算報酬)。

  • 在比較費率時,個人承包商的收入通常應比受僱者高出 20%,因為他們必須自行處理福利和會計事務。

  • 有些人可能會樂於接受針對特定交付項目的一次性付款(例如,「針對標籤 X 的所有未解決問題進行分類,報酬為 x,xxx 美元」)。與個人承包商相比,這應以較低的費率支付報酬。或者他們可能會基於其他原因提出較低的金額(例如,「我希望收到 x,xxx 美元來僱用清潔工或支付育兒費用,以騰出時間從事開放原始碼工作)。

  • 當透過某人的雇主資助其時間時,該雇主可能會希望根據其內部規則(例如,間接成本率)設定報酬水平。在這種情況下,可能需要稍微偏離本 NEP 中的指南,但應在合理範圍內。

  • 完全有可能,另一種策略(而不是支付人們在某些任務上花費的時間)可能會更有效。任何有助於專案和社群成長和改進的事情都值得考慮。

  • 透明度有所幫助。如果每個參與決策的人都願意與團隊的其他成員分享他們的報酬水平(或最好公開),那麼在公平性方面最不可能出現偏差。

我們強烈建議參與聘僱和報酬決策的個人仔細閱讀本 NEP 參考文獻章節的內容。它提供了關於此主題的許多有益建議。

定義可資助的活動和專案#

我們希望有一系列更廣泛的可資助想法,我們將根據 NumPy 團隊成員和更廣泛社群的意見優先考慮這些想法。所有想法都將記錄在單一 wiki 頁面上。任何人都可以提出想法。只有 NumPy 團隊的成員可以編輯 wiki 頁面。

每個列出的想法都必須符合以下要求

  1. 它必須有明確的範疇:其描述必須說明對專案的重要性,如果可能,請參考 NumPy 路線圖、要資助的項目或活動和交付項目,以及為什麼它應該是一項資助活動(請參閱資助什麼)。

  2. 它必須包含以下中繼資料:標題、成本、持續時間或工作量估計,以及(如果已知)執行或協調的團隊成員姓名。

  3. 它必須具有指定的優先順序(低、中或高)。此討論可以源自 NumPy 社群會議或郵件列表。但是,它必須在郵件列表上最終確定,以便讓所有人都能權衡利弊。

如果提議的想法被分配了高優先順序,則關於為其分配資金的決策將在私有的 NumPy 指導委員會郵件列表上做出。理由:這些通常會涉及到關於個人的決策,而這些決策通常很難公開進行。這是目前運作良好的慣例。

有時,臨時做出單一的資金決策可能是可行的(例如,「這是一個絕佳的機會,加上現在有合適的人選可以執行它」)。但是,這種決策方法應謹慎使用。

資金支出/儲蓄策略#

NumPy 的個人、企業和機構捐助者期望資金將用於專案和社群的利益。因此,我們應該在可用資金進來時,經過深思熟慮、策略性且公平地支出。為了應對緊急情況,我們應該保留 10,000 美元至 15,000 美元的儲備金,這筆儲備金可以用於支付例如一年的 CI 和託管服務、1-2 個月的全職維護工作,或聘請顧問以滿足特定需求。

專案資金如何管理#

我們將首先總結目前資金管理的方式,然後討論如何使此流程更有效率和透明。

目前,專案資金由 NumFOCUS 保管在專用帳戶中。NumFOCUS 有一個小型會計團隊,每月製作一套試算表形式的帳戶概覽。這些試算表會存放在共用雲端硬碟中,通常會延遲約一個月(例如,2 月份的餘額和交易會在 3 月底提供),少數 NumPy 團隊成員可以在其中存取這些試算表。費用報銷和發票透過 NumFOCUS 網站提交。然後這些費用會顯示在另一個試算表中,NumPy 團隊成員必須在付款前審查並批准每一筆費用。根據 NumPy 章程,由五人組成的 NumFOCUS 財務小組委員會每六個月召開一次會議,審查所有與專案相關的交易。(實際上,交易非常少,以至於我們跳過了一些此類會議。)

現有的流程既耗時又容易出錯。更透明和自動化是必要的。

專案資金和決策的透明度#

討論:我們是否希望完全透明化,透過發布我們的帳戶、對 NumPy 團隊中的每個人透明化,還是其他層級的透明化?

Ralf:我個人希望它完全透明化,就像透過 Open Collective 一樣,以便整個社群可以隨時看到目前的餘額、收入和支出的費用。轉移到 Open Collective 並非易事,但是如果我們願意,我們可以先在其他地方發布資料。注意:今年的 Google Season of Docs 要求擁有 Open Collective 帳戶,因此這很可能會很快發生。

Stefan/Inessa:至少摘要概覽應該完全公開,並且所有交易都應該對指導委員會可見。所有交易的完全透明化可能很好,但並非必要。

此處的選項可能取決於會計系統和所需的工作量。

NumPy 資金 — 歷史與現況#

NumPy 專案在 2017 年獲得了第一筆主要資金。關於 NumPy(和 SciPy)早期歷史的概述,包括一些機構贊助其員工或承包商的時間來從事 NumPy 工作,請參閱[1][2]。迄今為止,NumPy 已收到四筆補助金

  • 分別來自 Alfred P. Sloan 基金會和 Gordon and Betty Moore 基金會的兩筆補助金,總計約 130 萬美元,撥款給柏克萊資料科學研究所。工作執行期間為 2017-2020 年;PI:Stéfan van der Walt。

  • 來自 Chan Zuckerberg 基金會給 NumFOCUS 的兩筆補助金,總計 33.5 萬美元。工作執行期間為 2020-2021 年;PI:Ralf Gommers(第一筆補助金)和 Melissa Mendonça(第二筆補助金)。

自 2012 年起,NumPy 一直是 NumFOCUS 的財政贊助專案。請注意,財政贊助並不意味著 NumPy 獲得資金,而是指它可以在非營利組織的保護傘下接收資金。有關更多詳細資訊,請參閱NumFOCUS 專案支援

NumPy 網站直到 2017 年才顯示「捐款」按鈕,而 NumPy 儲存庫直到 2019 年才設有 GitHub Sponsors 按鈕。在此之前,可以在 NumFOCUS 網站上向 NumPy 捐款。2017-2020 年間個人對 NumPy 的捐款總額約為 6,100 美元。

從 2019 年 5 月起,Tidelift 作為其「受管理開放原始碼」商業模式的一部分,在財務上支持 NumPy。從 2019 年 5 月到 2020 年 7 月,每月為 1,000 美元,之後開始穩步增長,達到每月約 3,000 美元(截至 2021 年 2 月)。

最後,還有其他附帶的專案收入,例如,來自 Packt Publishing 的一些書籍版稅、來自 Google 的 GSoC 指導費用,以及透過 NumFOCUS 網路商店的商品銷售收入。所有這些都是小額(二位數或三位數)金額。

這使得專案收入總額(不包括已經有支出目標的收入)達到約 35,000 美元。其中大部分是最近來自 Tidelift 的收入。在過去 1.5 年中,我們花費了約 10,000 美元用於新的 NumPy 網站和 Sphinx 主題的工作。這些支出決策是由 NumPy 指導委員會做出的,並在郵件列表中宣布。

截至撰寫本文時,剩餘可用資金約為 25,000 美元,並且該金額目前以每月約 3,000 美元的速度增長。

替代方案#

替代支出策略:不持有現金儲備。理由是 NumPy 夠重要,在真正的緊急情況下,可能會有人或實體跳出來提供幫助。然而,這並非對專案財務管理負責任的方式。因此,我們決定反對這種做法。

討論#

參考文獻與註腳#

GitHub 贊助 (GitHub Sponsors)