
在我們 上次關於支付貢獻者的更新 中,我們注意到團隊所面臨的一些成功和挑戰。當時,我們仍在嘗試找出 ESLint 的永續發展模式。有錢花是一回事,但知道如何最好地利用這筆錢又是另一回事。由於我們沒有足夠的錢來支付任何人的全職薪資,我們嘗試讓一位維護者擔任兼職,但這行不通。在該實驗之後,我們決定重新組合並重新評估,最終決定對團隊成員採用按小時付費制度。
一旦我們確定了按小時付費制度,這也讓我們了解了每個月人們在專案上花費的時間。反過來,這也顯示了我們每個月實際需要多少錢才能繼續維護 ESLint。由於這些資訊,我們制定了一個我們非常滿意的系統。
指導原則
在解釋 ESLint 現在如何使用其收取的資金之前,先退一步了解此方法所依據的指導原則會有所幫助。每個專案對於他們為何募款以及如何使用這些款項都有不同的目標。對於許多專案來說,目標是讓維護者能夠全職投入專案。如果維護者實際上想全職投入專案,這是一個值得稱讚的目標。這是一種狹隘的資金分配方式,因為大部分或全部的資金都流向了一個人或少數人。
在 ESLint 上,我們發現沒有任何團隊成員對全職投入專案感興趣。因此我們思考:如果我們朝完全相反的方向發展會怎麼樣?假設我們知道人們只會兼職工作,而且可能只是在他們的空閒時間工作,我們如何才能盡可能廣泛地分配資金,以產生最大的正面影響?
當我們問自己這個問題時,我們意識到我們正在圍繞一個共同的主題打轉:任何有益於 ESLint 生態系統的事物都值得在財務上支持。最先且最明顯有益於生態系統的事情是有人維護 ESLint,因此我們顯然需要確保人們因花時間在專案上工作而獲得公平的報酬。但還有什麼有益於生態系統呢?嗯,ESLint 是建立在許多依賴項之上的,我們希望支持這些專案,那麼如果我們將部分資金捐贈給這些專案呢?還有各種各樣的插件、解析器和擴充功能有助於推動 ESLint 的使用,那麼如果我們也開始贊助其中一些專案呢?而且我們也從外部貢獻者那裡獲得了許多貢獻……如果我們支付他們報酬呢?
因此,透過圍繞任何有益於 ESLint 生態系統的事物都值得資助的想法,我們找到了更廣泛地分配我們收集到的資金的方法,並且我們很高興分享成果。
我們現在如何使用我們的資金
一般來說,我們定期將資金花在以下事項上。
按小時支付團隊成員薪資
每個月,所有 ESLint 團隊成員都可以提交一份發票,註明他們在專案上工作的時數。他們在專案上做的任何事情都算數,無論是編寫程式碼、編寫文件、分類問題、參與我們的 Discord 伺服器、代表 ESLint 參加會議、為我們的上游依賴項做出貢獻等等。對開放原始碼專案的所有貢獻都是有價值的,我們認為為團隊成員在專案上花費的任何時間提供補償是正確的做法。
目前,技術指導委員會 (TSC) 成員和審閱者的時薪為 80 美元/小時;提交者的時薪為 50 美元/小時。
貢獻者獎金池
我們苦苦掙扎的事情之一是如何公平地支付外部貢獻者在 ESLint 上的工作。我們認為標準的時薪沒有多大意義,因為 1) 人們可能會在不知道要提前追蹤他們的工作時數的情況下做出貢獻,以及 2) 信任你不認識的人準確報告他們花費的工作時數是一個太容易被濫用的系統。儘管如此,我們仍然覺得我們只支付團隊成員的貢獻而不支付外部貢獻是不公平的,因此我們創建了貢獻者獎金池。
每個月,我們撥出 1,000 美元專門用於獎勵對 ESLint 做出任何貢獻的外部貢獻者。TSC 在每個月底審查外部貢獻,並向每位對 ESLint 做出非微不足道貢獻的外部貢獻者頒發至少 100 美元。再次強調,這些貢獻不僅限於編碼,還可以是任何對專案產生正面影響的事情。貢獻者無需提前申請或徵求許可;如果您做出重大貢獻,您將收到 TSC 的電子郵件,告知您如何領取付款。
在 2021 年,我們向外部貢獻者頒發了超過 6,000 美元,我們期待在 2022 年頒發更多。這裡的重點是:如果您對 ESLint 做出任何非微不足道的貢獻,您將獲得報酬。
支持我們的依賴項
正如我們在 2020 年宣布 的那樣,我們積極尋找並捐款給我們的依賴項。一般來說,任何我們直接依賴且擁有 Open Collective 帳戶的專案都將被考慮接受來自 ESLint 的捐款。我們目前每月向五個依賴項捐款 150 美元
- Ajv 是一個 JSON schema 驗證器,ESLint 使用它來驗證配置。
- Eleventy 是一個基於 Node.js 的靜態網站產生器,我們使用它來建立 eslint.org。
- Sindre Sorhus 是一位多產的開放原始碼開發人員,ESLint 使用了他的幾個模組,包括
chalk
、globals
、import-fresh
、strip-ansi
和strip-json-comments
。 - debug 是一個小型工具,當您使用
--debug
標誌時,ESLint 會使用它來輸出偵錯訊息。 - lint-staged 是一個簡單的 precommit hook 管理器,可以輕鬆地在您的開發流程中設定 linting。
我們認為,對於收到大量捐款的開放原始碼專案來說,照顧好他們的依賴項非常重要。畢竟,如果沒有這些依賴項,您的專案就不可能存在,那麼他們就值得您的支持。
您始終可以在我們的 Open Collective 頁面 上查看 ESLint 正在支持哪些專案。
支持社群
一旦我們開始支持我們的上游依賴項,我們就想,下游依賴項呢?有很多與 ESLint 相關的專案豐富了 ESLint 生態系統,無論是一組不同的規則、自訂解析器,還是任何使 ESLint 更好用的東西。我們目前每月向這些專案捐款 150 美元
- typescript-eslint 是一個使 ESLint 能夠與 TypeScript 一起運作的插件。
- eslint-plugin-import 是一個幫助您管理模組匯入的插件。
- eslint-plugin-jsx-a11y 是一個幫助您確保您的 JSX 程式碼易於存取的插件。
展望未來,我們希望繼續支持像這樣的社群專案。ESLint 的優勢在於您建立的生態系統,我們希望盡可能多地支持該生態系統。
大型專案
我們決定花錢的最後一種方式是用在我們戲稱為「大型專案」的事情上。這些專案需要大量的時間和精力,並且團隊沒有時間、興趣或專業知識來獨自完成。每個專案都有一個積壓的任務清單,這些任務似乎太大了,永遠無法完成,我們意識到我們可以透過聘請專業人士來完成工作,開始完成該清單。
我們的大型專案中的第一個是重新設計 ESLint 網站的雄心勃勃的專案。我們多年來一直想重新設計我們的網站,並至少嘗試過三次以開放原始碼的精神來完成它,透過志願者和共識設計。每次這些努力都失敗了,因此我們決定是時候聘請一些人來幫助我們了。
專案的整個範圍相當大,包括
- 品牌設計,包括標誌更新
- 新的網站設計,更詳細地說明 ESLint 是什麼以及人們如何使用它
- 將文件分成其自己的網站,以便於瀏覽
- 將示範分成其自己的單頁應用程式,以使其更易於維護和部署
- 從頭開始重寫和更新我們的文件
- 將我們的文件翻譯成不同的語言
到目前為止,我們已經完成了步驟 1,並且即將完成步驟 2。為此,我們聘請了
- JellyPepper 負責品牌更新和網站的視覺設計。
- Gavin Barnett 設計我們新的部落格圖片。
- Sara Soueidan 實作新的網站、文件網站和示範骨架。
- Cassie Evans 實作自訂首頁動畫。
這項工作的總成本約為 46,000 美元,我們對一切進展順利感到非常興奮。這是一個完美的例子,說明聘請專業人士來完成工作如何讓我們能夠更快地行動,並且(很快!)改善所有 ESLint 使用者的網站體驗。
總結
我們花了一段時間才弄清楚使用我們的贊助資金的正確方法,但現在我們已經弄清楚了,我們認為我們找到了維持 ESLint 未來發展的最佳方法。確保每個人都因非微不足道的貢獻而獲得報酬是我們從一開始就有的目標,我們很高興我們終於找到了一種實現這一目標的方法。
此外,轉向一種模式,讓我們與我們的依賴項和其他生態系統專案分享部分資金,感覺更符合開放原始碼的精神。我們是一個相互關聯的生態系統,專案在其中混合和重複使用其他專案,以創建更有趣的專案。正如我們會考慮為幫助我們的專案貢獻程式碼一樣,我們也需要考慮向這些專案捐款。ESLint 團隊對我們收到的資金感到感激,並對我們的依賴項同樣感激,沒有這些依賴項,ESLint 就不可能存在。我們希望這種模式也能推廣到其他開放原始碼專案。
最後,我們打算繼續聘請專業人士來處理大型專案。運作開放原始碼專案有很多不同的方面,期望志願者處理所有這些方面是不現實的。我們在網站專案上取得了很好的經驗(該專案應在未來幾個月內完成),我們將尋找其他方法來為 ESLint 社群創造更多價值。