返回 登录
3

RethinkDB开源项目为什么会失败?

原文RethinkDB: why we failed
作者:Slava Akhmechet
翻译:雁惊寒

摘要:本文分析总结了RethinkDB开源项目失败的几个原因。以下是译文。

当我们宣布关闭RethinkDB项目时,我答应写一个事后总结报告。我花了一些时间来整理这段经历,现在可以清楚地写出来了。

HN讨论贴中,人们提出了很多关于RethinkDB为什么会失败的原因,从无法理解的人性和MongoDB营销人员的阴谋诡计,到没有建立起一支有经验的面向市场的队伍,再到缺乏支持超过64位float的数字类型……我将这些意见集中整理到了这里

其中有一些原因确实有点道理,但它们是结果而不是原因。例如,说我们没有赚到钱的是属于循环论证,它并没有说明我们失败的原因。

事后看来,有两个重要的原因导致了我们的失败:我们选择了一个糟糕的市场,并地按照错误的指标对产品进行优化。每个错误都可能使RethinkDB的估值降低一到两个数量级。因此,如果我们做对了其中一件事,那么RethinkDB将达到MongoDB的规模,如果我们同时做对了这两件事,我们最终可能会达到Red Hat那样的规模。

糟糕的市场

我们的想法是这样的:新公司并没有建立在Oracle之上,所以就有机会成立一个新的基础设施公司。数据库市场十分庞大,如果我们创造出一个能够俘获一部分市场的产品,我们的公司最终将会非常成功。

但是,很不幸,设想中的市场与实际的用户市场并不完全一致。用户认为我们是一个开源工具开发公司,其实我们就是这样的公司。这是非常不幸的,因为开源工具市场可能是最糟糕的市场之一,公司很可能就会死在这上面。成千上万的人在商业环境下使用RethinkDB,但是大部分人甚至都不愿意支付一笔比一杯星巴克咖啡还便宜的使用授权费用。

这不是因为产品好到不需要购买技术支持,或者是开发者没有控制住预算,或者资本主义的失败。答案是基本的微观经济学。开发人员喜欢创建开发者工具,并且通常是免费的。所以虽然有大量的需求,但供应却十分充足。这使得替代品的数量上升,价格下降到零。

看看其他公司是怎么样的:MongoDB(市值约为16亿美元,约700名员工)和Docker(市值约为10亿美元,约300名员工)。这两家公司在各自的市场上都占绝对优势。对于尚处在成长阶段的民营科技公司来说,有两个非常粗略的经验法则:估值是年收入的10倍,员工的收入大约为每年20万美元。这意味着MongoDB的年收入约为1.4到1.6亿美元,而Docker的年收入约为0.6到1亿美元。

这些数字看起来似乎还不错,但是如果你看看市场上那些不是专注于开发者工具的主要的B2B技术公司,像SalesForce、Palantir或Box公司,那么MongoDB和Docker简直是弱爆了。

这些公司都获得了巨大的成功。如果和现有的公司建立合作关系,分销基础设施软件和拜访大客户也存在着很多的麻烦,那么这对于一个处于萌芽阶段的初创公司来说又意味着什么呢?

对我们来说,这意味着难以解决的客户获得渠道。如果是在一个肥沃的B2B市场中创业,则必须联系一百个潜在客户才能获得十个机会,并最终完成一个销售任务。而对于一个开发工具的初创公司来说,机会增加了10倍。你可以接触到很多高质量的潜在客户,很多人正在下载你的产品并与你交流,但你必须花大量的时间精力才能得到一个订单。

这存在着灾难性的多米诺效应。它使得团队士气低落,难以吸引投资人和雇用顶尖的人才。紧接着,这又限制了你的资源,使你不能在产品和分销方面进一步投资。初创公司是死是活靠的是契机,过早的分配挑战几乎就是在宣判死亡。

错误的度量指标

好了,虽然市场不好,但其他开发工具公司仍然销售了很多产品。为什么RethinkDB不能呢?

虽然我们无法干预市场,但产品的决定权却始终掌握在我们手中。我们希望打造一个优雅、健壮、美观的产品,所以我们针对以下指标进行了优化:

  • 正确性。我们作出了非常严格的保证,并严格履行
  • 接口的简单性。我们承担了大部分的复杂工作,所以应用程序开发人员的工作将更为轻松。
  • 一致性。从查询语言、客户端驱动程序、群集配置、文档,到首页上的营销副本,都尽可能地一致。

你是不是觉得这些规则看起来很熟悉,他们摘自“worse is better”这篇文章。事实证明,正确性、接口的简单性以及一致性对于大多数用户来说是错误的衡量标准。大多数用户都希望是这三个原则:

  • 及时交付。他们希望产品在需要时就存在,而不是在三年后。
  • 高性能。人们希望RethinkDB能够快速实现他们想要的工作负载,而不是我们建议的“真实世界”工作负载。例如,他们会写一个脚本来测试插入但不回读一万个文档需要多长时间。我们输掉了市场学习这一仗时,MongoDB出色地掌握了这些工作负载。
  • 一个有用的东西。我们开始建立一个好的数据库系统,但用户想要一个好的办法来做成某件事(例如,一个存储来自hapi的JSON文档的好方法,一个存储和分析日志的好方法,一个创建报告的好方法,等等)

不是我们没有尝试着让RethinkDB快速交付、提高数据库性能、并建立其周边的生态系统,一次让有用的工作做起来更加容易。我们做到了这一点。但是正确、简单和一致的软件需要耗费很长的时间来构建。这使我们落后市场整整三年。

当我们觉得RethinkDB满足了我们原来的设计目标,我们有信心让它投入生产使用时,几乎每个人都在问“RethinkDB与MongoDB有什么不同?”我们努力向他们解释正确性、简单性和一致性更加重要的原因,但这些并不是大多数用户看重的评判标准。

老实说,我们受到了很大的打击。我们无法理解为什么人们会选择一个那样的系统,它几乎不做它自己应该做的事情(存储数据),有一个大的内核锁,随机丢弃错误,在分片的时候停止系统来实现单节点功能,有一个几乎无法正常工作的分片系统,基本上无法保证正确性,并且暴露了很多乱七八糟的没有可辨别的一致性或视觉一致性的接口。

每次MongoDB发布新版本,人们祝贺他们做出改进的时候,我都会感到忿忿不平。他们宣布修复了BKL,但事实上只是把粒度从数据库降到一个集合。他们会添加更多的操作,但只是简单地使用一次性命令,而不是一个适合系统其余部分的组合接口。他们会做分片改进,但很明显,他们不愿意或者没有能力保证数据的一致性。

但随着时间的推移,我学会了欣赏群众的智慧。在需要的时候,MongoDB能将普通开发者立刻变成英雄,而不是在几年后。它存储数据的速度很快,让人们能够快速交付产品。随着时间的推移,MongoDB长大了。他们解决了一个又一个架构上的问题,现在它已经成为了一个优秀的产品。虽然它可能不是我们想要的那么完美,但它把自己的工作做得很好。

到了2014年年中的时候,我们已经清楚地意识到自己无法在与MongoDB竞争了,我们需要走一条与MongoDB不同的路线。我们发现了一种非常优雅的方式来添加实时推送功能,希望能够帮助开发人员构建一个他们之前无法构建的应用程序。但这还不够。我们突然发现自己正与我们之前几乎忽略的Meteor和Firebase公司竞争,而他们已经致力于解决实时问题很多年了。我们再次落后了市场三年,我们再次发现自己无法与其他公司竞争。

云服务

有些人建议我们应该建立云服务。我们实际上是有这个产品的,所以我很愿意聊一下这个有意思的话题。

对于构建云服务的小型数据库公司来说,有一个显而易见的问题,就是:分裂焦点,这也是创业公司常见的失败模式。构建、部署和运营一个可靠的多租户云服务是相当困难的,这需要出色的专业知识和资源,所以如果你沿着这条路走下去,你会发现自己好像是同时运营两家创业公司。但我们面对的是一个生死抉择,而且可以做出抉择的时间越来越短,所以我们还是给了云服务一个机会。

我们的推理是这样的,云数据库可以提供以下三种服务:托管,数据库即服务(DBaaS)或增值平台即服务(PaaS)。让我们使用上面提到的每位员工的收入大约为每年20万美元的经验规则,快速回溯一下市场分析:

/ 托管主机 DBaaS PaaS
公司 Compose.io, mLab FaunaDB Parse, Firebase, Meteor
员工数 ~30 ~30 ~30
收入(美元) < 一千万 < 一千万 < 一千万

可以看出,这些市场很小,甚至比数据库市场本身还小。但是,他们的其中之一会比别人更好吗?

托管主机本质上是为AWS上的人运行数据库。使用这个服务的替代方案是自己在AWS上设置数据库。这很痛苦,但实际上并不是很难。因此,托管数据库服务可以收取多少费用,这有一个非常严格的上限。考虑到Compose.io和mLab提供的MongoDB的用户数比RethinkDB多一到两个数量级,我们认为提供托管服务不会产生太大的影响。

数据库即服务是一个更为复杂的托管服务版本:DBaaS产品完全从用户角度对节点管理进行了摘取。你只需运行查询语句,系统就会为你处理。你无需知道有多少节点在底层运行。这个业务是非常具有挑战性的,部分原因是DBaaS的公司必须与巨型公司(例如DynamoDB和DocumentDB)竞争,部分原因是当客户有这么多的替代品时,他们很难完全将数据管理交给初创公司来做。所以,一个DBaaS产品出来了。

最后一个选择是使用增值平台即服务。我们认为这很有前途,因为在这方面我们有巨大的技术优势。 Firebase和Meteor必须在MongoDB之上构建应用程序级实时逻辑,从根本上限制了实时查询的能力和性能。另一方面,我们控制了技术专利,所以我们具备Firebase和Meteor所没有的显著的优势。

因此,我们创建了Horizon,并开始致力于搭建Horizon Cloud,这是用户部署和扩展RethinkDB/Horizon应用程序的一种方式。我们终于实现了让一个非常小的团队建立三个大型项目(RethinkDB,Horizon和Horizon Cloud)的挑战,我们从未打算在钱用完之前放弃云服务。把荣誉送给工程团队,他们离成功已经非常非常接近了。

最根本的问题

我们还可以做更多的根因分析。为什么我们选择了一个糟糕的市场,为什么我们会按照错误的指标优化产品?

当我还是个小孩子的时候,我想自己制作收音机。我用夹板做了一个盒子,里面放了一些金属垃圾,把盒子连接到电源上。我家里有电子类的书籍,但我从没想过自己需要他们。我坚信念自己可以做出来。最终,我做出了一个可以工作的收音机,但我花了很多年才意识到我需要学习基本的电子学。

早期的RethinkDB跟这个有点类似。我们对产品或市场没有第六感,所以,我们会在不了解我们在做什么的情况下成立了一家公司。更重要的是,我们过于乐观了(人类倾向于把未来估计得比实际情况要好)。我们盲目地相信我们会免受经济和经营业务数学法则的影响。数学,当然,最终让我们尝到了苦果。

为避免出现这些错误,我们可以做些什么呢?现在我已经不可能像一个小孩子那样去制作一台收音机了。不知不觉间,我们已经束手无策,而且这要在若干年之后才会被意识到。

一些人指出,如果我们建立了一支经验丰富的市场团队,我们会做得更好。这绝对是正确的,但我们个人发展的时机并不符合公司的需求。最初,我们不知道我们需要市场专业知识,所以我们并没有这样要求创业团队。当我们建立了一个能很好映射现实的心智模型时,我们发现自己缺乏现金,市场中充满了强劲的丢手,以及一个落后三年的产品。到那时,即使是世界上最好的市场营销团队也无法拯救我们。

离别的思念

许多人对开发工具市场有非常强烈的感觉。工程师喜欢创造开发工具,所以他们迫切希望开发工具公司茁壮成长。

我不愿意完全放弃市场,因为,我不想从这单单一次经历中得出结论;因为,我不喜欢说“它不能做”;因为,有很多例外。 GitHub、MongoDB和Docker已经建立起强大的公司。 GitLab和Unity似乎也发展的不错。

如果你打算成立一个开发人员工具公司,请一定要谨慎细心。市场中有很多不错的替代品。用户期望高,但价格低。请认真思考一下你能为客户提供的价值。记住,想要世界往某个方向发展,但不必一定要让它这样。

2009年,我们在YCombinator演示日把RethinkDB(我们还没有开发出软件)的早期想法展示给了投资者们。我们在幻灯片的最后上写了关键的三点,“如果你只记得RethinkDB的三个事情,请一定要记住这些”。最终,人们没有记住幻灯片的其他东西,但他们确实记住了这三点。

现在我给你们留下这三个要点,请一定要牢记:

  • 选择一个大的市场,但为特定用户制造产品。
  • 学会识别你曾经失去的人才,然后拼命工作,让他们加入你的团队。
  • 系统地学习经济学,它会让你更优秀。
评论