使用编程技能赚取被动收入 [译]
十年亲身经验:从受雇软件开发者到成功独立开发者,打造并运营自己的业务
在 2017 年,我从一家拥有 150 人规模的软件公司 CTO 的职位上辞职,想试试能否通过在互联网上销售自己的软件来赚钱。
八年后,我已经成为一名全职的 “独立创客”(solopreneur),运营一系列能带来收入的软件产品组合 作为全职工作。现在我可以自己安排工作时间,想休假就休假,而且令人惊讶的是,我的收入比当 CTO 时还要高。
在下面这场演讲中,我会分享我是如何做到这一切的,以及在这个过程中学到了什么。我会分享程序员在开始出售网络软件时应该掌握的技能,包括技术技能和非技术技能。我会讨论如何着手、如何评估你的想法、如何构建产品、以及如何获取第一批用户和付费顾客。内容来自我多年来自行构建和销售软件的经验,以及我通过 SaaS Pegasus 帮助数百人推出自身业务所积累的见解。
如果你曾经想过把编程技能变成能产生收入的副项目,我希望这次演讲能够既激励你、又帮你迈出第一步。
要点概览(TL;DR)
有人在 Reddit 上让我为这次演讲写一个 TL;DR,这是我即兴的回复:
首先,你得在自己的生活中为此腾出空间。需要很长、连贯的时间来做深度工作。
你最初选的想法很可能行不通,所以找个想法赶紧开始行动。许多最好的产品,都是在做别的东西过程中萌芽出来的。
在构建产品时,要追求速度。尽快把东西推向市场,再快速迭代。
选择你熟悉且上手最快的技术栈。
尽量把一半的时间花在市场推广/销售上,即使你并不喜欢这么做。
你能拥有的最重要技能是“韧性”(resilience)。不放弃是通往成功的最佳途径。因为这条路上充满不确定性,所以坚持会很难。
值得去做!这种自主与自由是任何其他职业都无法匹敌的。
演讲内容
本演讲于 2024 年 10 月 4 日在 PyCon South Africa 的闭幕式上进行。
时长约 30 分钟,外加 15 分钟的问答环节。
你也可以往下阅读我整理的带注释演讲稿,我用的方法与 Simon Willison 的方式非常相似。
演讲稿文本
今天我想谈谈如何用编程技能来赚取被动收入。
活动宣传邮件里对这次演讲的标题让我觉得有点好笑,因为它听起来 确实 很像“赚快钱”的标题党。
希望这是一个不带标题党性质的版本。至于是不是标题党,就留给你来判断了。
首先,我得先解释一下我的工作。
“所以,你是做什么的?”
每次有人问我这个问题,我都不知道怎么回答。最无聊的说法是 “我是一名软件开发者,同时也经营一家自己的公司。” 如果对方知道一些行业用语,我会说自己是独立创客(solopreneur)或独立开发者(indie hacker)。要是更具体一点,我会说我经营着一系列能带来收入的技术产品组合,这听上去有些拗口。要是我想开点玩笑,我可能会说: “我做一些应用,让我睡觉时也能赚钱,或者……我想干嘛就干嘛吧?”
事实上,我的收入来源就是一系列在线赚钱的技术产品组合。
基本意思就是:我做一些东西并放到互联网上,有的通过一次性付费赚钱,有的通过订阅、广告、联盟分成等赚钱。我有好几个项目,它们带来的收入各有不同。我每天就挑一个来做,维护它、开发新功能,或者开发一个新东西,诸如此类。
我就是这样一路走来的:
抱歉,这张幻灯片里有很多动态叠加效果,放到这里图像就不太清晰了。
我最开始跟很多人一样,在普通公司上班。我很快就离职,加入了一个朋友的公司 Dimagi,当时团队就三个人。他说:“嘿,你要不要当 CTO?” 我说:“好啊,那我就当 CTO 吧。” 结果我就这样“角色扮演”了几年的 CTO。
不过,这家公司后来发展得不错,等我反应过来时,公司已经有 200 多人,我手下带了 35 人左右的团队。按理说我那时就是真正的 CTO 了,但我并不喜欢这份工作。我每天就泡在各种会议和管理工作里,基本上已经碰不到代码。最后我就烧尽了(burn out)。
于是我和那位朋友说我需要休息一下,决定来个 6 个月的不带薪休假 来重新思考生活。这段休假里,我发现一个网站叫 Indie Hackers,专门讲一些跟我现在类似的故事——人们做一些稀奇古怪的小应用,然后以此谋生。我一想:“这听起来挺酷,我也来试试吧。” 所以我决定在这 6 个月里,看能不能以“独立开发者”的方式赚到 1 美元。
我最先成功的项目蠢到我自己都觉得不好意思,实际上它只是一个 制作座位卡(Place Cards)的应用——就是婚礼或其它活动常见的那种座位名牌。你把宾客名单的表格上传,然后下载一份 PDF,付给我 5 美元(约 100 南非兰特)。令我惊讶的是,这竟然真能赚钱!我挣到了第一笔钱,那种感觉非常刺激,于是我就上瘾了。接着我试着继续重复这种模式。
后来我想:“我打赌也有人想跟我一样一次又一次地做这些事。” 于是我更进了一步,做了一个能帮别人快速上线自己应用的产品,这就是 SaaS Pegasus —— 一个可配置的 Django 代码基础,我现在 80% 的收入都来自这款产品。
到今天,我非常惊喜地看到有那么多人用 Pegasus 代码做了 非常酷的产品甚至成功的商业项目,包括 YCombinator 公司,也包括别人随便拉个朋友做的业余项目。它目前有上千人在用,可能成百上千的真实产品是基于它开发的,真是挺神奇的。
现在,我来澄清一下这种职业道路的几个关键特征。
我说的重点是做 产品,也就是说,不要将时间直接出卖给金钱——而是让用户直接买某个东西,然后你在不需要投入额外工作时就能赚钱。
我指的是 能赚钱的 项目。做个兴趣项目当然好,但这里主要针对想替代(或补充)工资收入的人。
我还说的是 “自启动”(bootstrapped),意思是你不去融资,而是靠自身项目收入养活自己,拥有全部利润。
最后,这是一条相对“平静”的道路(calm path)——目标不是打造一家百人企业。当然也可以,但我从来不想把公司做大到上百人,我只想过一种从容、有大量自由度的生活。
一个相对主流的叫法是:独立开发者(indie hacking)。
我这次演讲有两个目标:
第一,让大家相信这可以是一条可行的职业道路。很多人根本没想过还有这种选择,但它确实可行。
第二,如果你决定想试一试,那么我会给一些提高成功概率的建议。
下面是实现这条路的示意图:
首先你要在生活里创造空间。对很多人来说,这也许是最难的部分——找到足够的空闲时间去做这件事。
然后你进入一个不断迭代的循环:你尝试做某件事儿,如果不奏效,就吸取教训,然后继续尝试。这里的“换个方向”不一定非要完全重做一个新产品,也可以是尝试新营销方式、调整用户体验等。只要不停试,终有一次会成功,然后你就赢利了(Profit)!
先说说如何腾出空间。
想开始,需要什么?
老实说,几乎什么都不用准备!
除了时间。
而且这需要的是能连续投入、用于深度工作的时间片段,而不是那种碎片化的、被各种琐事打断的时间。要找到这种时间并不容易。
那怎么能挤出时间呢?
最常见的方法,就是在晚上或周末加班搞副业。
这位是我的朋友 Wisani,他开发了一个名为 Boardroom 的应用(有点像 LinkedIn 的 “Tinder” 版本),目前在南非开始走红,而且他手上还有十来个项目。与此同时,他还在 Allan Gray 全职上班,并且好像还在读 MBA。
在夜晚和周末做项目是对生活影响最小的一种方式,但这非常累。就我而言,我得顾着孩子,白天上班一天也挺疲惫,实在很难抽出这样的时间。
如果这样不行,还有另一种方法,就是“放手一搏”。
也就是辞职,跟自己说:“行,我就攒了十二个月的生活费,我要做出点名堂来。” 但大多数情况下,这并不好,因为会有极大的时间和经济压力。创业本身就有很多不确定性——并不是说你努力干一年就一定能成功,这和常规工作或许不一样。
我自己的做法,也是我推荐的做法,更像是“耐心地一点点来”,把这个目标和自己的生活慢慢地融合在一起。
常见的思路就是减少自己打工的时间,收入略有下降——比如跟老板商量只工作四天,工资减到 80%,或者通过做合同工或自由职业者来提高时薪。然后把剩下的时间投入到自己的产品里。等这些产品有了一些收入后,再慢慢调整你的工作小时,直到它完全接替你的开销。
这是我在这个领域头七年的真实收入分布:
2016 年我还在全职上班,2017 年我休了假,正式开始折腾这条路,同时把原来的工作量降到了一半,然后大部分收入来自给别人做咨询。我动用了一些人脉,告诉他们“我有空,而且收费会比较高”,幸好有人愿意买账。那块很薄的黄色部分,就是我卖座位卡所赚的钱。
它的状态就像滚雪球一样,第二年收入比第一年更多,第三年更多,然后我渐渐把咨询业务减到很少,最后辞掉了工作。虽然用了好几年时间,但好处是我从来不怎么焦虑——没有过大的经济压力。
现在我们进入主要的迭代循环。
放大来看,其实可以归纳为:找一个想法、做出来、卖出去,然后重复。
再回到那句“人人都可以创业”,其实这里面没什么火箭科学——如果你能自学编程,你也能学会怎么做市场、怎么验证想法。这些都能学。
但这里面最大的挑战是“高度不确定性”。
这意味着你需要在这个循环里尽可能多地转一圈又一圈,因为每一次尝试,你都无法提前知道结果。如果你花了两年做一个产品,最后发现没市场,那就浪费了很多时间。但如果你能在两周、两个月内确认这东西不行,就能更快开始下一轮尝试。
我喜欢把自己想象成一个人的“风险投资基金”。
风投基金投 100 家企业,会预计其中 90 家会失败,但只要有一家是下一个 Facebook 或 Uber,基金就大赚特赚。
对个人来说,也是同理。你要像在球门前多次射门,看哪一次能进。也许你能先赚到 10 美元、100 美元,然后你就可以把主要精力放在那个项目上,让它持续增长。
下面举几个独立创客圈的例子:
对不起,这张图也因为叠加效果而变得有些混乱。
Pieter Levels 现在可能是在“钱堆里睡觉”,他说他做项目的成功率只有 5% 左右。但是这 5% 就足够让他以这种方式过上很好的生活了。还有个南非人 Rob Hope 在他的网站上有个 项目墓地(project graveyard),列出了他过去所有失败的尝试。另一个例子是 Pat Walls 也在 Twitter 上公开了他的失败记录,我也照着他的格式发过。你会看到我也尝试过很多东西,能成功的就那么寥寥几个。
既然失败概率高,就一定要尽可能地缩短每次尝试的周期。
下面说说如何“选点子”。
这张图来自一位非常成功的企业家 Rob Walling。
关键在于,你要像爬楼梯一样,一步一步提升难度。先从台阶 1 开始做最小、最简单的东西。就像我卖 5 美元一次的座位卡 PDF——非常简单,做起来也很快,卖起来也相对容易。
等你做成了,就再做下一个,再下一个,如果你真的成功了,你就掌握了支配自己时间的主动权(台阶 2)。
Rob 所说的台阶 3,指的是再去冲击一个更庞大、更有野心的项目。我把它画了个虚线,因为你 不一定 非要去第三层。你可以做很多台阶 2 上的小项目,依旧可以过得很好,拥有很多自由。有没有必要去做“登月”项目,纯看你自己的兴趣。我自己就更倾向于停留在第二阶段。
所以,“从小处着手” 是选点子时的关键。
对第一个项目而言,要 “易于开发、易于维护、易于销售”,而且如果它并不是那种独角兽级别的想法,反而更好。千万别一上来就想做下一个 Facebook、Uber 或 OpenAI,你要找的是一个足够细分的市场。
那如何想出好点子呢?
网上有很多人写文章总结方法,他们见过的案例比我多得多,我就不展开了。我只想强调:去 行动!
用我自己的例子:我那时结婚,需要打印这些讨厌的座位卡,于是有了那个做座位卡的项目。后来在做各种应用的过程中又遇到新问题,就去做 SaaS Pegasus。又因为运营 SaaS Pegasus 社区,经常回答重复问题,我又去做了一个 RAG 聊天机器人。
你做一个项目的过程,肯定会遇到新的痛点,然后那可能成为你下一个产品的切入点。并不是说第一个想法一定能成功,而是“行动”会让你不断产生新想法。找到让你觉得有趣、值得解决的问题,然后就继续做下去。
有一本书叫 《The Mom Test》,专门讲如何验证创意。
这本书的关键点是:当你向任何人讲述你的“创业点子”时,对方很可能会像你妈妈一样,笑呵呵地鼓励:“亲爱的,这主意真不错,我相信你一定能成功!”
大家这样做,是因为不想让你丧失信心。你去问朋友或同事:“我有个 App 的想法,你觉得怎么样?” 他们也不会直接泼冷水。这本书就是教你如何避开这种“善意的谎言”,并提供一套方法让你更真实地验证想法。
接下来聊聊开发——特别是做一个 MVP(最简可行产品)。
很多人都听过 MVP——其实就是尽量构建一个“最小却有用”的版本。
在这个示意图里,滑板是可用的交通工具,但只做一台车子的轮子或轴,就没什么用。也有人提出过 SLC(Simple, Lovable, and Complete) 的概念,我也很喜欢。
但说 MVP 之前,我想先谈谈独立产品为什么会失败。
我想强调的是:独立产品和许多大公司的软件开发有很大区别。
在 Amazon 这样的大公司,你可能要和一堆遗留代码打交道,作者已经离职了、没有文档,还有各种可怕的扩展性、性能问题——但 这些都不是独立产品失败的原因。对独立产品来说,失败往往是因为用户根本不需要这个东西,或者你不懂营销,或者你资金和精力都耗光了。
因此,你要做的是 一切以速度为优先——越快上线,越快收集反馈,越快迭代,越快发现这个想法根本没市场,就能越快开始下一个。
我并不是说要写质量很差的代码,而是说你要聪明地取舍。
比如测试,你无需追求覆盖率 100% 或极致的测试体系,而是要问自己:“写这些测试,能不能让我之后更快、更放心地改代码?” 如果能,那就写;如果不能,那么此刻就不用太纠结。
换言之:不要过度思考。
接下来说说设计。
对开发者来说,设计往往是个弱项,我自己也不例外。好在现在完全不必自己设计了,网上有各种开源或付费的模板——即便是免费模板,也可让界面很好看,兼容不同设备,还有现成的组件。
所以你完全可以 不 自己做设计,直接拿别人的现成设计来用。我非常推荐这样做,因为它更快,而且想做得更精致或更独特,可以放到之后再说。
另外,你也 不必从零开始。
虽然这有点像给自己做广告,但也是事实:我见过很多人用 SaaS Pegasus(我的项目)大大缩短了他们上线的时间。其实这是一个完整的行业——SaaS Boilerplates 或 SaaS Starter Kits,有免费的开源版本,也有付费的商业版本,都能帮你把常见的登录、付费、多租户等功能开箱即用。这样你就能把前两周从零写起的时间省下来,专注做自己核心的部分。
那么,应该选什么技术栈呢?
其实答案只有一个:
用你最熟悉的那一套。
如果你只是想顺便学个新技术来提升自己,那当然可以。但如果你的目标是尽快推出能赚钱的产品,就应该用你最熟悉的东西,让自己保持最高开发效率。
如果你还啥都不懂,那就选当下最流行的。
流行技术有更好的社区、文档,而且大语言模型(LLM)对它们的支持度也更好。我自己主要用 Django、HTMX 和 Tailwind,但你用自己最顺手的就好。
还要记住一句话:如果你在推出第一版时还不觉得自己做得“太简陋、真丢脸”,那就意味着你推得太晚了。这是 LinkedIn 创始人的名言。
这是 Place Card Me 刚上线时的页面,我用的只是几个 Font Awesome 图标和一个特别大的按钮,但它就这样跑了一年左右。你得习惯先拿出一个不太完美的版本,只要它能运转、能收到反馈就好,比起追求完美的东西,尽快开始用户反馈循环要重要得多。
下面聊聊如何“卖”出去。
许多开发者都有一个误区——以为只要把产品做得“最好”,就会成功。
他们觉得某款软件能成功,是因为它质量最好。其实大部分情况下,那家公司的市场/销售团队才是大功臣,或者成功来自“好产品+好营销”的组合。
一个残酷的现实是,你需要花大量时间来做营销或销售。书籍 《Traction》 提到,你大概要把 50% 的时间花在市场和销售上。
对我来说,这就像“吃蔬菜”一样。我喜欢写代码,却不喜欢做营销。但我知道自己必须把营销这碗“蔬菜”吃下去,然后才能痛快“吃薯条”。
我也建议“在产品还没准备好时就尝试卖”。
我敢说大家都见过某个很酷的应用,当你想注册时,却弹出了个对话框,让你先留下邮箱。
对于用户来说,这很讨厌。但对开发者来说,这非常有用,有两个原因:
如果连让别人留下邮箱都做不到,那想让人家付费就更别提了。用收集邮箱来检验是不是有人对这个产品有一点点兴趣。你可以想办法给这个页面引流,如果发现只拿到寥寥几个邮箱,就说明市场反响一般。
你需要一个潜在用户名单,当产品真的上线时,可以通知他们。如果你是在黑暗中埋头苦干,然后突然上线,发个 Hacker News 帖子,结果无人问津,最后只能感叹失败,但其实很可能只是不够曝光。如果你预先有 200 位对产品感兴趣的人,上线前先联系他们中的 20 个做做用户访谈,完善完再给下一个 20 个,依次迭代,最后正式上线就能给全部人发邮件。这种从第一天就能获得用户关注的感觉会好很多。
再来谈谈如何获取第一批用户。
这些是我用过的一些方法。
各种社区非常适合寻找早期用户。因为社区通常都很“垂直”或“小众”。无论你是做给“喜欢打 DnD 的水管工”用的,都能找到对应的 Reddit 或 Facebook 群组。你可以直接进去和目标用户对话。
但要注意,社区往往很反感那些专门来做营销的人,所以要“有技巧”地发言,多给社区带来价值,然后在合适的时机里提一下你的产品。
广告也是比较直接的方式,比如 Google 的搜索赞助位非常醒目,其他平台也有各式各样的广告机会。
广告很适合在早期验证你的想法,看看是不是有人想用、能不能顺利用上。但我不建议拿它来直接赚钱,你很大概率会烧钱。但是用花钱买来的流量做一点用户研究,还是值得的。
“冷邮件”或者冷联系也是一种你可能会不太舒服但有时很有效的手段。比如当我做 Place Card Me 时,我每天花一个小时去看各种婚礼博客,然后给博主写了一封又一封个性化的长邮件。绝大多数博主都不鸟我,但有一个人理了我。她对我帮助很大,让我了解行业现状,在她网站上给了我反向链接,还帮我定制一些座位卡的设计。
现在有了 AI 垃圾邮件泛滥,想要用“千篇一律”的模版轰炸,基本没戏。比起批量发送 100 封随便拼凑的邮件,宁愿写 1 封更走心的邮件或私信,成功率更高。
“内容”是我目前最常用的营销渠道——写文章、做搜索引擎优化(SEO),靠这些带来访问量。比如你要是针对某个行业,就写面向那个行业的有用内容。
我服务的对象是 Django 开发者,所以我就写很多 Django 相关的文章。有人搜索 如何部署 Django 或 如何对接 Stripe 就会找到我的文章,也就顺便了解到我的产品。这样还能带来反向链接,累计口碑等。
我也开始在 YouTube 上放一些教程,虽然我频道没多少粉丝,但依然能带来可观的访问量。录点小屏幕演示就能搞定,任何个人都可以这样做。
我犹豫要不要提这个,但毕竟我自己也做过,就是“公开构建”——你在博客或社交媒体上分享你目前在做的事情。你会在 Twitter 上见到很多人也这样做,而且已经比较杂乱了。
不过它的好处在于,不需要额外投入精力。比如你今天花 2 小时做了点功能,就截图发个推,可能有人对你的进度感兴趣,然后一路关注,逐渐成为你的第一批拥趸。他们可能会主动试用、帮你推广或者给你引荐资源。
最后我想谈一点和心理因素有关的东西。
前面那张看上去挺简单的迭代图,其实还隐藏了另一条“岔路”:
就是 放弃。
Indie Hackers 的创始人 Courtland Allen 采访过几百位往这条路上走的人。他说,他从成功案例里得到的最大启示是:你只要坚持不退出。除此之外并没有更“通用”或“有效”的方法—— 就是别放弃。
那怎么才能让自己不放弃呢?
一个办法是,让自己拥有 无限的跑道(runway),也就是前面说的稳住经济状况。
这样你就不会因为“没钱”而被迫放弃。
然而你还是可能会因为失去动力而退出。为了持续保持动力,我觉得最重要的是管理好自己的预期。
比尔·盖茨曾说过:“人们往往高估自己一年能做到的事,却低估自己十年能做到的事。”
这句话让我感触很深。很多人认为:“我给自己三个月时间做个产品,结果上线不成就彻底算了。” 这确实很常见。但如果把它当作一条五年、十年的旅程,你就会用小而稳的步子走下去,别看它们单个效果有限,但累加到一起,会有巨大增量。
还有一个关键点是要“把学习当作目的”。
你可以想象一个角色扮演游戏的技能树。对大多数软件开发者来说,编程算是主力技能,可能也懂一点产品和市场。但要想在这个领域做出成绩,你需要比较“全才”。
这意味着你要愿意学习新技能,尤其是那些让你不舒服的领域。比如我从没想过当一个营销人,但为了卖产品,我必须去学。如果你无法跳出舒适区去学营销、学其它不熟悉的事情,就很难坚持下来。
最后,保持韧性。
这张图展示的是 2020 年初 Place Card Me 每周的收入走势。刚开始一个星期能有 400 美元左右,然后忽然新冠疫情全球爆发,没人再办婚礼了,我的核心被动收入一下子归零。
这只是无数突发状况中的一个,这条路的确充满“不确定”。当你生意好的时候,会非常好,但遇到低谷可能又会直接跌入谷底。你得接受这样的心态起伏。以前拿工资是平稳的,这种做独立产品的收入忽高忽低,需要更强的心理承受能力。
不过,如果你能撑过去,你就能有所收获。
这是我第一篇博客写的目标:在互联网上赚到 1 美元。
八、九年后,我的收入比当 CTO 时还高。更重要的是现在的生活方式很好:我可以想何时陪孩子就何时陪,想休长假就休,也没人给我下命令,我也可以不去参加那些冗长会议。
所以我非常推荐这条路。
如果你听起来觉得有趣,那就去试试吧。看看能不能把它变成现实。
如果你能读到这里,真是非常感谢!如果觉得有帮助,欢迎在下面留言、分享给他人,或订阅我的更新,之后我发新内容时你就能收到通知。