TinyPilot:第13个月
一句话总结
一个专注于授权委派的月份。
亮点
- TinyPilot 的欧盟分销商有望在8月底开始销售。
- 通过把职责委派给团队成员,我腾出了时间。
- 我奇迹般地解决了两个已经阻塞工作数月的任务。
目标评分
每个月初,我都会宣布想要完成的事项。以下是我对这些目标的完成情况:
让我的欧盟合作伙伴准备好在8月底开始销售
- 结果:我们有望在本月底开始销售。
- 评分:A
进展顺利。到下周,我的分销商应该会拿到开始组装自己的 TinyPilot Voyager 设备所需的全部零件和说明。他有望在本月底开始销售。
制定流程,让 TinyPilot 的本地员工能够共享并轮换所有任务
- 结果:我们建立了一个共享待办清单,让员工可以轮换任务。
- 评分:A
TinyPilot 从来没有过同时由两个人管理库存和履约任务的情况。要建立一套让两个人平等分担职责的体系,比我预想的要难,但我们现在已经有了一个可行的系统,可以让两位员工轮换任务并协调排班。此外,我把之前由我填补的空缺都写成了文档,以便本地员工能够接手处理。
为 TinyPilot 销售网站找一位设计师
- 结果:一位新开发者正在进行改版设计。
- 评分:A
经过数月的寻找,我终于找到了一位网页开发者来负责 TinyPilot 网站,他正在进行改版设计。
找一家能够为 TinyPilot Voyager 制作 PoE 适配器的电子工程公司
- 结果:我最初的那家公司找到了能让他们制作 PoE 适配器的元器件。
- 评分:A+
这是又一次幸运的突破。全球芯片短缺让我的电子工程公司受挫数月,于是我联系了一些规模更大、可能在电子供应链方面有更好渠道的供应商。这本会是一个缓慢的过程,而且他们很可能要从零开始。
幸运的是,TinyPilot 现有的电子工程合作伙伴设法找到了一批供货,应该够我们用6到12个月,价格不到我原本准备支付金额的10%。他们目前正在设计 PoE 适配器的 PCB,预计在未来4到6周内做出原型。
TinyPilot 数据
| 指标 | 2021年6月 | 2021年7月 | 变化 |
|---|---|---|---|
| 独立访客 | 6,339 | 5,234 | -1,105(-17%) |
| 总页面浏览量 | 11,514 | 9,730 | -1,784(-15%) |
| 销售收入 | $29,446.46 | $23,954.64 | -$5,491.82(-19%) |
| 企业版订阅 | $48.00 | $48.00 | $0(0%) |
| 总收入 | $29,494.46 | $24,002.64 | -$5,491.82(-19%) |
| 利润 | -$9,452.32 | -$9,713.34 | 不适用 |
销售持续低迷,因为我一直在忙于搭建欧盟分销体系,并把 TinyPilot 的履约流程移交给本地员工。幸运的是,TinyPilot 在没有任何营销或广告的情况下,连续两个月仍能达到2.4万美元的收入,但接下来几个月我需要加大对销售和营销的投入。
迁移到托管库存服务
从 TinyPilot 创立后的头几个月起,我就一直在寻找一种托管服务来跟踪库存。廉价的方案太简单,只适用于无需组装或制造的产品。高端方案又过于复杂,是为拥有数千种产品和多个仓库的企业级客户设计的。
机缘巧合之下,我偶然发现了 Craftybase,它终于看起来像是契合 TinyPilot 的方案。而且它某种程度上确实如此,但迁移过程相当坎坷。
Craftybase 的某些设计很出色,完美契合我们的工作流程。我最喜欢的功能是“配方(recipe)”,它定义了组成一个产品的原材料。例如,我可以告诉 Craftybase,一个 TinyPilot 电源连接器由一个外壳和一块电路板组成。当我在 Craftybase 中记录一次“制造”10个电源连接器时,它会自动从我的库存中扣除10个外壳和10块电路板。

Craftybase 的“配方”功能允许你定义组成每个产品的部件。
配方还可以包含我制造的其他物品,这对 TinyPilot 的多阶段制造来说非常合适。例如,我们分阶段制造 TinyPilot Voyager。我们通常会先制造一批10台以上的 Voyager 设备,测试它们,然后把每台设备连同所需的线缆、说明书和 microSD 卡一起装箱。由于配方可以包含原材料以及我们在较早阶段制造的部件,Craftybase 让我们能够跟踪这个流程中不同阶段的组件。
遗憾的是,我们在 Craftybase 中的大部分工作流程都相当不顺手。最糟糕的例子是管理来货。Craftybase 允许你为每个物品设置“低库存限额”,系统会用这个数字来标出库存偏低的部件。

当库存数量低于你设定的低库存阈值时,Craftybase 会高亮显示相应物料。
问题在于,即使你已经下了补货订单,它仍会继续标记该物品,因为这个标记不考虑待到货的订单。在上面的例子中,我已在 Craftybase 中记录了一批月底到货的 HDMI 采集芯片订单。尽管我已经无事可做,Craftybase 仍然把这个物品标记为低库存。
这意味着当 TinyPilot 员工想弄清楚哪些物品需要补货时,他们必须逐个检查每个被标记的物品,确认在把待到货订单考虑进去之后,它是否真的库存偏低。
起初,我以为有个简单的解决办法。我以为 Craftybase 的“已购买(purchased)”列代表待到货的订单。结果发现,“已购买”其实是我从开天辟地以来购买的总数量——一个无关紧要的指标,Craftybase 却莫名其妙地给了它如此显眼的位置。

当库存数量低于你设定的低库存阈值时,Craftybase 会高亮显示相应物料。
解决办法是,对于每个被标记为低库存的物品,我们都要深入查看详情,检查当前库存总数,加上待到货订单,然后再看这个数字是否低于我们的低库存限额。检查低库存本应是一个两秒钟就能完成的工作流程,但 Craftybase 把它变成了一个繁琐复杂、需要好几分钟才能完成的过程。


要在 Craftybase 中检查某个物品是否低库存,你必须在多个页面之间核对数字。
通过授权委派腾出更多时间
在 TinyPilot 的大部分时间里,我一直苦于时间不够。这个业务有很多环环相扣的部分,而我是贯穿所有环节的唯一桥梁。
6月份,我列出了一份任务清单,在投入一些培训和工具成本后,这些任务可以委派出去。我很高兴地宣布,我已经成功委派或取消了那份清单上一半的项目,还有另外几项。
告别电子表格工作
TinyPilot 之前的库存方案是我维护的一个自制电子表格。它很好地支持了 TinyPilot 的工作流程,但不够灵活。每当我们添加新产品或更换部件时,我都得花几个小时折腾那些粗糙的表格公式,才能让一切恢复正常。

TinyPilot 的第一年,我们用一系列带有复杂公式的电子表格来跟踪所有库存。
尽管 Craftybase 让我颇为恼火,但它让我退出了库存流程的关键路径。与电子表格相比,Craftybase 能以更细的粒度和更高的灵活性跟踪我们的库存,尽管它确实需要大量令人沮丧的变通办法。
为本地员工创建共享待办清单
我仍然在不知不觉中事必躬亲的任务之一就是任务分配。TinyPilot 的本地员工每周到办公室三天,每天几个小时。对于每天都会发生的任务,比如订单履约或处理来货,很容易在员工当班时指派他们去做。
每周或每月才发生一次的任务则更难在两名员工之间分配。本地办公室成立后的头几个月里,每周和每月的任务处于一种混乱状态:“需要做的时候就做”、“等 Michael(迈克尔)开口求助”,或者“Michael 干脆自己做了”。
TinyPilot 的一位员工有兴趣进一步了解 Notion——我们用来做知识库的工具。这似乎是个不错的 Notion 项目,于是我请他创建一个共享待办清单来管理每周和每月的任务。

TinyPilot 的本地员工在 Notion 的共享待办清单中跟踪未完成的任务。
过去三周我们一直在顺利使用这个待办清单。主要的缺点是我们还没有在 Notion 中找到创建重复任务的好办法。我们的变通办法是每隔几个月手动重新填充清单。虽然繁琐,但每个季度只需大约一小时的工作。
培训本地员工补订原材料
在 TinyPilot 的大部分时间里,库存管理由我女朋友负责,包括在库存偏低时补订原材料。今年6月她回研究生院读书后,我们把她的大部分职责转交给了一位新员工,但补订材料的任务又落到了我的头上。
把补订库存这项工作外包出去,难度超乎想象。这不仅仅是解释怎么做,还要想办法共享供应商网站的登录凭据,给他们一张设有消费限额的新借记卡以减少失误等等。把库存管理交给某人还需要时间来建立信任。我不想把信用卡交给一个全新的员工,然后说:“从现在起,你负责每月1万美元的开支。”
7月份,我终于为团队每个人创建了 Bitwarden 账户,让我们可以安全地共享凭据。我还编写了如何向各个供应商下单的说明。

TinyPilot 补订原材料的内部文档
维持库存水平听起来工作量不大,但补订物资的过程中涉及许多琐碎的小任务,所以每当有人接手这项工作时,我都会感到如释重负。
让开发者互相审查彼此的 Pull Request
自2月以来,有两名自由职业开发者与我一起开发 TinyPilot,上个月又加入了一位第三名。由于时间不够,我基本已经不再写代码,但我仍然是每一次代码变更的审查者。
几个月前,我们尝试过把我从代码审查流程中剔除,但没有成功。我是全职可用的,而其他开发者只是兼职,而且工作时间大多不重叠。如果他们有一系列相互依赖的变更,审查之间的延迟就可能拖垮进度。
在我们每月的开发会议上,我们意识到只有一小部分变更会以那种序列方式出现。对于大多数变更来说,等一两天才收到审查并不是什么大问题。所以,现在开发者们开始互相审查代码了。
作为一个仍然把自己视为独立开发者的人,拥有自己没有亲自审查过的代码让我感到不安。但我信任我的队友,而且我认为这个系统对公司整体来说运转得更好。
将镜像构建流程外部化
每次发布 TinyPilot 新版本时,我都会制作一个预装了最新版 TinyPilot 的 microSD 镜像。我构建 microSD 镜像的流程需要一台 Raspberry Pi(树莓派),所以我一直在用放在办公室角落的一台闲置 Pi 和 SSD。

TinyPilot 官方构建服务器,直到不久之前
尽管 TinyPilot 的开发者完全有能力管理这些代码,但要协调共享访问一台被隔离在我家中的服务器实在太难了。因此,我一直是构建代码的唯一维护者。
有时候,我绝望地用某个关键词连续搜索好几个月,迫切想要找到解决方案,最后才发现自己用错了搜索词。我一直想要 Pi 云托管,也经常搜索“pi cloud hosting”或“pi cloud server”,结果只找到关于如何把自己的 Pi 用作云服务器的无用内容。最后,我想到搜索“pi dedicated server(Pi 独立服务器)”。这让我找到了 Mythic Beasts,一家提供可按秒租用的云托管 Raspberry Pi 服务器的公司。

Mythic Beasts 提供裸金属 Raspberry Pi 服务器托管。
Mythic Beasts 有一个很好的 API,可以动态启动 Pi 服务器,但我意识到,相对于开发者的时间成本而言,他们的服务器费用非常便宜,与其自动化任何聪明的服务器分配逻辑,不如给每位开发者一台全天候运行的个人服务器,这样反而更省钱。
服务器问题解决后,我清理了我的镜像构建代码并与团队共享。现在任何 TinyPilot 开发者都可以用最新的构建代码配置自己的服务器,并用它生成 TinyPilot microSD 镜像。更重要的是,如果我们在这个流程中发现 bug 或需要添加新步骤,TinyPilot 的开发者可以自行修改,而不必成为只有 Michael 才能做的任务。
启动欧盟分销
过去一个月我最大的项目是让新的欧盟分销商运转起来。我目前也向欧洲客户销售,但海外运输既慢又贵,还可能在交付时产生意外的关税。欧盟分销商将在德国制造并发运 TinyPilot,这会改善欧盟消费者的购买体验。
建立这种合作伙伴关系的主要挑战之一是如何在承诺与灵活性之间取得平衡。从历史上看,要预测 TinyPilot 超过几个月的未来一直很难,所以我尽量保持最大的灵活性。可以理解的是,我的分销商需要我做出某种程度的长期承诺。开始销售 TinyPilot 设备需要大量的工作和资本投入,所以他不希望我在另一家分销商带着更优条件出现时把他甩在一边。
另一个难题是特许权使用费。我们一致认为,使双方激励保持一致的最佳方式是按比例分享利润。这样一来,分销商可以尝试不同的定价,而不必受制于付给我的固定款项。而且如果他发现可以卖更高的价格,我也会随他一起从更高的价格中获益。
分利润的难处在于,它会引出一些棘手的问题:利润到底该怎么算?如果我的分销商作为营销手段赠送免费设备,这些设备他是否要向我支付特许权使用费?人工成本是否计入单件利润?如果我们共同投资产品改进,这会如何影响我们的利润计算?
我们一直在理清这些问题,并努力预判可能产生冲突的源头。目前,合同已经完成约95%,看起来我们有望在几周内、甚至几天内敲定。
遗留项目
以下是我仍在维护但并非当前开发重点的几个项目的简短更新:
Is It Keto
| 指标 | 2021年6月 | 2021年7月 | 变化 |
|---|---|---|---|
| 独立访客 | 49,839 | 39,568 | -10,271(-21%) |
| 总页面浏览量 | 122,700 | 96,494 | -26,206(-21%) |
| 域名评分(Ahrefs) | 13.0 | 13.0 | 0 |
| AdSense 收入 | $536.85 | $438.07 | -$98.78(-18%) |
| Amazon 联盟收入 | $134.59 | $59.65 | -$74.94(-56%) |
| 总收入 | $671.44 | $497.72 | -$173.72(-26%) |
上个月,我还在庆祝 Is It Keto 的受众在1月年度高峰过去这么久之后依然保持得不错。我猜是我把话说早了,因为这个月出现了今年最大的环比访客降幅,跌了超过20%。
遗憾的是,这次低迷恰好发生在我申请与一家更高级别的展示广告合作伙伴签约的时候。我曾听到建议,说应该从 Google AdSense 换到 MediaVine,因为后者付给发布者的报酬高得多。MediaVine 有每月10万页面浏览量的最低门槛,我申请时是达标的,但现在刚好低于这个数。走一步看一步吧。
Hit the Front Page of Hacker News
| 指标 | 2021年6月 | 2021年7月 | 变化 |
|---|---|---|---|
| 独立访客 | 248 | 109 | -139(-56%) |
| Gumroad 收入 | $123.52 | $218.09 | +$94.57(+77%) |
| Blogging for Devs 收入 | $0.00 | $27.30 | +$27.30(+无穷%) |
| 总收入 | $123.52 | $245.39 | +$121.87(+99%) |
课程方面没有新动态。每个月有几个人购买,看起来还挺喜欢,但我一直没做推广。Martin Schleiss(马丁·施莱斯)在他最近的博客文章中给了课程一个正面提及。我计划本月去一些科技播客做嘉宾自荐,这或许能把新用户引向这门课程。
Zestful
| 指标 | 2021年6月 | 2021年7月 | 变化 |
|---|---|---|---|
| 独立访客 | 594 | 547 | -47(-8%) |
| 总页面浏览量 | 1,470 | 1,300 | -170(-12%) |
| 总收入 | $40.20 | $620.67 | +$580.47(+1444%) |
这个月 Zestful 的使用量出现了大幅跃升,但我很确定这是欺诈行为。有几个用户在几天之内相继注册,用户名形如 joe-84ad853。本月大部分收入来自其中一个账户。从来没有哪个 Zestful 客户在 API 请求上花过超过100美元而不来找我谈批量折扣的。这个用户从没联系过我,所以我非常怀疑。RapidAPI 声称我会在8月30日收到这笔钱,但如果真发生了,我会大吃一惊。
收尾
完成了什么?
- 发布了新的 TinyPilot 版本
- 找到了一位开发者来管理 TinyPilot 网站
- 恢复了 TinyPilot PoE HAT 和机架支架的进展
- 迁移到了托管库存服务
经验教训
- 一个不完美的工作流程,胜过依赖 CEO 的工作流程。
- 尽管 Craftybase 的用户界面和各种限制让我恼火,但它总比让我困在复杂电子表格里维护公式要好。
下个月的目标
- 帮助我的欧盟分销商达成第一笔销售。
- 完成 Voyager 2 的设计。
- 发布 Refactoring English(《重构英语》)的样章。
随机一篇博客