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) 最枯燥/最令人痛苦、没有人喜欢做的工作,以及对代码库进行必要的结构性更改,这些更改太大了,无法由志愿者在合理的时间内完成。

除了开发工作之外,还有许多重要且可以增强项目或社区的任务、活动和项目——例如,用户调查、翻译、外展、对新人的专门指导、社区组织、网站改进和管理任务。

人员执行任务的时间也不是资金的唯一用途:可以用于现场开发者会议或冲刺活动、用于基准测试或开发工作的托管硬件,以及 CI 或其他软件服务的费用,这些都可以是良好的支出项目。

支付给谁#

  1. 在其他条件相同的情况下,优先考虑现有的维护者/贡献者。

  2. 在考虑团队外部人员时,请将其视为使项目更加多元化的机会。

  3. 在考虑支付某人时,请注意以下几点

    • 执行任务所需的技术或领域特定技能,

    • 沟通和自我管理技能,

    • 为开源项目做出贡献和与开源项目合作的经验。

在 NumPy 团队内部是否已经有一个明确的最佳候选人,还是我们需要寻找新人参与,这很可能取决于项目/任务。在做出任何决定之前,决策者(根据 NumPy 治理文件——目前是指导委员会)应考虑是否应公开招聘,以给予更广泛的人群申请机会。

公平补偿#

注意

即使本 NEP 整体被接受,本节关于公平补偿的内容也将被视为草稿。一旦我们应用了这里概述的方法至少 2-3 次并且对此感到满意,我们将删除此注释并将本节视为已接受

公平地支付报酬是一个棘手的问题,尤其是在分布式团队的情况下。因此,我们只提供一些指导。最终决定必须始终由负责此事的团体(根据当前的 NumPy 治理结构,这将是 NumPy 指导委员会)进行审议和批准。

关于远程员工薪酬的讨论往往被两种叙事所主导:“按当地市场价支付”和“同工同酬”。

我们认为两者都过于极端

  • “同工同酬”对生活在生活成本较高地区的人们来说不公平。例如,独栋公寓的平均租金差异可能很大(从每月几百美元到几千美元)。

  • “按当地市场价支付”固化了国家之间的现有不平等,并使得开发机器或国外度假等固定成本在市场价格较低的地区更难负担。

我们寻求在这两种极端情况之间找到一个折衷方案。

有用的参考点包括 GitLab 和 Buffer 等公司,它们对其薪酬政策透明([3], [4]),Google 暑期项目津贴([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 团队成员和更广泛社区的意见来确定优先级。所有想法都将记录在一个单独的维基页面上。任何人都可以提出想法。只有 NumPy 团队成员可以编辑维基页面。

每个列出的想法都必须满足以下要求

  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 万美元,提供给 Berkeley 数据科学研究所。工作时间为 2017-2020 年;首席研究员 Stéfan van der Walt。

  • 两笔来自 Chan Zuckerberg 基金会的赠款,总计 335,000 美元。工作时间为 2020-2021 年;首席研究员 Ralf Gommers(第一笔赠款)和 Melissa Mendonça(第二笔赠款)。

自 2012 年起,NumPy 一直是 NumFOCUS 的财政赞助项目。请注意,财政赞助并不意味着 NumPy 获得资金,而是指它可以根据非营利组织的保护伞接收资金。有关更多详情,请参阅NumFOCUS 项目支持

直到 2017 年,NumPy 网站才显示“捐赠”按钮,自 2019 年起,NumPy 仓库才有了 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 Sponsors