当我们宣布RethinkDB关闭时,我答应写一个调查分析。我花了一些时间来整理所得的教训和经验,现在可以清楚地写出来。
在HN讨论贴中,人们提出了许多关于为什么RethinkDB失败的原因,从莫名的人性和聪明的MongoDB营销人员;到没有建立一个有经验的上市团队;再到缺乏支持超过64-bit float 的数字类型……我将这些意见集中到这里。
其中一些原因确实是真的,但它们是症状而不是原因。例如,说我们未能赚钱的,它并没有说明我们失败的原因。
事后看来,有两个重要的原因导致了我们的失败 —— 我们选择了一个可怕的市场,并地按照错误的指标对产品进行优化。每个错误都可能使RethinkDB的估值降低一到两个数量级。因此,如果我们认为它们其中之一是正确的,那么RethinkDB将是MongoDB的大小,如果我们认为它们两个都是正确的,我们最终可能是红帽的大小(不要以为这些数字很接近,它会让你知道这些错误的代价)。
可怕的市场
我们的想法是这样的:新公司不是在Oracle之上构建的,所以有机会建立一个新的基础设施公司。数据库市场十分巨大,如果我们创建一个能够俘获一部分市场的产品,我们的公司将会十分成功。
不幸的是,你并不在你自己认为的那个市场上,而是在你的用户认为的那个市场上。我们的用户认为我们是一个开源开发工具公司,虽然这就是我们原来的想法。这是非常不幸的,因为开源开发工具市场可能是最糟糕的市场之一。成千上万的人在商务背景下使用RethinkDB,但大多数人甚至不愿意支付一杯星巴克咖啡的价格(这就是说,他们不愿意支付任何东西)。
这不是因为产品好到不需要别人的支持,或是开发者不控制预算,或者资本主义的失败。答案是基本的微观经济学。开发人员喜欢创建开发人员工具,并且通常是免费的,所以虽然有大量需求,但供应却十分充足。使得替代品的数量上升,价格下降到零。
看看其他公司如何:MongoDB(市值约为1.6亿美元,约700名员工)和Docker(市值约为1B,约300名员工)。两家公司完全在各自的市场占主导地位。成长阶段的民营科技公司两个非常粗略的经验法则是:估值是年收入的10倍,每位员工的收入大约为每年2万美元。这意味着MongoDB的年收入约为140-1.6亿美元,而Docker的年收入约为60-1,000万美元。
这看起来不错,直到你看到市场上那些不是专注于开发者工具的主要的 B2B 技术公司。像SalesForce,Palantir或Box(面临激烈的竞争)的公司。突然MongoDB和Docker看起来很弱。
这些都获得了巨大的成功。如果和现有的公司建立合作关系,分销基础设施和获取大量账户将麻烦不断,那么对于一个处于萌芽阶段初创公司意味着什么呢?
对我们来说,这意味着一个难以处理的客户收购渠道。在一个肥沃的B2B市场创业必须处理一百个潜在客户才能获得十个机会,最终获得一个销售,对于一个开发工具的初创公司增加了10倍的机会。您可以访问大量的高品质潜在客户 - 很多人正在下载您的产品和与您的互动,但你必须花掉不少的线索才能得到一个订单。
这是具有灾难性的多米诺效应。它使团队的士气,使吸引投资和聘用顶尖人才变得非常具有挑战性。反过来,这限制了您的资源,使您不能在产品和分销方面进行充分的投资。初创公司的生存还是死亡靠的是动力,早期的分配挑战几乎能导致最终的死亡。
错误的度量指标
好了,虽然市场不好,但其他开发工具公司仍然销售了很多产品。为什么不是RethinkDB呢?
虽然我们无法干预市场的动态(除了建立别的东西),产品决定权却完全在我们的控制之内。我们希望打造一个优雅,健壮,美观的产品,因此我们对以下指标进行了优化:
正确性。我们作出了非常严格的保证,并且严格履行。
接口的简单性。我们承担了实现过程中大部分复杂性的工作,所以应用程序开发人员可以更轻松。
一致性。我们做到了从查询语言,客户端驱动程序,群集配置,文档,到首页上的营销副本都尽可能一致。
如果你觉得这些权衡似乎很熟悉,他们是“ worse is better”(即快速拿出原型,听取用户意见,然后继续增加功能,修复bug)。原来,正确性,接口的简单性和一致性是大多数用户的错误衡量标准。相反,大多数用户希望这三种标准:
及时。他们希望产品在需要时就存在,而不是三年后。
可触知速度。人们希望RethinkDB能够快速实现他们想要的工作负载,而不是我们建议的“真实世界”工作负载。例如,他们会写快速脚本来测量插入一万个文档需要多长时间,而不会读取它们。我们输掉了市场学习这一仗时,MongoDB巧妙地掌握了这些工作负载。
一个有用的东西。我们开始建立一个好的数据库系统,但用户想要一个好的办法来实现某件事(例如,一个很好的方法来存储来自hapi的JSON文档,一个很好的方式来存储和分析日志,一个很好的方式来创建报告等)
不是我们没有试图让RethinkDB快速发货,并建立其周围的生态系统,让有用的工作做起来更加容易。我们做到了这一点。但是正确、简单和一致的软件需要很长的时间来构建。这使我们落后市场三年。
当我们觉得RethinkDB满足了我们的原来的设计目标,我们有信心让它投入生产使用时,几乎每个人都问“RethinkDB与MongoDB有什么不同?”我们努力解释为什么正确性、简单性和一致性更加重要,但这些并不是大多数用户最重要的评判标准。
老实说,它受到很大的打击。很难理解,为什么人们会选择一个几乎不做它应该做的事情(存储数据)的系统,并且还有一个大的内核锁,随机丢弃错误,实现单节点功能,有一个几乎不工作的分片系统,尽管它是产品的核心特征之一,基本上不能保证正确性,并且暴露了没有可辨别的一致性或视觉一致性的接口。
每次MongoDB发布一个新版本,人们会祝贺他们做出改进,这让我感到悲哀。他们会宣布他们修复了BKL,但是事实上他们会把粒度从一个数据库降到一个集合。他们会添加更多的操作,而不是一个适合系统其余部分的组合接口,他们只是简单地使用一次性命令。他们会做分片改进,但很明显,他们不愿意或者不能做出基本的数据一致性保证。
但随着时间的推移,我学会了欣赏人群的智慧。当人们需要的时候 MongoDB能将普通开发者变成英雄,而不是几年后。它使数据存储速度快,让人们快速收货。随着时间的推移,MongoDB长大了。他们解决了一个接一个的架构问题,现在它是一个优秀的产品。它可能不像我们想要的那么完美,但它把自己做的工作做得很好。
2014年我们已经清楚地意识到自己在竞争中处于劣势,我们努力与MongoDB区分开来。我们发现了一种非常优雅的方式来添加实时推送,希望能够让开发人员构建一代他们之前无法构建的应用程序。但这还不够。突然,我们发现自己正与我们几乎忽略的致力于解决实时问题多年的Meteor和Firebase在竞争。我们再次落后了市场三年,然后我们发现自己已经完全败下阵来。
云服务
有几个人建议我们应该建立一个云服务。我们实际上有一个这样的作品,所以这是个我想说的有趣的话题。
小型数据库公司构建云服务的明显问题是它的模式匹配一个常见的启动失败模式 - 分裂焦点。构建、运输和运营可靠的多租户云服务是很困难的,它需要非凡的专业知识和资源,所以如果你沿着这条路走下去,你发现自己像是同时运行两个创业公司。但是我们面临着一个存在的威胁,并迅速做了选择,所以我们只能给它一个短镜头。
我们的推理是这样的,数据库云提供的服务可以是以下三种之一:托管,数据库即服务(DBaaS)或增值平台即服务(PaaS)。使用上面提到的每位员工的收入大约为每年2万美元的经验规则,快速回溯一下市场分析:
所以这些市场很小,甚至比数据库市场本身更小。但是,他们的其中之一能比别人更好吗?
托管主机本质上是为AWS上的人运行数据库,因此他们不必这样做。使用这些服务的替代方法是自己在AWS上设置数据库。这是痛苦的,但它不是那么难。但有一个非常困难的上限,多少托管数据库托管服务可以收费。考虑到Compose.io和mLab提供的MongoDB的用户数比RethinkDB多一到两个数量级,我们认为提供托管托管不会产生影响。
数据库作为服务是一个更复杂的托管托管版本 - DBaaS提供从用户抽象节点管理完全。你只需运行你的查询,系统处理它们。你不知道有多少节点在引擎盖下运行。这个业务是非常具有挑战性的 - 部分是因为DBaaS公司必须与巨人(例如DynamoDB和DocumentDB)竞争,部分是因为当有很多其他替代品和替代品时,客户完全把数据管理交给创业公司是非常困难的你知道谁在使用一个启动的DBaaS产品吗?)所以一个DBaaS产品出来了。
最后一个选择是建立一个增值平台作为服务。我们认为这很有前途,因为在这方面我们有巨大的技术优势。 Firebase和Meteor必须在MongoDB之上构建应用程序级实时逻辑,从根本上限制了实时查询功能和性能。另一方面,我们一路控制堆栈,所以我们具备Firebase和Meteor所没有的显著的优势。
因此,我们创建了Horizon,并开始致力于Horizon Cloud - 这是用户部署和扩展RethinkDB / Horizon应用程序的一种方式。一个非常小的团队建立三个大型项目(RethinkDB,Horizon和Horizon Cloud)的挑战最终赶上了我们,我们从来打算在我们用完钱之前放弃云服务。把掌声送给工程团队,他们已经非常非常接近成功了。
元问题
我们还可以做一个级别的根本原因分析。我们为什么会选择一个不好的市场,并按照错误的指标优化产品?
当我还是个小孩子时,我想要建立自己的收音机。我用胶合板做了一个盒子,里面放了一些金属垃圾,把盒子连接到电源线。我在家里有电子书,但我没想过自己需要他们 - 我有坚定的信念,我可以自己做。最终,我建立了一个工作接收器,但我花了很多年才终于意识到我需要学习基本的电子学。
早期的RethinkDB有点像这样。我们对产品或市场没有直觉,所以我们通过了建立一家公司的议案,而没有真正了解我们在做什么。更重要的是,我们有很大的乐观偏见(人类倾向于把未来估计得比实际情况更好。)。就像医生知道,制药公司的礼物对其他医生有偏见效应,但相信他们免受这种影响,我们相信我们免受经济和经营业务的数学法则的影响。数学,当然,最终让我们尝到了苦果。
我们可以做些什么来避免这些错误吗?现在已经不是那个自己搬弄一个可以工作的收音机的那个孩童时代。不知不觉间,我们已经不能胜任,而且这种无力感要若干年之后才被意识到。
有几个人指出,如果我们建立了一个有经验的上市团队,我们会做得更好。这100%是真的,但我们个人发展的时机不符合公司的需求。最初,我们不知道我们需要进入市场的专业知识,所以我们不想将它包括在创始团队(顺便说一句,没有良好的商业直觉,认识好的业务人员就像,对工程没有强烈的直觉却要认识优秀的工程师一样难)。当我们做好心理准备时,我们发现自己在一个满是有能力的竞争对手的市场里,却资金短缺,只有一个三年后的产品。到那时,世界上最好的上市团队也救不了我们。
离别的思念
许多人对开发工具市场有非常强烈的感觉。工程师喜欢构建开发工具,所以他们很想让开发工具公司茁壮成长。
我完全不理会市场——因为我不想用单一的经验进行推广;因为我不喜欢说“它不能做”;因为有很多例外。 GitHub,MongoDB和Docker已经建立了强大的公司。 GitLab和Unity似乎做得很好。
如果你打算建立一个开发人员工具公司,请一定要谨慎细心。市场充满了很多好的替代品。用户期望高,价格低,认真思考你为客户提供的价值。记住——想要世界往某个方向走不必一定要让它如此。
2009年,我们在YCombinator演示日把RethinkDB(我们还没有软件)的早期想法展示给投资者观众。我们在结束的幻灯片上写了三点要记住的。 “如果你只记得RethinkDB的三个事情,”我们说,“记住这些。”人们没有记住幻灯片的其他东西,但在结束时他们确实记住了三点。