
在我们关于支付贡献者的上一次更新中,我们记录了一些团队所取得的成功和遇到的挑战。那时候,我们还在努力摸索 ESLint 的可持续发展模式。有钱可花是一回事,知道如何最好地使用这些钱又是另一回事。由于我们没有足够的资金支付任何人全职工资,我们尝试让一位维护者兼职,但没有成功。在那次尝试之后,我们决定重新组织和评估,最终决定对团队成员采用按小时支付的系统。
🌐 In our last update on paying contributors, we noted some of the successes and challenges we had as a team. At that time, we were still trying to figure out ESLint’s model for sustainability. Having money to spend is one thing but knowing how to best use that money is another. Because we didn’t have enough money to pay anyone full time, we tried one maintainer at part time, and that didn’t work. After that experiment, we decided to regroup and reevaluate, ultimately deciding to use a per-hour payment system for team members.
一旦我们采用了按小时计费的系统,这也让我们了解到每个月人们在项目上花费了多少小时。反过来,这向我们显示了每个月我们实际上需要多少钱来继续维护 ESLint。基于这些信息,我们已经形成了一个让我们非常满意的系统。
🌐 Once we settled into the per-hour system, that also gave us information on how many hours each month people were spending on the project. That, in turn, showed us how much money we actually needed each month to continue maintaining ESLint. As a result of that information, we have arrived at a system that we are very pleased with.
指导原则
🌐 The guiding principle
在解释 ESLint 目前如何使用其收取的资金之前,有必要退一步来了解这一方法所基于的指导原则。每个项目筹集资金的目标以及资金的使用方式都不同。对于许多项目来说,目标是让维护者能够全职投入项目工作。只要维护者确实希望全职参与项目,这就是一个值得追求的目标。这是一种将资金分配给少数人的狭隘方式,因为大部分或全部资金都用于一两个个人。
🌐 Before explaining how ESLint is using the money it collects now, it helps to take a step back to understand the guiding principles upon which this approach is based. Each project has different goals for why they are raising money and how it should be spent. For many projects, the goal is to allow the maintainer(s) to work full time on the project. That is a worthy goal provided that the maintainers actually want to work full time on the project. This is a narrow approach to distributing funds in that most or all of the money goes to one or a few people.
关于 ESLint,我们发现没有任何团队成员有兴趣全职参与这个项目。所以我们想:如果我们走完全相反的方向会怎么样?鉴于我们知道人们只会兼职工作,可能只是利用他们的空闲时间,我们如何才能尽可能广泛地分配资金,以实现最大的积极影响?
🌐 On ESLint, we discovered that we didn’t have any team members interested in working on the project full time. So we thought: what if we went in the complete opposite direction? Given that we know people will only work part time, and probably just in their spare time, how could we distribute the funds as widely as possible for the maximum positive impact?
当我们问自己这个问题时,我们意识到我们围绕着一个共同的主题:任何有益于 ESLint 生态系统的事情都值得在资金上支持。最先且最明显的有益于生态系统的事情是有人维护 ESLint,所以我们显然需要确保人们因花时间在项目上工作而获得公平报酬。但还有什么其他的事情对生态系统有益呢?嗯,ESLint 是建立在一堆依赖之上的,我们希望支持这些项目,那么如果我们将一部分资金捐赠给这些项目会怎样呢?还有一系列广泛的插件、解析器和扩展,它们有助于推动 ESLint 的使用,那么如果我们开始赞助其中的一些项目又会怎样呢?而且我们还收到了很多来自外部贡献者的贡献……如果我们支付他们报酬呢?
🌐 When we asked ourselves this question, we realized that we were circling around a common theme: anything that benefits the ESLint ecosystem is worth supporting financially. The first and most obvious thing that benefits the ecosystem is having people maintaining ESLint, so we clearly need to make sure people are paid fairly for spending their time working on the project. But what else benefits the ecosystem? Well, ESLint is built on top of a bunch of dependencies, and we’d like to support those projects, so what if we donated some of our funds to those projects? There’s also a wide range of plugins, parsers, and extensions that help fuel use of ESLint, so what if we started sponsoring some of these projects as well? And we also get a bunch of contributions from outside contributors…what if we paid them?
因此,通过围绕任何对 ESLint 生态系统有益的事情都值得资助的理念达成共识,我们能够找到更广泛分配所筹集资金的方法,我们很高兴分享这一成果。
🌐 So by aligning around the idea that anything that benefits the ESLint ecosystem is worth funding, we were able to find ways to spread the money we collected more widely, and we’re excited to share the results.
我们现在如何花钱
🌐 How we are spending our money now
一般来说,我们经常在以下事情上花钱。
🌐 In general, we regularly spend money on the following things.
按小时支付团队成员
🌐 Paying team members per hour
每个月,所有 ESLint 团队成员都可以提交他们在项目上工作的小时数的发票。无论他们在项目上做什么都算数,包括编写代码、编写文档、分类问题、参与我们的 Discord 服务器、代表 ESLint 参加会议、为我们上游的依赖贡献等等。对开源项目的所有贡献都是有价值的,我们认为补偿团队成员在项目上投入的任何时间是正确的做法。
🌐 Each month, all ESLint team members can submit an invoice for the number of hours they worked on the project. Anything they do on the project counts, whether that is writing code, writing documentation, triaging issues, participating in our Discord server, attending meetings on behalf of ESLint, contributing to our upstream dependencies, and so on. All contributions to an open source project are valuable, and we feel like compensating team members for any time they spend on the project is the right thing to do.
目前,技术指导委员会(TSC)成员和审查员的每小时费用是每小时80美元;提交者的每小时费用是每小时50美元。
🌐 Right now, the per-hour rate for Technical Steering Committee (TSC) members and Reviewers is $80/hour; the per-hour rate for Committers is $50/hour.
贡献者池
🌐 The contributor pool
我们曾经苦恼的一件事是如何公平地支付外部贡献者为 ESLint 所做的工作。我们认为设定标准的每小时报酬不太合适,因为 1)人们可能在贡献前并不知道要记录自己的时间,2)信任你不认识的人准确报告他们花费的时间是一个太容易被利用的系统。不过,我们仍然觉得只支付团队成员的贡献而不支付外部贡献者是不公平的,因此我们建立了贡献者基金。
🌐 One of the things we struggled with was how to fairly pay outside contributors for working on ESLint. We didn’t think a standard per-hour rate made much sense because 1) people might contribute without knowing to track their hours ahead of time and 2) trusting people you don’t know to accurately report their hours spend is a system that is too easy to exploit. Still, we felt like it wasn’t fair for us to pay for team member contributions but not for outside contributions, and so we created the contributor pool.
每个月,我们会专门留出 1,000 美元,用于奖励对 ESLint 做出任何贡献的外部贡献者。TSC 会在每个月底审查外部贡献,并向每位对 ESLint 做出非琐碎贡献的外部贡献者至少奖励 100 美元。再次强调,这些贡献不仅限于编码,也可以是对项目产生积极影响的任何事情。贡献者无需提前申请或征求许可;如果你做出了重大贡献,TSC 会通过电子邮件通知你如何领取报酬。
🌐 Each month, we set aside $1,000 specifically to give to outside contributors for any contributions to ESLint. The TSC reviews outside contributions at the end of each month and awards at least $100 to every outside contributor who has made a non-trivial contribution to ESLint. Once again, these contributions are not limited to coding, but can be anything that positively impacts the project. The contributors don’t need to apply ahead of time or ask for permission; if you make a significant contribution, you’ll get an email from the TSC letting you know how to collect your payment.
在2021年,我们向外部贡献者颁发了超过6,000美元的奖励,并且我们期待在2022年颁发更多奖励。这里的重点是:如果你对ESLint做出任何非微不足道的贡献,你将会得到报酬。
🌐 In 2021, we awarded over $6,000 to outside contributors, and we look forward to awarding more in 2022. The bottom line here: if you make any non-trivial contribution to ESLint, you will get paid for it.
支持我们的依赖
🌐 Supporting our dependencies
正如我们在2020年宣布的一样,我们积极寻找并资助我们的依赖。一般来说,我们直接依赖的任何拥有 Open Collective 账户的项目都将被考虑接受 ESLint 的捐赠。我们目前正在通过每月150美元的捐赠支持我们的五个依赖:
🌐 As we announced in 2020, we actively seek out and donate to our dependencies. In general, any project we directly depend on that has an Open Collective account will be considered to receive a donation from ESLint. We are currently supporting five of our dependencies with monthly donations of $150:
- Ajv 是 ESLint 用来验证配置的 JSON 模式验证器。
- Eleventy 是一个基于 Node.js 的静态网站生成器,我们用它来创建 eslint.org。
- Sindre Sorhus 是一位高产的开源开发者,ESLint 使用了他的几个模块,包括
chalk、globals、import-fresh、strip-ansi和strip-json-comments。 - debug 是 ESLint 使用的一个小工具,当你使用
--debug标志时,它用来输出调试信息。 - lint-staged 是一个简单的预提交钩子管理工具,它可以让你在开发过程中轻松设置代码检查。
我们认为,对于收到大量捐赠的开源项目来说,关注它们的依赖非常重要。毕竟,如果你的项目无法在没有这些依赖的情况下存在,那么它们就值得你的支持。
🌐 We think it’s important for open source projects that receive a lot of donations to take care of their dependencies. After all, if your project couldn’t exist without those dependencies, then they deserve your support.
你可以随时查看 ESLint 在我们的 Open Collective 页面 支持哪些项目。
🌐 You can always check to see which projects ESLint is supporting on our Open Collective page.
支持社区
🌐 Supporting the community
一旦我们开始支持我们的上游依赖,我们就想,下游依赖呢?有很多与 ESLint 相关的项目丰富了 ESLint 生态系统,无论是不同的规则集、自定义解析器,还是任何让 ESLint 使用起来更好的东西。我们目前每月向这些项目捐赠 150 美元:
🌐 Once we started supporting our upstream dependencies, we thought, what about the downstream dependencies? There are a lot of projects related to ESLint that enrich the ESLint ecosystem, whether that be a different set of rules, a custom parser, or anything that makes ESLint better to use. We are currently donating $150 per month to these projects:
- typescript-eslint 是使 ESLint 能够与 TypeScript 一起工作的插件。
- eslint-plugin-import 是一个帮助你管理模块导入的插件。
- eslint-plugin-jsx-a11y 是一个帮助你确保 JSX 代码可访问的插件。
今后,我们希望继续支持像这样的社区项目。ESLint 的强大之处在于由你们构建的生态系统,我们希望尽可能支持这一生态系统的各个方面。
🌐 Going forward, we are looking to continue supporting community projects like these. The strength of ESLint is in the ecosystem built by you, and we want to support as much of that ecosystem as possible.
大型项目
🌐 Big projects
我们决定花钱的最后一种方式是用在我们戏称为“重大项目”的东西上。这些是需要大量时间和精力的项目,而团队本身没有时间、兴趣或专业知识去独自完成。每个项目都有一个看起来太大而无法完成的任务积压清单,我们意识到,通过雇佣专业人士来完成工作,我们可以开始逐步清理这份清单。
🌐 The last way we decided to spend money is on what we playfully called “big projects.” These are projects that take a lot of time and effort, and that the team doesn’t have the time, interest, or expertise to accomplish on our own. Every project has a backlog of tasks that seem too big to ever accomplish, and we realized that we could start making our way through that list by hiring professionals to do the work.
我们的第一个大型项目是一个雄心勃勃的项目,旨在重新设计 ESLint 网站。我们多年来一直想重新设计我们的网站,并至少尝试过三次以开源精神进行设计,依靠志愿者并通过共识进行设计。每一次努力都失败了,因此我们决定是时候雇一些人来帮助我们了。
🌐 The first of our big projects is an ambitious project to redesign the ESLint website. We had wanted to redesign our website for several years, and tried at least three separate times to do it in the spirit of open source, with volunteers and designing by consensus. Each of those times the efforts failed, and so we decided it was time to hire some folks to help us out.
整个项目的范围相当大,包括:
🌐 The entire scope of the project is fairly large and includes:
- 包括标志更新的品牌设计
- 一个新的网页设计,更详细地解释 ESLint 是什么以及人们如何使用它
- 将文档分离到自己的网站,使其更易于浏览
- 将演示分离成独立的单页应用,以便更易于维护和部署
- 从头重写和更新我们的文档
- 将我们的文档翻译成不同的语言
到目前为止,我们已经完成了第1步,并且即将完成第2步。为此,我们聘请了:
🌐 So far, we have finished step 1 and are getting close to finishing step 2. To do this, we hired:
- JellyPepper 负责品牌刷新和网站视觉设计。
- Gavin Barnett 设计我们的新博客图片。
- Sara Soueidan 来实现新网站、文档网站和演示骨架。
- Cassie Evans 实现自定义首页动画。
这项工作的总成本大约为46,000美元,我们对一切进展感到非常满意。这是一个完美的例子,说明聘请专业人士来完成工作让我们能够更快地推进,并且(很快!)改善所有 ESLint 用户的网站体验。
🌐 The total cost of this effort has come to about $46,000 and we are thrilled with how everything has gone. This is a perfect example of where hiring professionals to do the work allowed us to move faster and (soon!) improve the website experience for all ESLint users.
收尾
🌐 Wrapping up
我们花了一些时间才弄清楚如何正确使用我们的赞助资金,但现在我们已经弄明白了,我们认为我们找到了维持 ESLint 未来发展的最佳方式。从一开始,我们的目标就是确保每个人为非琐碎的贡献都能获得报酬,我们很高兴我们终于找到了实现这一目标的方法。
🌐 It took us a while to figure out the right way to use our sponsorship money, but now that we have, we think we’ve found the best way to sustain ESLint for the future. Making sure that everyone gets paid for non-trivial contributions was a goal we had from the start and we are happy that we finally figured out a way to do that.
此外,转向一种与我们的依赖以及其他生态系统项目共享部分资金的模式,更符合开源的精神。我们是一个互联的生态系统,项目之间相互融合和重用,以创造更有趣的项目。正如我们会考虑向帮助我们的项目贡献代码一样,我们也需要考虑向这些项目捐款。ESLint 团队对我们所获得的资助感到感激,同时也同样感激没有这些依赖,ESLint 无法存在。我们希望这种模式也能传播到其他开源项目中去。
🌐 Additionally, moving to a model where we share some of our funds with both our dependencies and other ecosystem projects feels more in the spirit of open source. We are an interconnected ecosystem where projects mix and reuse other projects to create even more interesting projects. Just as we would consider contributing code to projects that help us, we also need to consider donating money to those projects. The ESLint team feels grateful for the funding we have received and equally grateful to our dependencies without which ESLint couldn’t exist. We hope that this model will spread to other open source projects as well.
最后,我们打算继续聘请专业人士来参与大型项目。运行一个开源项目涉及很多不同的方面,期望志愿者能处理所有这些方面是不现实的。我们在网站项目上有过很好的经历(该项目应在未来几个月内完成),我们将寻求其他方式为 ESLint 社区创造更多价值。
🌐 And last, we intend to continue hiring professionals to work on big projects. There are a lot of different aspects to running an open source project, and expecting volunteers to handle all of those aspects in unrealistic. We’ve had a great experience on the website project (which should be completed in the next few months) and we’ll be looking for other ways to create more value for the ESLint community going forward.
