歷時2年、投入100+工程師,Coinbase全面遷移到 React Native

{"type":"doc","content":[{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"移動應用分 iOS 和 Android 兩個平臺以前要分別進行開發,通常很是費時費力。React Native 是 Facebook 在 F8 大會開源的 JavaScript 框架(2015 年 9 月 15 日發佈),可以讓廣大開發者使用 JavaScript 和 React 開發跨平臺的移動應用。在短短不到一年的時間裏,它成爲手機端必不可少的開發模式之一。本文作者介紹了 Coinbase 如何從原生開發遷移到 React Native,以及綠地法和棕地法的優劣之處。綠地法就是從零開始使用一個全新的系統,而不摻雜任何過去的東西,就像一片綠地,從未受到過任何以往開發的影響。而棕地法,是從現有系統開始的,只是一些重要的部分有所更改。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Coinbase 的 iOS 和 Android 應用程序從 2021 年 1 月開始從原生開發過渡到 "},{"type":"link","attrs":{"href":"https:\/\/reactnative.dev\/","title":null,"type":null},"content":[{"type":"text","text":"React Native"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":",現在所有的移動工程師都在一個代碼庫中協同工作。爲幫助那些正在考慮從原生過渡到 React Native 的人們,我們想要告訴他們,我們是如何做到這一點的,從原生到 React Native 的過渡並非一蹴而就。具體地說,我們希望分享我們深思熟慮的、系統的測試和觀察結果的過程,然後通過越來越多的有影響力的實驗來增加賭注,因爲這些實驗對於遷移的成功至關重要。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Coinbase 正確地看待了這項技術變革的影響,它爲 5600 萬用戶提供金融服務,僅在 "},{"type":"link","attrs":{"href":"https:\/\/s27.q4cdn.com\/397450999\/files\/doc_financials\/2021\/q1\/Q1'21-COIN-Shareholder-Letter-FINAL.pdf","title":null,"type":null},"content":[{"type":"text","text":"2021 年第一季度"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"就創造了 18 億美元的收入。功能性的退步或者性能的下降都會給客戶和業務帶來嚴重的影響。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"同樣值得注意的是我們原生代碼庫的規模。向 React Native 遷移意味着重新實現超過 200 個屏幕,其中很多包含大量業務邏輯。這種遷移也包括對 30 多個原生工程師進行"},{"type":"link","attrs":{"href":"https:\/\/blog.coinbase.com\/lessons-from-training-teams-to-use-react-native-67ec78b9ab7a","title":null,"type":null},"content":[{"type":"text","text":"再培訓"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" ,同時繼續在開發新功能和淘汰遺留應用方面取得進展。儘管移動的部分很多,但是我們能夠在遷移的每個階段都提供顯著的產品性能改善。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/dd\/1c\/ddda3c8cf37dd75d752256d9481e911c.jpg","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"2012 年 Coinbase 成立時,它只有一個網站。2013 年,我們啓動了移動項目。首先發布的 "},{"type":"link","attrs":{"href":"https:\/\/blog.coinbase.com\/the-coinbase-ios-app-has-launched-74514e3c87e7#:~:text=Update%20June%2019th%2C%202014%3A%20A,secure%20and%20safe%20to%20use.","title":null,"type":null},"content":[{"type":"text","text":"iOS"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" 和 "},{"type":"link","attrs":{"href":"https:\/\/blog.coinbase.com\/the-coinbase-android-app-has-launched-b0bcc0963447","title":null,"type":null},"content":[{"type":"text","text":"Android"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" 應用是原生的,它們分別由 Objective-C 和 Java 編寫。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"到 2017 年,我們擁有一支由 Android 和 iOS 工程師組成的小團隊來開發這些應用程序,但是儘管我們竭盡全力,卻仍然難以實現擴展。在這一年內,我們只僱傭了一半的移動和網絡工程師。另外,儘管網絡工程師的生產率顯著提高,但移動工程師的平均工作速度仍處於停滯狀態。在 2018 年,隨着我們的擴展努力繼續產生令人失望的結果,我們需要提高移動平臺的增長速度和迭代速度,這一點變得越來越明顯。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"因爲我們需要改變戰略,所以決定退後一步,從第一原理的角度出發,考慮如何構建產品。在 Coinbase,主要功能由跨職能團隊構建和維護,通常由 2 個後端工程師和 2 個前端工程師組成,每個支持的平臺(網頁、 iOS 和 Android) 都有。這個結構需要很多工程師來維持我們產品的垂直結構。它還意味着,工程師們與在同一平臺上工作的其他工程師之間存在一定的隔閡,因此難以協調更大的系統變革。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"考慮到這一點,我們提出了這樣一個問題:如果能夠將一個健全的功能團隊從 8 個(每對客戶工程都獨立於一個平臺) 減少到 5 個,那麼多個客戶工程師就能夠在這三個平臺上工作,情況會怎樣?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"這將大大減少我們對人才的需求,提高團隊的工作效率,並在我們的客戶平臺上增加工程師之間的聯繫。與此同時,我們也相信提高效率不能是唯一的目標,任何技術上的改變都必須提供給我們的客戶更好的品質和性能。這一思想指導我們研究各種跨平臺技術。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在這個階段,我們已經擁有了一個運行良好的網絡工程平臺,該平臺基於 React。經過對多種不同跨平臺技術平臺的研究,我們認爲 React Native 將是最好的選擇。它利用了我們已知的技術棧,爲移動和網絡的進一步整合提供了一條清晰的路徑。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"當我們在技術平臺上達成一致後,就制定了在產品表面進行逐步探索的計劃。我們希望從風險較低的領域開始,減少遷移的風險,然後隨着能力和信心的提高,範圍和影響會逐漸擴大。在數月的初步研究之後,我們確定了一個由以下三部分組成的策略:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"從綠地探索開始"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。我們決定,實驗 React Native 的第一個地方是一個完整的綠地環境,在這裏我們無需 React Native 集成複雜性 <> React Native 集成就可以評估技術。從前端的角度來看,Pro 是我們性能最密集、最複雜的產品,並且在很長一段時間裏,用戶一直要求開發移動應用程序。這看起來是我們探索的完美候選者。假如 React Native 能夠處理 Pro 移動應用的需求,包括技術挑戰,比如實時價格和深度圖(depth chart),那麼我們就會對它能滿足其他產品的需求充滿信心。這個項目也讓我們能夠評估開發者的速度,並確保能夠對網絡工程師進行交叉培訓,從而成爲高效的 React Native 工程師。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"探索棕地重寫會是什麼樣的"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。接下來我們要探討的領域是棕地整合,它將 React Native 整合到現有的原生應用程序中。通過 React Native,我們重建了登錄流程,然後將這些流程分享給 Pro 移動應用(React Native)和主要的 iOS 和 Android 應用(都是原生的)。目前,Coinbase 支持 100 多個國家,而且由於不同的司法管轄區有不同的監管要求,我們的註冊體驗需要動態變化:適應每個用戶的地點和身份信息。在我們的移動應用程序中,這些過程是最古老、最複雜的部分;即使是增量更改,實施起來也非常昂貴。重新實施這些功能將花費巨大,因爲隨着獨立的 Pro 產品的發佈,這將是一個很好的機會,因爲我們可以在棕地環境中探索 React Native,並在兩個應用程序之間創建一個共享的登錄流程。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"基於這些綠地和棕地解決方案的開發經驗,全面重寫我們的核心產品"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。在前兩個階段中,如果成功了,就假定我們能夠在 React Native 中完全重寫 Coinbase 的主要應用。在最初指定戰略時,我們不能確定這次重寫是增量的棕地重寫(逐步重寫屏幕)還是綠地重寫(從零開始)。這一實施細節就留給了我們在前兩個階段中所學的東西。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在制定了長期戰略之後,我們開始開發 Pro 移動應用程序。在六個月的構建之後,Pro 移動應用程序在 2019 年 10 月"},{"type":"link","attrs":{"href":"https:\/\/blog.coinbase.com\/introducing-the-coinbase-pro-mobile-app-9b8f2e132ad","title":null,"type":null},"content":[{"type":"text","text":"發佈"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":",超出了我們的預期。在這一過程中,我們看到了積極的業務成果,對平臺上的性能挑戰以及解決方案有了很好的理解,並開始充分意識到 React Native 可能帶來的開發者生產力的階躍函數變化。它還讓我們看到,網絡工程師能夠在相對較短的時間內成爲高效的 React Native 開發者。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"受 Pro 移動應用程序成功的鼓舞,我們開始了第二階段,對登錄流程進行棕地重寫。這個從 2019 年年中開始,6 個月後"},{"type":"link","attrs":{"href":"https:\/\/blog.coinbase.com\/onboarding-thousands-of-users-with-react-native-361219066df4","title":null,"type":null},"content":[{"type":"text","text":"交付"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"的項目,又一次實現了我們所設定的質量和商業目標。由於登錄模塊是用 React Native 編寫的,因此可以在 Coinbase 和 Pro 移動應用程序之間進行共享。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"儘管登錄重寫的結果無疑是積極的,但棕地方法也存在挑戰。舉例來說,每次對登錄模塊的修改都需要重建帶有原生綁定的包,然後使用共享模塊重建原生應用程序,並進行手工測試。如果工程師僅有網絡或原生經驗,那麼這一過程尤其令人沮喪,因爲對共享代碼的迭代可能要求他們瞭解這三個平臺。而且,因爲這種開發方式可能比完全的原生開發更耗時,所以它讓一些工程師 (包括網絡工程師和原生工程師) 開始思考爲什麼我們會爲 React Native 而煩惱。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"如果讀過 Airbnb 優秀的 "},{"type":"link","attrs":{"href":"https:\/\/medium.com\/airbnb-engineering\/sunsetting-react-native-1868ba28e30a","title":null,"type":null},"content":[{"type":"text","text":"Sunsetting React Native"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" 文章,你可能會對這些挑戰感到熟悉。爲了學習 Airbnb 的工程師們的經驗教訓,我們花了很多時間和他們交流。非常感謝該團隊分享了他們這一旅程的細節,因爲這些信息對確定 Coinbase 的最佳路線是非常有價值的。其中一個主要收穫就是棕地法似乎是他們面臨的衆多挑戰的核心。增量遷移的想法最初看起來是有吸引力的,它可以利用 React Native 的優勢實現新功能,而無需完全重寫全部的前期成本,但是從長期來看,它帶來了技術和文化遷移的重大風險。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"以這些觀察爲背景,加上我們的兩個成功項目,我們相信 Coinbase 移動應用程序的平臺重建將會取得進展。我們決定:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"numberedlist","attrs":{"start":null,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"首先我們要重寫 Android 應用"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。我們認爲 Android 是這兩個平臺中更困難的,並且認爲如果我們能夠在質量、性能和速度的角度來完成它,就會有一條清晰的路徑來在 iOS 上快速推廣。首先建立 Android 系統也使我們能夠繼續全速推進原生 iOS 系統,確保我們的客戶在重寫過程中能看到體驗的改善。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"我們會進行完整的綠地重寫,而不是採取棕地 \/ 零碎的方法"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。基於我們自己的經驗(Pro 版和登錄模塊)以及 Airbnb 等公司的經驗,我們得出結論,棕地項目增加了複雜性,引入了“陷入”中間狀態的風險,併爲不同平臺上的工程師之間長期存在的文化分歧創造了空間。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"以目前使用 React Native 的速度,我們估計能在 6 個月內完成對產品的全面重寫。同時,我們也相信,在重寫之後擁有一個統一的平臺的好處大於最終決定放棄這個項目的代價。我們在 2020 年 3 月開始重寫 Android 應用平臺,並在將近 6 個月之後交付了完全重寫的 Android 應用。我們將重寫工作作爲一項實驗推出,並對其結果進行測量,結果表明,它在我們所針對的關鍵指標上有積極的影響。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"由於 Android 系統取得了積極的成果,我們決定對 Coinbase 的 iOS 應用程序進行平臺重建。在接下來的一個季度裏,我們 “追趕”了 iOS 團隊與 Android 重寫同步構建的關鍵功能。作爲實驗,我們將新的 React Native 代碼庫發佈給 iOS 客戶,並與 2021 年 1 月下旬完成了發佈工作。和 Android 類似,我們也看到關鍵指標對我們的目標產生積極影響。通過在 iOS 發佈 React Native,我們已經完成了產品到這個新技術平臺的全面遷移。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在 2020 年中期,我們大約有 7 名 Android 工程師和 18 名 iOS 工程師在從事 Coinbase 的移動應用程序的開發。Coinbase 的 React Native 至今已有 113 個貢獻者,包括許多網絡工程師,這些人以前不能在移動端做出貢獻。對於交叉培訓原生移動工程人才,我們也看到了積極的成果,技術變革並沒有引起減員現象。來自 iOS 和 Android 背景的工程師已經做出了高影響力的貢獻。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"我們的團隊也已經開始按照在 2018 年的預期進行結構化,組建了統一的客戶團隊,在三個平臺上開展工作。當前,這些客戶團隊在網絡和移動領域還不能完全融合,但我們正在逐步實現這一目標。並且我們認爲,過渡到 React Native 僅僅是爲所有 Coinbase 應用程序創建一個統一的單一客戶平臺的第一步。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"目前,我們已從 3 個應用平臺減少到 2 個:React Native 和 React Web,但我們希望減少到 1.5 個,並且已爲 2021 年制定了實現這一目標的雄心勃勃的路線圖。我們正在構建跨平臺的設計系統,一個基於 GraphQL 的通用數據層,以及融合網絡和移動工具所需的基礎。我們想象這樣一個世界:工程師們能夠爲我們的網絡和移動應用交付一種功能,而只需進行最少的上下文切換,就能重新將效率方面的提高體現在我們的應用質量上。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"從想法到最終在 iOS 上推出,我們用了兩年的時間進行探索、實驗和執行。同時,我們也認爲,在統一的客戶端平臺上所完成的工作仍處於起步階段。以下是我們的研究和里程碑的時間線:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"2018 年 12 月"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":":Coinbase 的一項提案被一位工程師所分享,旨在探索 React Native 作爲移動平臺的可能性。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"2019 年 3 月"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":":Coinbase 團隊的成員研究了跨平臺的幾個技術方向,並決定使用 React Native 來推進。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"2019 年 4 月"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":":開始開發 Coinbase Pro 移動應用程序。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"2019 年 7 月"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":":統一移動登錄(Unified Mobile Onboarding)項目啓動。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"2019 年 10 月"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":":Coinbase Pro 移動應用在 App Store "},{"type":"link","attrs":{"href":"https:\/\/blog.coinbase.com\/introducing-the-coinbase-pro-mobile-app-9b8f2e132ad","title":null,"type":null},"content":[{"type":"text","text":"發佈"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"2019 年 11 月"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":":在 Coinbase.com 和 Pro 上"},{"type":"link","attrs":{"href":"https:\/\/blog.coinbase.com\/onboarding-thousands-of-users-with-react-native-361219066df4","title":null,"type":null},"content":[{"type":"text","text":"推出"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"統一的移動登錄服務。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"2020 年 3 月"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":":開始全面重寫 Coinbase Android 應用程序。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"2020 年 7 月"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":":Coinbase 的所有 Android 和 iOS 工程師都可以選擇通過"},{"type":"link","attrs":{"href":"https:\/\/blog.coinbase.com\/lessons-from-training-teams-to-use-react-native-67ec78b9ab7a","title":null,"type":null},"content":[{"type":"text","text":"內部培訓"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"計劃來提高 React Native 的能力。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"2020 年 10 月"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":":重寫後的 Coinbase 應用在 Android 系統上推出,Coinbase 承諾將重建 Coinbase.com iOS 應用。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"2021 年 1 月"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":":Coinbase 的 iOS 應用程序已經推廣到 100% 的用戶。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"未來幾個月,我們將發佈更多關於我們的經驗的文章,對一個全球 5600 多萬用戶使用的移動應用進行平臺重建。我們將發表文章,探討 React Native 所面臨的技術挑戰以及我們一路走來的經驗教訓。但願我們的應用程序能夠爲那些考慮使用 React Native 大規模構建產品的人們提供一個重要參考。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"Coinbase 簡介:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Coinbase 成立於 2012 年,美國比特幣和其他數字貨幣交易平臺。2015 年 1 月 21 日上午,據美國《財富》報道,比特幣公司 Coinbase C 輪融資 7500 萬美元,這是比特幣公司截止 2015 年 1 月 21 日獲得的最大一筆融資。截至 2021 年 3 月,Coinbase 是美國交易量最大的加密貨幣交易所。2021 年 4 月 14 日,Coinbase 在納斯達克成功上市。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"原文鏈接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"https:\/\/blog.coinbase.com\/announcing-coinbases-successful-transition-to-react-native-af4c591df971"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章