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 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 拥有一支小型会计团队,该团队每月生成一份账户概述,以电子表格的形式呈现。这些电子表格存放在共享驱动器中,通常会有大约一个月的延迟(例如,二月份的余额和交易在三月底可用),一些 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 美元,之后稳步增长,到 2021 年 2 月,每月约为 3,000 美元。

最后,还有一些其他偶然的项目收入,例如,Packt Publishing 的一些图书版税、Google 的 GSoC 导师费和通过 NumFOCUS 网店销售的商品收入。所有这些金额都很小(两位数或三位数)。

这使没有明确支出目标的项目总收入达到约 35,000 美元。其中大部分是最近来自 Tidelift 的收入。在过去 1.5 年中,我们大约花费了 10,000 美元用于新 NumPy 网站和 Sphinx 主题的工作。这些支出决定由 NumPy 指导委员会做出,并在邮件列表中公布。

截至撰写本文时,尚有约 25,000 美元的可用资金,并且该金额目前以每月约 3,000 美元的速度增长。

替代方案#

替代支出策略:不保留现金储备。理由是 NumPy 非常重要,在真正紧急的情况下,某个人或某个实体很可能会出手相助。但这并不是对项目进行负责任的财务管理。因此,我们决定放弃这一策略。

讨论#

参考文献和脚注#

GitHub Sponsors