當咱們宣佈RethinkDB關閉時,我答應寫一個調查分析。我花了一些時間來整理所得的教訓和經驗,如今能夠清楚地寫出來。html
在HN討論貼中,人們提出了許多關於爲何RethinkDB失敗的緣由,從莫名的人性和聰明的MongoDB營銷人員;到沒有創建一個有經驗的上市團隊;再到缺少支持超過64-bit float 的數字類型……我將這些意見集中到這裏。git
其中一些緣由確實是真的,但它們是症狀而不是緣由。例如,說咱們未能賺錢的,它並無說明咱們失敗的緣由。github
過後看來,有兩個重要的緣由致使了咱們的失敗 —— 咱們選擇了一個可怕的市場,並地按照錯誤的指標對產品進行優化。每一個錯誤均可能使RethinkDB的估值下降一到兩個數量級。所以,若是咱們認爲它們其中之一是正確的,那麼RethinkDB將是MongoDB的大小,若是咱們認爲它們兩個都是正確的,咱們最終多是紅帽的大小(不要覺得這些數字很接近,它會讓你知道這些錯誤的代價)。數據庫
可怕的市場api
咱們的想法是這樣的:新公司不是在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的三個事情,」咱們說,「記住這些。」人們沒有記住幻燈片的其餘東西,但在結束時他們確實記住了三點。
若是你還記得這篇文章的任何內容,我但願你記住這三點:
選擇一個大市場,但爲特定用戶製造產品。
學會認識你失去的才能。
系統地讀經濟學。它會讓你更快更好。
編譯自:http://www.defstartup.org/2017/01/18/why-rethinkdb-failed.html
編譯:開源中國
http://www.oschina.net/news/81180/rethinkdb-why-we-failed