Launching a Side Project Backed by Github Sponsors

Matthias Endler

借助 Github Sponsors 支持启动一个副业项目

昨天,我们上线了 analysis-tools.dev,天哪,我完全低估了大家的反响。

这是一个用于比较静态代码分析工具的副业项目。静态分析可以在完全不运行代码的情况下检测源代码中的 bug,从而帮助提升代码质量。

这个项目最棒的一点是它完全开源。我们想打造一款不依赖展示广告或跟踪用户的产品。相反,我们只是在 Github 上寻求赞助——就这么简单。在这个过程中,我们学到了很多;如果你也想做同样的事,那就继续读下去吧!

首先,来看看一些数据

大家都喜欢业务指标。下面是我们的一些数据:

  • 这个项目最初是 Github 上的一份 awesome list,始于2015 年 12 月
  • 目前我们列出了 470 个静态分析工具。
  • 流量持续增长。目前有 7.5k 个 star,以及超过 190 位贡献者。
  • 每周 500–1000 位独立用户。
  • 我已经有打造一个网站的想法很多年了,但我的同事 Jakub(雅库布) 在 2020 年 5 月加入进来,终于让它变成了现实。
Github stars over time. That graph screams BUSINESS OPPORTUNITY.
Github star 数量随时间的变化。那张图简直在大喊:这是一个商业机会!
来源:star-history.t9t.io

“为什么花了五年才做出一个网站!?”我听见你这么问了。因为我觉得这个想法太显而易见了,别人肯定早就尝试过,只是失败了。

即使没有人站出来填补这个空白,我还是把它搁置了。
即使我为了了解市面上的工具,连续五年维护这份列表,我还是把它搁置了。
你明白我的意思了:不要把事情拖得太久。一个想法听起来越显而易见,可能就越是因为它确实如此。

收入模式

我们花了一段时间才想明白该如何在经济上支持这个项目。我们知道自己不想要什么:一个由 AdWords 支撑的 SEO 垃圾场。我们也不想把“用户数据卖给”追踪器。

我们有责任让 Github 上的贡献者提供的所有数据对每个人都免费。那我们怎样才能围绕它打造一项服务?一开始,我们考虑过自己承担基础设施成本,但这样一来,我们就没有动力去维护网站或为它增加新功能。

Github Sponsors 当时还相当新。然而,我们一意识到这是一种可行的选择,思路就突然清晰了:不害怕接受与竞争对手比较的公司,有动力去支持这样一个能够促成比较的开放平台。此外,我们还可以避免偏见,打造一款让比较变得客观且易于访问的产品。

赞助可能是无灵魂增长的解药,让我们得以打造一项精简、可持续的副业。我们不指望 analysis-tools.dev 有朝一日成为一份全职工作。这个市场可能太小,无法支撑全职投入——但这也没关系。

技术

有了收入模式之后,我们就可以专注于技术了。我们俩都是工程师,这有助于快速迭代。

起初,我想用 Yew 打造一些很炫的东西。它是一个 Rust/Webassembly 框架,而你也知道,我喜欢 Rust/Webassembly……

我很庆幸 Jakub 建议我们用别的东西:Gatsby。现在,让我坦诚告诉你:我一点都不在乎 Gatsby。我当时就是这么对 Jakub 说的:“我一点都不在乎 Gatsby。”但这恰恰是关键:不对某个东西抱有情感依附,能让我们专注于工作本身,而不是工具。这样我们能完成更多事情!

从那以后,事情基本就顺风顺水了:我们使用了一个 starter 模板,Jakub 向我展示了 GraphQL 集成的工作方式,而且我们甚至还用上了一些 Rust!网站运行在 Cloudflare 上,是一个基于 Rust 构建的 edge worker(边缘工作程序)。(好吧,我多少耍了点小聪明。)

数到三,MVP!

寻找赞助商

这样一来,我们有了原型,但到目前为止一个赞助商都没有。接下来开始的(现在依然是)无疑最难的部分:说服别人支持我们。

我们还算聪明,没有发送陌生开发邮件,因为大多数公司都会忽略这类邮件。相反,我们求助于自己的人脉,并意识到开发者们之前曾主动联系我们,希望把他们公司的项目添加到 Github 上那份旧的静态分析列表中。

这些人就是我们最先联系的对象。我们尽量让消息简短而个性化。

效果最好的是一封篇幅适中的邮件,先提供一些背景信息,再提醒对方他们曾经为这个项目做过贡献。我们附上了赞助商页面的链接。

企业希望合作伙伴可靠,也希望价值主张合理,因此一个前提是,赞助商页面必须经过细致打磨。

Our Github Sponsors page
我们的 Github Sponsors 页面

就像《星球大战:第九部》一样,我们收到的评价褒贬不一:很多人从未回复,另一些人把消息转给了经理,而经理也从未回复;还有一些人根本对赞助开源项目不感兴趣。这都很正常:大家都很忙,而且 sponsorware(赞助驱动软件)还是一个相当新的概念。

忍不住吐槽一句:在我看来,科技企业从开源中获得了那么多价值,却远远没有进行足够的赞助。如果你们公司成立时,没有 Linux 这样的免费操作系统,或者 Nginx、Apache 这样的 Web 服务器,你们还会存在吗?

不过,也有极少数回复者表达了兴趣,只是需要一些指导。对很多人来说,这是他们第一次通过 Github Sponsors / OpenCollective 赞助任何开发者。

我们使用 OpenCollective 作为财务托管方,这一点帮了我们不少;它负责处理开票和捐款转账。我们刚开始时,他们的文档给了我们很大帮助。

寻找赞助商的任务永远不会结束,但听到DeepCode——一家基于 AI 的语义分析服务——表示愿意给我们一个机会,还是让人非常安心的。

多亏了他们,我们才能把产品推过终点线。也正因为他们,我们可以让网站对所有人免费。这也意味着网站不会有广告和追踪器。

作为回报,DeepCode 能接触到许多关心代码质量的优秀开发者,其中一些人可能会成为忠实客户。此外,他们还会被认可为一家支持开源的科技公司;如果你想销售开发者工具,这一点比以往任何时候都更加重要。双赢!

营销

Jakub 和我之前都创办过企业,但这是我们第一次真正打造一个开放的产品。

阶段 1:尽早发布 🚀

我们决定进行软启动:尽早部署网站,让爬虫将其编入索引。页面采用静态渲染,并遵循一些基本的 SEO 指南,这当然有助于随着时间推移提升搜索引擎排名。

阶段 2:向目标受众征求反馈 💬

获得一些自然流量和最初的投票后,我们联系了开发者朋友,请他们测试页面,并为自己熟悉和喜欢的工具投票。这是一次早期验证,我们也得到了一些坦诚的反馈,帮助我们发现了最明显的问题。

阶段 3:准备公告文章 📝

我们写了一篇博客文章,虽然有点标题党,但确实完成了任务:静态分析已经坏了——让我们修好它! 这篇文章基本表达了我们对这个领域的挫败感,以及为什么打造一个开放平台很重要。我们本可以更好地解释各种分析工具之间的技术差异,但那就留到以后再说吧。

阶段 4:在社交媒体上宣布 🔥

正式公告发布前不久,我们发现搜索功能坏了(当然了)。原来,我们比预期早了那么一丢丢就用完了 Algolia 的免费配额。😅 没什么大不了的:我们快速联系了 Algolia 的客户支持,他们帮我们转到了开源计划(我们之前甚至不知道这个计划存在)。一切又回到了正轨!

题外话:Algolia 的客户支持非常出色。他们响应迅速、技术能力强,而且乐于助人。事实证明,使用 Algolia 非常适合我们的产品。响应时间始终保持在几毫秒以内,而且与 Gatsby 的集成快速又简单。

We got quite a bit of buzz from that tweet: 63 retweets, 86 likes and counting
那条推文引起了不小的反响:63 次转发、86 个赞,而且还在增加

显然,大家都知道我们是在这里寻求支持,但每一个点赞和转发的人,我们都心怀感激。这种时候,拥有一个志趣相投的人脉网络确实能帮上忙。

我们确信网站没有完全崩溃后,就开始在 Lobste.rs(2 个踩)、/r/SideProject(3 个赞)和 Hacker News(173 个赞,57 条评论)上发布公告。社交媒体有点不可预测。不过,根据不同受众调整信息,同时保持谦逊,还是很有帮助的。

所有这些营销努力带来的反响简直疯狂

Traffic on launch day
上线当天的流量

Cloudflare 的边缘工作程序没有出任何问题,这或许并不令人意外。

Edge worker CPU time on Cloudflare
Cloudflare 上边缘工作程序的 CPU 时间

我的老板 Xoan Vilas(索安·维拉斯) 甚至快速做了一次性能分析,并给出了认可。(谢谢老板!)

大家一起击掌庆祝!

接下来呢?

当然,我们会增加新功能;当然,我们对未来还有更多计划,诸如此类。不过,让我们先回顾一下这个里程碑:一家健康的小企业,没有广告或追踪器,完全由赞助商支持。🎉

最后,我希望你能深入审视自己,找到属于自己的那个小产品并着手去做。它可能就在你的眼皮底下,而和我一样,你已经把它拖得太久了。好吧,不能再拖了!下一个成功故事就是你的。所以,行动起来,去创造一些东西吧。

等等!……在你离开之前,能不能顺便看看 analysis-tools.dev,为几个你喜欢的工具狠狠点一下赞?嘿,如果你今天特别慷慨(或者你的雇主很棒、很支持开源),为什么不去看看我们的赞助页面呢?

Jakub and me in Vienna, Austria. I'm not actually that small.
我和 Jakub 在奥地利维也纳。我其实没那么矮。

原文由 Matthias Endler 发布

本文章由 openai/gpt-5.6-luna 进行翻译