TinyPilot: Month 20

Michael Lynch

TinyPilot:第 20 个月

一句话总结

招聘 TinyPilot 的第一位支持工程师

亮点

  • 我招到了 TinyPilot 的第一位支持工程师。
  • 我发现招聘支持工程师比我想象的还要难。
  • 我在评估向国际承包商付款的平台。

目标评分

每个月初,我都会宣布本月想完成的事情。以下是我对这些目标的完成情况:

发布 Voyager 2 PoE 版

哦,天哪。这花的时间远超我的预期。我回看了 2021 年 4 月初写的原始设计文档。我当时估计到 2021 年 5 月 15 日能备好 200 台。换句话说,我估计需要六周,结果花了 11 个月。

招聘 TinyPilot 支持工程师

  • 结果:与一位支持工程师开始了试用雇佣
  • 评分:A

为这个职位招人花了不少功夫,但我很高兴团队有了这位新成员。这篇回顾主要讲的就是招聘支持工程师的过程,详情请往下读。

完成 TinyPilot 网站改版的设计工作

  • 结果:推迟到三月
  • 评分:N/A

与我合作的设计公司在二月份没有足够的工时来完成设计。我已经和他们谈妥了三月和四月的保底工时,所以我预计能在月底前完成这项工作。

TinyPilot 数据统计

指标2022 年 1 月2022 年 2 月变化
独立访客7,2826,991-291(-4%)
总页面浏览量15,47714,916-561(-4%)
销售收入$51,066.78$49,026.99-$2,039.79(-4%)
企业订阅$47.75$47.750
版税收入$5,075.00$3,552.41-$1,522.59(-30%)
总收入$56,189.53$52,627.15-$3,562.38(-6%)
利润-$8,425.67$14,130.75+$22,736.42(+inf%)

自一月份以来销售一直很稳定。由于二月天数较少,总销售额略有下降,但按每天计算,我实际上比一月做得更好。

二月份我的利润异常高,但这主要是时间差造成的。我还在等几张大额发票,而且我的企业信用卡终于把额度提高了 2 万美元,所以我持有的现金更多了。

招聘支持工程师:职位发布

过去几个月我一直想招一位支持工程师,但一直抽不出时间。虽然比我预期的还要久,但我终于招到了第一位支持工程师。第一步是创建一个职位发布

我在三个地方发布了这个职位:

渠道费用候选人总数通过初筛试用雇佣
Twitter$0210
Hacker News$0未统计,似乎很少N/AN/A
We Work Remotely$358219181
合计$358221191

招聘的一个问题在于,作为小企业主,我希望招到一个理解我的公司是什么、并能向我传达这一点的人。问题是大多数公司对待候选人的态度都很糟糕。这造成了一种生态,让候选人不愿意在任何一家公司身上投入时间,因为他们的申请有 90% 的概率会石沉大海。

在撰写职位发布时,我尽量明确表示我会亲自阅读每一份申请。申请不会交给机器学习机器人,也不会交给只会盲目按关键词筛选的无知招聘人员。如果你付出了努力,我也会付出努力。

我还希望候选人在整个招聘过程中感到我尊重他们的时间,因为这也是我希望他们在与我们共事时的感受。

很多职位发布都会写类似这样的话:“在你的求职信中提到 banana 这个词,这样我就知道你认真读了这份描述。”我特意选择不这么做,因为我觉得这会让关系从一开始就带上酸味。我不想让候选人觉得我的默认假设是他们懒惰或无能。识别一份敷衍的申请只需要几秒钟,所以我不需要什么魔法关键词。

我不确定该定多少薪酬。很难评估这个职位的市场价,因为很少有职位发布列出薪酬信息,尤其是兼职合同岗位。我选了每小时 40 美元,但和我聊过的其他创始人说他们预计用每小时 20–30 美元就能找到合格的候选人。

招聘支持工程师:筛选申请

职位发布上线后,就该开始筛选申请了。这是整个过程中最耗时的部分。

在这个阶段,我评估的是:

  • 他们的写作是否清晰、语法正确?
  • 他们是否花了时间去了解 TinyPilot?
  • 他们是否有支持工作或编写面向用户文档的经验?
  • 他们是否满足技术要求?

我努力找出突出的候选人并迅速回复他们。对于其他人,我要么快速拒绝,要么把他们放进队列,等我有空时再回复。

我很快发现需要一个组织系统来管理处于不同阶段的候选人,于是我把所有进行中的邮件线程按文件夹分类:

instant-reject

我的 instant-reject 文件夹用于存放没有按照申请说明操作的候选人。包括:

  • 只发来一封空白邮件、仅附上简历的候选人
  • 求职信中没有提到任何关于职位或 TinyPilot 具体内容的候选人(套模板的申请)
  • 不满足职位要求、且在求职信中没有承认这一差距的候选人

对于这些候选人,我把他们的申请移入 instant-reject 文件夹,不发送回复。

我把 138 位候选人(占总数的 62%)放进了 instant-reject 文件夹。

cover-letter-reject

cover-letter-reject 文件夹用于那些真诚地尝试申请、但从求职信或简历可以看出他们并不匹配的候选人。

对于这些候选人,我会发送个性化的回复。下面是一个例子:

Joe,你好,

感谢你的联系,也感谢你花时间进一步了解 TinyPilot。

遗憾的是,我认为这不是一次很好的匹配。

看起来你在 Linux 和 Raspberry Pi 方面有很多不错的经验,但这个职位需要有更多面向客户内容写作经验的人。你的英语相当不错,但你的信件和简历中有几处错误,所以我认为这个职位不太适合你。

很遗憾没能成行,但祝你在求职中一切顺利。

此致,
Michael

在回复中,我想强调的是我拒绝的是他们的申请,而不是说“我拒绝的是你这个人”。我避免过于具体,因为我不想让候选人觉得我在针对他们,或者因为他们某个粗心的错误而拒绝他们。

大多数雇主会跳过个性化拒信,我也能理解为什么。这非常耗时,而且对雇主没有任何好处。不过,在我请别人花费无偿时间为我申请工作之后,无视他们或发一封群发模板信,我觉得是不尊重人的表现。

大约 65% 的候选人从未回复过我的拒信。大约 25% 的人告诉我他们很感激这些反馈。其中几个人要求进一步说明,我给出了关于他们可以改进之处的具体建议,以及提升写作水平的推荐资源。

在收到拒信的候选人中,约有 10% 试图说服我,如果让他们做我的筛选题,他们可以证明自己。这确实很诱人,但对筛选题给出反馈所花的时间比在求职信阶段直接拒绝要多一个数量级,所以我不想浪费我们双方的时间。

大多数回复的人都显得又惊讶又感激,因为收到一份指出申请具体问题的回复似乎很少见。没有人变得充满敌意。每个人都保持了专业。

我把 62 位候选人(28%)放进了 cover-letter-reject 文件夹。在 instant-rejectcover-letter-reject 之后,只有 19 位候选人(9%)通过了简历筛选。

pending-questions

如果候选人的求职信英语清晰、语法正确,并且满足技术要求,我就会给他们写一封个性化的回复,告诉他们我喜欢其申请中的哪些地方,以及为什么我认为他们可能与 TinyPilot 匹配。

然后我会邀请这些候选人回答三个示例客户支持请求,以便了解他们如何与客户沟通并提供技术解决方案。

回复之后,我会把他们放进 pending-questions 文件夹,直到他们完成这些问题。

有 19 位候选人(9%)到达了这个阶段。其中只有 10 位(53%)提交了答案,不过有两三位候选人是在最后几天才收到问题的,可能仍会回复。

questions-reject

当候选人分享他们对示例问题的答案后,我会决定是否让他们进入试用雇佣阶段。

无论是否发出录用邀请,我都会给所有回答了示例问题的候选人详细的反馈。这个想法来自 Firebase 创始人 Andrew Lee(安德鲁·李):

关键是不能让候选人觉得自己的时间被浪费了。在 Firebase,我们自己在家测试流程上投入了大量精力来确保这一点……在他们提交答案之后,我们会给他们提供一份详尽细致的代码评审(通常由传奇人物 @mikelehen 来做)。

我们把这次代码评审当作真正的生产代码评审来做,而且无论是否打算继续推进该候选人,我们都会这样做。这次评审之所以非常重要有两个原因。第一,它向候选人表明我们是认真对待他们的,并且我们在面试流程中投入了大量自己的时间。第二,它让候选人对在 Firebase 工作有个概念;“如果他们连编程挑战都做得这么好的代码评审,那我迫不及待想和这个团队一起写真正的生产代码了!”

——Andrew Lee,《Firebase 是如何面试软件工程师的

Andrew 的这套流程一直让我印象深刻,认为这是待人接物的正确方式,所以在任何职位的招聘中我都尝试贯彻这种理念。

大多数人很感激这些详细反馈,并表示这些笔记很有帮助。有一个人认为我的标准太窄,根据他的反馈我最终修改了那道题。

在回答了问题的候选人中,我把 19 人中的 17 人(89%)放进了 questions-reject 文件夹。

maybe-trial-hire

在寻找的第一周,有一位候选人对筛选题的回答相当不错,但我仍有保留意见。他是我当时见过的最好的,但我想看看更多的选择。我告诉他几周内会有决定,然后把他放进了 maybe-trial-hire 文件夹。后来我找到了一位更匹配的候选人,于是我告诉那位“待定”候选人我选择了别人。

在招到第一位支持工程师后,我意识到同时与多位候选人进行试用雇佣太难了。对于开发者,我可以同时进行多个试用雇佣,因为我只需给他们分配不同的任务。但如果多位支持工程师在帮助论坛上看到彼此的回答,还知道自己在竞争同一份工作,那就太弱肉强食了。

我仍然保留着 maybe-trial-hire 文件夹,以备几个月后再增加支持工程师。我对候选人是透明的:我已经在进行一次试用雇佣,但他们可以继续申请,如果我以后再招人,他们会进入我的候选名单。或者,我可以让他们选择暂停申请,之后从上次中断的地方继续。

trial-hire

我每次只对一个人进行试用雇佣,所以在这个阶段很容易跟踪。不过为了完整性,我还是为招聘漏斗的最后阶段创建了一个文件夹。

小结

把我的文件夹系统转换成“招聘漏斗”,各阶段的数字如下:

阶段候选人数占总数比例
申请了该职位221100%
满足最低申请要求8338%
申请足够出色、获得示例问题199%
试用雇佣10.5%

招聘支持工程师:支付

我目前与三位自由职业开发者合作,每人来自不同的国家。他们都以不同的方式收款。现在我要增加第四位承包商,我觉得应该用一个统一的方案来标准化支付流程。

我寻找面向远程工作者的支付平台,希望它能做到以下几点:

  • 最大限度地减少每个人处理发票和付款的时间
  • 管理合规文档
  • 管理合同文件
  • 让承包商能够记录开支
  • 让承包商无需安装间谍软件就能轻松跟踪计费时间

Deel(胜出者)

我最终选择了 Deel,因为它满足了我所有的条件。我才用了一周,但目前进展顺利。

Deel 在透明度方面似乎优于其他服务商,它会显示将以当地货币汇入承包商银行账户的确切金额。其他服务商只是承诺尽力找到好的汇率,而承包商只有等到钱到账时才知道最终汇率。

Deel 还计划扩展到面向美国本土员工的工资发放服务。这对我是好事,因为我对 Justworks 和 Gusto 一直很失望。

Pilot

Pilot 与 Deel 非常相似。两者都有 Y Combinator 支持,界面同样精美。Pilot 不支持时间跟踪,而 Deel 支持。

我先注册了 Pilot,本来打算用它,但他们花了整整一周才激活我的账户。在此期间,另一位创始人提到了 Deel,于是我就换了。看来把客户引导好是有回报的。

Remote

Remote 为承包商提供免费支付。听起来很棒,对吧?免费服务恰恰是让我却步的原因。

如果 Remote 能免费提供一项别人每名承包商每月收费 30–50 美元的服务,那就有问题了。这可能意味着他们在以某种意想不到的方式从我身上赚钱,比如把费用藏在汇率里。也可能意味着承包商是他们并不在乎的使用场景,随时可能突然砍掉,就像我们看到 Google 对其免费服务一再做的那样。

Gusto

我已经在用 Gusto 为本地员工发放工资。我对 Gusto 并不狂热,但用一个服务给所有人付钱会很方便。

遗憾的是,Gusto 只在国际承包商每个支付周期收到固定美元金额时才支持他们。如果你的承包商每周工作时间不同,Gusto 就行不通。

遗留项目(RIP)

我以前会在回顾中保留一个固定板块来更新我的遗留业务,但这些文字已经变得相当无聊了。它们基本上都是“我什么都没做。以下是对我各项指标的影响。”

我将用“副业项目”取代“遗留项目”,这样我就可以聊聊周末和晚上玩的兴趣项目。

副业项目

Lenny

Lenny 是一个代表我回复垃圾邮件的聊天机器人。

垃圾邮件越来越猖獗。当我不再回复他们的第一条消息时,垃圾邮件发送者现在会发送自动化的消息序列。

有些垃圾邮件发送者在我不予回应时仍会继续发送自动纠缠序列。

让我恼火的是,垃圾邮件发送者可以不断入侵我的收件箱、浪费我的时间,而他们付出的成本不过是每封邮件几分之一美分和每隔几个月换一个新域名。而且他们对成千上万的人这么干,因为在得到回复之前他们不需要付出任何努力。我想找到一种提高垃圾邮件发送者成本的方法,让批量、半定向的邮件不再那么划算。

我的灵感来自一个 YouTube 频道,它用一个语音聊天机器人浪费电话推销员的时间。该频道维护着一个 VoIP 号码,接听电话推销员的来电,并用一位名叫 Lenny 的友善澳大利亚男子的录音作出回应。录音回复总是对电话推销员推销的东西表现出兴趣,但夹杂着大量东拉西扯的跑题。Lenny 可能已经让电话营销公司损失了几万到几十万美元。

我构建了自己的 Lenny 版本,只不过针对的是电子邮件而非语音通话。现在,当我收到垃圾邮件时,我会把它转发给我自己基于电子邮件的 Lenny。Lenny 会热情地回复垃圾邮件发送者,但他总是不断分心,让对话兜圈子。

下面是两个不同的垃圾邮件发送者对我为聊天机器人编写的同一条消息序列的回应。Lenny 设法从每位垃圾邮件发送者那里骗到了五条回复,然后他们在同一个节点放弃了。在第二个例子中,Lenny 的回复已经不符合垃圾邮件消息的上下文,但对方还是又坚持了一阵子。

Lenny 是我构建的一项服务,用来向垃圾邮件发送者发送毫无结果的自动回复。

我尽量把第三方依赖保持在最少,但在二月份,我开始使用 Bulma CSS 框架,这让 UI 好看了很多。

除此之外,我一直在让它更容易定义新的回复。目前所有回复都硬编码在程序里,但我想让它们可以通过 Web UI 编辑。

我不确定 Lenny 这个项目会走向何方。我可能会把它作为免费的开源工具发布,但我觉得人们也许愿意为托管服务付费。目前我只是为了自娱自乐在做它,但希望在接下来几个月里能提供给其他人使用。

写到这儿我才意识到,那个 Lenny 电话营销机器人的作者似乎正在围绕他的聊天机器人创业,所以我可能得改名字了。

PicoShare

PicoShare 是一个简单的文件分享工具。

让你托管和分享文件的服务有成千上万,但它们总会以某种形式碍事。比如,我不能直接把视频上传到 Google Drive 再给别人发个链接。Google Drive 坚持要重新编码视频,所以要等 10 分钟视频才能观看。即便如此,接收者也必须在 Google Drive 的 UI 里摸索一番才能播放文件。Dropbox、imgur 等也都一样。

PicoShare 是一个朴实无华、毫不添乱的文件分享服务。你上传一个文件,就能得到一个直链。任何拿到链接的人都可以直接查看或下载,无需注册账号,也不用看广告。

最近我用 PicoShare 在家庭群聊里分享了一段《我为喜剧狂》(30 Rock)的短片。下面是我把短片上传到 PicoShare 并获取可分享链接的过程:

PicoShare 让我能即时分享视频,无需重新编码,也不会把文件埋进另一层 UI 里。

PicoShare 还支持为共享文件设置过期时间。有时我想分享一个 TinyPilot 相关的文件,但它可能包含敏感数据,我不想让它无限期地留在别人的邮箱账户里。过去,我会把文件上传到云存储再分享链接,但之后我还得记得去删除文件。PicoShare 通过在过期后自动删除文件来实现自动化。

我几周前才开始做 PicoShare,所以还很粗糙。我不认为这里面有什么生意可做,因为防范滥用的成本太高。目前它是开源的,但我仍在快速迭代,所以还没投入太多精力写文档。

收尾

完成了什么?

学到的经验

  • 把招聘过程当作你们未来合作关系的预演。
    • 优秀的人才愿意与善待他们的人共事。
    • 你的职位描述和招聘流程应该向候选人表明你会尊重他们、珍视他们的时间。
  • 如果你的职位描述本身就很泛泛,你就无法识别出套模板的申请。
    • 如果你写的职位描述很笼统,你就会收到对你的公司只字未提具体内容的套模板申请。
    • 利用职位描述让你的公司与众不同。给候选人一些独特的东西,让他们可以在求职信中谈论,以此证明他们为了解你的公司下了功夫。
  • 善待候选人代价高昂,但会让人欣喜。
    • 尊重地对待被拒绝的候选人要多花 10 倍的时间,但这并不意味着你应该跳过这一步。
    • 如果你是创始人,如何待人由你自己决定,即使这并不能给你带来直接的好处。

下月目标

  • 发布 TinyPilot Pro 2.4.0
  • 完成 TinyPilot 网站的改版设计
  • 完成 TinyPilot 新任支持工程师的入职培训

原文由 Michael Lynch 发布

本文章由 stealth/ox-alpha 进行翻译