創新性系統設計的三種避雷方法 - Apenwarr
研發創新性產品或系統之前必須考慮的三個問題:第二系統問題、雞與蛋問題和分佈與集中的選擇問題。
有兩種創新:持續創新和顛覆性創新。
可持續發展是大公司最擅長的一種。如果您想製造最快的x86處理器,沒有人會比Intel做得更好(AMD有時會緊跟其後)。英特爾竭盡全力使他們的x86處理器變得更好。他們還收取最高的利潤,這意味著最大的利潤,這意味著可以將最多的錢投入到更具可持續性的創新中。沒有兩難選擇。他們浪費了金錢和工程師,併為此付出了很多時間,而且他們大都實現了目標,並且得到了回報。
“顛覆性/破壞性/disruptive”創新的意思是專門指那種型別:一種全新事物被壓抑了很長時間,然後突然爆發把豬都能吹飛的那種。
如果您是一家初創公司,並且認為自己具有真正的顛覆性創新,那麼對您來說是個好訊息。這是一個尷尬的投資者問題的完美答案,“如果(大公司)也決定這樣做呢?” 因為誠實的道理是“他們自己的政治將把這種主動性從內部撕裂”。
第二系統
第二系統效應,這個術語來自Fred Brooks的出色著作《神話人月》。
透過以下步驟產生第二種系統效果:
- 最初的產品從小規模開始,然後逐步構建,開始時預算較低且使用者很少。
- 隨著時間的流逝,該產品越來越受歡迎並開始盈利。
- 系統不斷髮展,越來越多的駭客入侵,早期的設計折衷開始成為瓶頸。
- 工程師們想出了一個新的設計,可以解決我們所知道的所有錯誤,以及更多的錯誤!(他們可能是正確的。)
- 由於該產品已經很受歡迎,因此很容易證明花時間“這次做對”和“為未來10年構建一個強大的平臺”是合理的。因此,啟動了一個專案以從頭開始重寫所有內容。預計需要幾個月,甚至幾年,以及一支龐大的工程團隊。
聽起來有點熟?早在1975年撰寫本書時,人們就在嘗試這種方法,而現在仍在嘗試。它很少進展順利;即使它確實起作用,也非常痛苦。
第二系統不僅僅是昂貴的,或可能會使您的公司破產或破壞您的使用者社群。對Perl 6的關注嚴重削弱了Perl的進度;關於Python 3的工作使python社群破裂了十多年(現在仍然如此);儘管25年後建立的IPv6問題已經過時,但IPv6仍頑固地仍在嘗試棄用IPv4。
至於解決方案,除了要盡最大努力防止第二種系統影響外,沒有太多要說的。這完全是自欺欺人的。重構程式碼。即使似乎增量主義會做更多的工作,這也是值得的。
並行維護兩個系統比您想象的要昂貴得多。
弗雷德·布魯克斯(Fred Brooks)在他的書中故意將其稱為“第二”系統,因為他認為,一旦經歷了一次,任何設計師都將逐步構建其第三和以後的系統,因此他們知道後也許不必再經歷這一過程。
一個更尷尬的相關問題是,大公司試圖為自己的第一個系統構建替代產品,但是第一個系統的開發人員已經離開或已經學習了第二個系統課程,並且不願意玩這種遊戲。
這樣,就組成了一個新團隊來製造替代產品,而沒有建立第一個替代產品的經驗,但是擁有一組對其表面缺陷有深刻經驗的使用者的所有信心。無論如何,如果您發現自己正在構建或使用這樣的產品,我表示哀悼。您可以期待數年的痛苦。
雞蛋問題
原型系統設計中的另一個問題是“雞-蛋問題”,簡稱:先有雞還是蛋?
在構建軟體或釋出產品時,雞蛋問題一直存在。HTML5 Web瀏覽器或HTML5 Web內容哪個先出現?當然沒有。它們以鬆散同步的方式發展,追溯到HTML本身之前的第一個HTML實驗和方式,然後慢慢發展,然後迅速普及。
由於採用新技術不是免費的(以美元,時間或兩者兼而有之),因此除非人們看到了一些價值,否則人們不太可能採用它,但是反過來,也只有當他們看到了價值,價值才會存在的。這就是雞與蛋問題。
辦法是:降低採用成本,並在使用者較少的情況下提供更大的價值。
影片遊戲機製造商(任天堂,索尼,微軟)已經熟練掌握了這一技術。他們是我認識的唯一每隔幾年就故意這樣做的人。他們使用的一些技巧是:
- 補貼早期遊戲機銷售的成本。
- 向後相容,因此購買者甚至可以在沒有太多本機內容之前就使用較舊的遊戲。
- 在新遊戲機上“基本相同”但“看起來更好”的遊戲。
- 兩代人之間相容的遊戲手柄,因此開發人員可以更輕鬆地移植舊遊戲。
- “獨家發行標題”:聯合營銷,可確保為消費者(新遊戲!)和內容製作者(遊戲邦注:補貼,免費廣告,更高的價格)預先提供價值。
IPv6除非100%全部部署它,否則幾乎對任何人都沒有任何價值(價值就是因此我們最終可以關閉IPv4!),但是卻立即增加了複雜性和維護(構建和執行整個系統)並行網際網路)。(banq注:5G問題是不是也類似這樣呢?)
如果您的產品或公司遇到雞與蛋問題,而您又不能清楚地闡明解決問題的具體計劃,那麼投資者絕對不應該投資於您的公司。解決雞蛋問題應該是您列表中的第一件事,而不是事後的想法。
還有更多更高階的雞蛋問題:Facebook是基本形式:使用Facebook人越多,使用者彼此之間獲得的價值就越大;類似傳真是基本形式:擁有傳真機的人越多,使用者彼此之間獲得的價值就越大。(如微信)
下一個升級是雙向市場,例如Uber或Ebay。除非有司機,否則任何人都無法搭Uber車;但司機除非他能上班賺錢,否則不願為Uber工作。優步必須吸引這兩種使用者(更糟糕的是:在同一地理區域!在一天中的同一時間!),然後再從這兩種交易中獲得任何收益。這很難。他們決定用自己的方式走向成功。
我知道最困難的水平是三邊市場。例如,UberEats將消費者,駕駛員和餐館聯絡起來。進行三方市場滾動非常複雜,昂貴且容易失敗,因為:Uber優步已經在其網路中擁有了消費者和驅動程式,只需要在市場上增加“更多方面”即可。
如果您要建立一個單面,雙面或三面市場,則最好了解系統設計:雞肉和雞蛋。
層次結構和權力下放比較
讓我們從一個顯而易見的問題開始:集中式控制結構與分散式控制結構的問題。如果我問您什麼是更好的組織結構:一個層次結構組織或扁平組織,大多數人都被灌輸說後者。同樣,如果我問您是應該使用舊的集中式資料庫還是精美的分散式資料庫,那麼每個人都希望構建後者。
我聽說,貨幣的未來是分散式去中心化加密貨幣。如果您想擊敗審查制度,則需要一個分散式的社交網路。趨勢很明顯。有什麼要辯論的?
實際的結構要比這複雜得多。關於這個主題,我所知道的最好的介紹性文章是喬·弗里曼(Jo Freeman)的 The Tyranny of Structurelessness,:這種明顯的權威結構背後存在一種非正式的、未得到承認的和不負責任的領導,這種領導由於其存在被否認而更加有害。
“非正式,未經確認和不負責任的”控制在分散式計算系統中和在人類社會系統中一樣普遍。
設計無層次、“扁平”控制系統的嘗試都只會移動中央控制點直到您看不到它為止。人類社會結構都有領導者,無論是隱性的還是顯性的,顯性的領導者往往更加多樣化。
網際網路取決於中央控制的DNS和中央批准的TLS證照頒發者;全球網際網路依賴於一個小團體來解決路由問題;區塊鏈取決於那些可以決定在本週是否分叉的人!誰來經營受人歡迎的交易所;分散式無線電網路取決於中央政府頻譜許可證。民主取決於行使您的投票權的人。資本主義取決於執行“自由”市場規則的人。
在我的第一家初創公司中,我們試圖將開發團隊作為一個統一的組織來運作,在這裡,每個人都聽取了他們的意見,每個人都可以辯論做某事的最佳方法。總體共識是,我們大都成功了。但是,當我的一位同事隨後對我說:“我們的團隊感到平等,但是,您永遠不會忘記那只是您被強迫成那樣的。“
確實存在分散式系統。地球的生態系統也許就是其中之一(儘管它變得越來越脆弱,並依賴於人類不破壞它)。使用Raft共識或類似演算法的真正分散式資料庫肯定存在並且可以正常工作。分散式版本控制(例如git)實際上是分散式的,儘管諷刺的是Git最終還是透過Github之類將其用法重新集中了。
CAP定理也許是分散式系統中一致性,可用性和“分割槽容忍度”之間折衷的最著名說法。通常,我們認為CAP定理適用於資料庫,但適用於所有分散式系統。集中式資料庫在一致性和可用性方面做得很好,但在分割槽容忍度上卻很爛,威權結構都是如此。
在系統設計中,很少有適用於任何地方的正確答案。但是對於集中式系統還是分散式系統,我的經驗法則是完全按照Jo Freeman的建議進行操作:至少確保控制結構明確。當它是顯式的時,您可以除錯它。
詳細點選標題!
相關文章
- hbase統計表的行數的三種方法
- 從《Project Makeover》的成功,談談它對三消+遊戲系統設計與創新的啟示Project遊戲
- 出色效能+創新設計 新華三AMD伺服器伺服器
- 複雜性系統設計:福特CEO談特斯拉的三個特點
- 雙相超程式設計:一種新語言設計方法程式設計
- 系統設計的三板斧
- 一種介面設計方法,最終一致性方法
- 線性思考、設計思考和系統思考三者權衡
- Python判定IP地址合法性的三種方法Python
- CRM系統和ERP系統的三種區別
- 疫苗接種管理系統的設計與開發
- 秒殺系統設計中的業務性思考
- 電腦系統崩潰怎麼修復 修復電腦系統的三種方法
- 19種分散式系統設計模式 - Nishant分散式設計模式
- windows10系統設定相容性檢視的方法Windows
- 互操作性的區塊鏈系統設計理念區塊鏈
- OpenTracing——設計分散式追蹤系統的有效方法分散式
- 部落格系統 - 資料庫設計(三)資料庫
- 【Google設計衝刺】一種適合於創新小組的協作方式Go
- 教你避雷!網頁設計中常見的17個UI設計錯誤集錦(附贈設計技巧)網頁UI
- Principle - 創新您的介面設計 mac版Mac
- DDD聚合五種設計方法
- VC啟動一個新執行緒的三種方法執行緒
- 遊戲設計如何創新?——給玩家新的體驗遊戲設計
- 23種設計模式(四)- 模板方法設計模式設計模式
- Rust 的三種多型性Rust多型
- 程式設計師做自己的產品 “線上客服系統” 之:種子使用者的重要性程式設計師
- Java常見的系統屬性值及如何通過Java程式設計獲得系統屬性值Java程式設計
- 非同步系統的兩種測試方法非同步
- Mac 系統重新安裝的幾種方法Mac
- 揭秘!閒魚拉新投放系統如何設計
- 各種系統參考設計網址 比如ERP
- JavaScript非同步程式設計的6種方法JavaScript非同步程式設計
- Grab是如何設計彈性系統:斷路器
- 設計模式:三種工廠模式設計模式
- 用Python統計次數的5種方法Python
- 《碧藍幻想:Versus》的創新戰鬥系統
- win10系統ie設定相容性檢視設定方法Win10