The Perils of Outsourcing Your MVP

Michael Lynch

将 MVP 外包的种种陷阱

几个月前,我有了一个关于网站的绝妙点子。后来,我又有了一个更加绝妙的点子:把网站做出来,但把所有工作都外包出去。

每个伟大的网站都始于 MVP:最小可行产品。它用最简单的形式展示创意,以测试是否有人感兴趣。Twitter 发布 MVP 时,你只能发布 Russet 土豆的照片。Slack 的首个版本很出名:它只支持猪拉丁语。如今,Netflix 已经成了即时流媒体的代名词,你可能已经忘了它的第一个版本:你得先选择一部电影,然后等上几天,直到 Reed Hastings(里德·哈斯廷斯)来到你家,亲自把剧情演给你看。

我为构建 MVP 制定了一个简单计划:

  1. 快速写一份设计规格说明。
  2. 找一位摇滚明星级别的自由职业开发者,要求他在当下最时髦、最前沿的 web framework(Web 框架)方面拥有 10 年经验。
  3. 给这位自由职业者开出每小时 4 美元的报酬,以最大化网站利润。
  4. 看着 MVP 蓬勃发展成一个由数百万热情用户频繁访问的成功网站,这些用户争先恐后地要求把钱交给我。

你可能会惊讶地得知,这个计划并没有奏效。我不是在自己位于硅谷、价值 2 亿美元的豪华两居室公寓里写这篇文章的。我没有因为 Facebook 一笔惊人的收购交易而登上头条。相反,我是在普通的一居室公寓里写下这些文字的——刚收到一个半成品,还莫名其妙地成了我的自由职业者的自由职业者。

创意

我遵循keto diet(生酮饮食),也喜欢尝试新食谱。网上有很多不错的食谱,但它们散落在几十个博客中,而每个博客的结构都不一样。这些博客往往加载缓慢、难以浏览,因为生酮博主很少有 web development(Web 开发)经验。

现有的生酮网站

我的想法是 KetoHub,一个生酮食谱目录。它会把整个互联网中的食谱汇总到一个易于使用的网站上。

KetoHub v1 的模型图

KetoHub 的初始草图

寻找自由职业者

KetoHub 最繁重的工作是 web scraping(网页抓取)——爬取食谱博客并提取相关数据。这是 Upwork 或 Fiverr 等自由职业开发者网站上的常见工作。我大概能以低价找到人来做,但如果我想在 MVP 之外继续迭代,最后可能会得到一堆碎得不成样子的代码。

等等!这份工作非常适合我的朋友 Ferngully(费恩格利)(她同意让我写她,但条件是我必须给她起一个滑稽的化名)。她最近辞职去旅行,但几天后就要回来找全职工作了。在此期间,她应该有时间接点自由职业的活。我们过去曾一起工作过,所以我知道她是个能力扎实的开发者,我们合作也很愉快。

我联系了她,她马上就答应了。根据我们过去合作的经历,她知道我的 code review(代码审查)吹毛求疵又爱抱怨一向严格。她告诉我,迎接我的高标准挑战让她很兴奋。

我写了一份设计文档,从较高层面列出了网站的各个组成部分。Ferngully 负责 backend(后端)的抓取工作,而我会构建一个简单的 web frontend(Web 前端)来显示食谱。

KetoHub 架构图

KetoHub 架构图

我们为什么还没上线?

最初和 Ferngully 讨论项目时,她问我有没有截止日期。“没有截止日期。只要专心写出高质量的代码就好。”

我会对任何和我一起做副项目的开发者说同样的话。相比周一匆匆拼凑出来的代码,我宁愿周四收到高质量的代码。我估计 Ferngully 那部分需要 30—50 个小时来实现。我们大概一周就能完成。如果我的估算有误,或者她每周工作时间少于 40 小时,也许需要两三周。

当时,我的日常工作正处于繁忙期。我可能要过几个月才有时间构建前端。当然,我会是瓶颈。

写完设计文档后,我想到,如果 Ferngully 交付了抓取代码,结果却只能让它在抽屉里闲置几个月,那该多扫兴。于是我花了几个晚上搭建基础前端。它显示了一些我手动抓取的示例食谱。等 Ferngully 完成工作,我们就可以立即加入完整的食谱数据并上线。

使用虚拟数据的基础 KetoHub 网站

KetoHub MVP 截图,其中填充了手动抓取的数据

就在那时,我开始焦虑起来。

我花了一周完成了网站部分,但仍然没有看到 Ferngully 的任何代码。她到底在做什么?

在我构建前端之前,这个项目毫无压力。现在我们已经有了一个填充着虚拟数据的网站,感觉就像我们养活了一个生命,却把它关在笼子里。随着一天又一天过去,我的代码正在枯萎,逐渐过时。我只想把 KetoHub 展示给全世界,好让我进入这个流程中最精彩的部分:马克·扎克伯格邀请我登上他那艘收集个人信息的超级游艇,与我共饮香槟。

在低带宽下工作

第二周结束时,Ferngully 把她的第一次 code review 发给了我。这是第一个后端组件的部分实现。她平均每周工作 15 个小时,但下周一就要开始全职工作了。之后她能投入的时间肯定会减少。

我重新查看了设计文档,想看看能否删减一些内容。文档要求后端以程序化方式将食谱数据上传到网站的数据存储中。如果她只把数据写入本地文件系统,而不是直接上传,我就能减少 Ferngully 的工作量。然后,我可以使用现有的命令行工具把这些数据上传到网站。

好吧,时间有限也许是件好事。如果我能删掉 MVP 中的部分元素,同时实现相同的目标,那它其实就还没有达到最小形式。

我乐观地认为,再过几周我们就能收尾。

成了我的自由职业者的自由职业者

不幸的是,Ferngully 的工作对她可用时间的影响,比我预想的还要大。接下来的一个月里,她每周在 KetoHub 上投入的时间平均不到 5 小时。照这个速度,我们得花几个月才能完成。

如果换成另一个自由职业者,我大概会感谢对方的工作,然后找一位新的开发者。但 Ferngully 不仅是我的朋友,还是一个正在承受新工作压力的朋友。我不想通过要求她投入更多时间或彻底推翻项目计划来增加她的负担。不过,她之前问我截止日期时,我表现得那么松散,现在想起来真让我懊恼。

也许我可以把她的一部分工作分给自己。不行,如果有人雇我做一份工作,后来却自己把它做了,我也会很恼火。我重新查看设计文档,看看能不能进一步简化,但找不到任何可以删减的东西。于是,我开始思考能否调整开发流程,把一部分时间成本从她身上转移到我身上。

等一下。这到底是怎么回事?我把 KetoHub 外包出去,本来是为了节省自己的时间,但现在我却在重构项目,以便优先优化 Ferngully 的时间,而不是我自己的时间。我怎么就成了我的自由职业者的自由职业者?

简化代码审查

不管到底是谁给谁当自由职业者,我都希望我们能尽快完成项目。我能削减的最大时间成本,就是我出了名挑剔的代码审查。

代码审查对我们双方来说都很耗时。我会认真思考代码审查,而 Ferngully 也需要时间来落实我的建议。由于两轮审查之间往往相隔几天甚至几周,我们还不断浪费周期,仅仅是为了回忆审查进行到哪里以及相关背景。

为了节省时间,我决定不再给 Ferngully 提意见。她把下一份变更列表发给我审查时,我直接将它合并进去,再稍微调整一下以符合我的标准。砰——我们完成了第一个完整的后端组件。只剩两个了!

这说不通

Ferngully 对我这个聪明的新省时技巧没那么兴奋。严格的审查能让她在技术上成长。没有了这些,KetoHub 就只是一份工作,而她在工作中已经有够多工作了。

我犹豫着要不要继续写审查意见。即使我跳过了这些意见,我也不确定和自由职业者合作总体上是否真的节省了时间。如果我重新开始写,按时间成本计算肯定会入不敷出。我会支付一名自由职业者不菲的时薪,而耗费在沟通上的时间将超过我自己写代码所需的时间。

我们讨论了一番,决定让 Ferngully 继续参与 KetoHub 已经没有意义了。第一个组件已经完成,正好可以让她退出项目。

自己实现

和 Ferngully 结束合作后的那个周六晚上,我从她停下的地方继续做,并下定决心一直做到 MVP 上线。凌晨 2 点,第一版完成了。它看起来朴素得让我不好意思,但总算完成了。

完成的 KetoHub 第一版

MVP 终于完成时的 KetoHub

我很快意识到,这个项目从一开始就应该由我独自完成。

原型需要在取舍方面做出许多细小的决定。我要不要多花一个小时,修复一个只影响 10% 食谱的 bug?哪些模块应该有自动化测试?不可能提前向自由职业者明确规定这些问题的答案。独自工作时,我只要凭直觉行事就好。

自己构建网站也让修复设计缺陷容易得多。即使团队只有两个人,设计缺陷也会带来很高的摩擦成本。Ferngully 发现问题后,必须先和我确认;我会更新设计文档;她阅读文档,丢弃一部分已经完成的工作,然后最终按照新设计重新实现。独自工作时,整个过程几乎可以瞬间完成。

最后,把后端外包出去,还让我看不清业务的核心部分。当我亲自投入网页抓取工作时,这激发了我对未来版本 KetoHub 可使用的食谱数据产生新的想法,也让我更好地了解了网站的设计约束。

经验总结

尽管存在这些问题,这个过程还是让我学到了有关创建新网站以及与自由职业者合作的重要经验。最大的经验是:如果你是开发者,自己构建 MVP

如果你选择与自由职业者合作:

  • 讨论目标完成日期
    • 你不必设定死板的截止日期,但要提前弄清楚你们的预期是否大致一致。
  • 就每周可投入的时间达成一致
    • 你的自由职业者可能还有其他客户或优先事项。要弄清楚他们能为你的项目投入多少时间。

本文由 Samantha Mason(萨曼莎·梅森)编辑。

如果你是对寻找新食谱感兴趣的生酮饮食者,可以看看KetoHub,也就是我在整篇文章中一直谈论的网站。

原文由 Michael Lynch 发布

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