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(总部位于德克萨斯州奥斯汀市的 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 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 团队成员和更广泛社区的意见对这些想法进行优先排序。所有想法都将记录在一个维基页面上。任何人都可以提出想法。只有 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 和 Betty Moore 基金会,总计约 130 万美元,捐赠给伯克利数据科学研究所。2017 年至 2020 年期间完成的工作;PI Stéfan van der Walt。

  • Chan Zuckerberg 基金会向 NumFOCUS 提供的两笔赠款,总额为 335,000 美元。2020 年至 2021 年期间完成的工作;PI 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 赞助商