Coinbase'in React Native'e Geçiş Hikâyesi
(blog.coinbase.com)Kısa süre önce bir Coinbase geliştiricisi, yeni Coinbase uygulamasının RN ile yazıldığını Twitter'da paylaşınca küçük çaplı bir gündem oluşmuştu (https://twitter.com/htormey/status/1392161714250993667); bunun ayrıntıları da Medium'daki bir yazıyla paylaşıldı. İlgili tweet dizisine göre bazı native modüller bulunsa da uygulama kod tabanının yaklaşık %97'si TypeScript'ten oluşuyor.
Aşağıda özgün içeriğin özet çevirisi yer alıyor:
-
Mevcut iOS ve Android native uygulamaları varken RN'e geçiş yapıldı. Geçiş sürecinde 200'den fazla ekrandan oluşan devasa native uygulamanın yeniden uygulanması gerekti ve 30'dan fazla mevcut native mühendisine bu dönüşüm için şirket içi RN eğitimi verildi.
-
Büyük çabanın ardından, native döneme kıyasla performans metrikleri, iş metrikleri, uygulama puanı, 7 günlük crash-free kullanıcı yüzdesi, Cold Start süresi, sekmeler arası geçiş süresi gibi tüm temel göstergeler korundu ya da iyileşti.
-
İlk uygulama 2013'te yayınlandı ve 2017 civarında Android/iOS taraflarında ayrı ayrı küçük ekipler vardı; ancak işe alım, web geliştiricilerine kıyasla çok daha zordu ve web platform teknolojilerinin gelişim hızı karşısında native platform teknolojilerinin üretkenlikte geride kaldığı hissediliyordu. Birkaç başarısız denemenin ardından 2018'de mobil platformun iterasyon hızı ve büyüme oranının iyileştirilmesi gerektiği netleşti.
-
Coinbase, ürünü nasıl geliştirdiğini temelden yeniden düşünmeye karar verdi. Ana özellikler fonksiyonel organizasyonlar halinde çalışıyordu; her biri için 2 backend geliştiricisi ve her platformda (Web, Android, iOS) 2'şer istemci geliştiricisi bulunuyordu, yani tek bir dikey alan için bile fazla sayıda kişiye ihtiyaç vardı. Bir özellik ekibindeki minimum geliştirici sayısını 8'den yaklaşık 5'e düşürmenin ve istemci geliştiricilerin birden fazla platformu kapsamasının mümkün olup olmayacağını düşünmeye başladılar.
-
Bunun ekip kurulumundaki asgari gereksinimleri hafifletmesi, geliştirmeyi daha verimli hale getirmesi ve istemci geliştiriciler arasındaki ortak çalışma alanını artırması bekleniyordu. Elbette sadece verimlilik yeterli değildi; bu yatırımın anlamlı olması için müşterinin hissettiği performans ve kalite de aynı süreçte iyileşmeliydi.
-
O dönemde zaten React tabanlı, oldukça olgun bir web platform ekibi vardı. Çeşitli çapraz platform seçenekleri değerlendirildikten sonra, zaten kullanılan tanıdık teknolojiye dayanması ve web ile mobilin birleşmesi için net bir yol sunması nedeniyle RN seçildi. Hâlihazırda çalışan native uygulamaların da taşınması gerektiğinden, kademeli ve sarsıntısız bir geçiş için birkaç aylık ön teknik değerlendirme ve strateji oluşturma süreci geçirildi.
-
İlk adım olarak RN ile native'in entegre olmasına gerek olmayan bir greenfield projeyle başlamanın iyi olacağı düşünüldü. Coinbase içinde de karmaşık kabul edilen, gerçek zamanlı fiyat grafikleri ve depth chart gibi performans açısından kritik özellikleri bol olan ve o dönemde mobilde sunulmayan Pro adlı web ürününü önce uygulama haline getirmeye karar verdiler. Pro, RN ile başarılı şekilde geliştirilebilirse geri kalan daha az karmaşık ve performans gereksinimi daha düşük özelliklerin de sorunsuz taşınabileceği varsayıldı.
-
Sonraki adımda Pro ile mevcut uygulamanın paylaştığı onboarding akışı RN ile uygulanıp mevcut native uygulamaya eklendi. Hizmet verilen bölgeler çok çeşitli olduğundan onboarding bölümü uygulamanın en karmaşık parçalarından biriydi ve mevcut durumda el sürmesi çok zordu. Pro için yeniden inşa edilirken mevcut uygulamanın refactor edilmesine de katkı sağlaması umuldu.
-
Son olarak, önceki iki aşamada elde edilen deneyim ve bilgiye dayanarak mevcut native uygulama RN ile yeniden yazıldı. Planlama aşamasında bunun tam bir full rewrite mı olacağı, yoksa native uygulama içinde RN oranının kademeli olarak artırıldığı bir yapı mı olacağı belirsizdi; kararın önceki iki adımın sonuçlarına göre verilmesi planlandı.
-
Strateji oluşturulduktan sonra Ekim 2019'da Pro mobil uygulaması yayınlandı ve sonuçlar beklentilerin üzerindeydi. İş sonuçları iyiydi, performans sorunlarının nerelerde ortaya çıktığı ve nasıl çözülebileceği öğrenildi, RN'in sunduğu üretkenlikten son derece memnun kalındı ve web mühendislerinin kısa sürede RN üzerinde verimli olabildiği de doğrulandı.
-
Bunun verdiği ivmeyle onboarding akışının yeniden yazımına da başlandı; benzer şekilde hem iş hedefleri hem de uygulama kalitesi açısından hedefler karşılandı.
Onboarding akışının yeniden yazımının sonucu iyi olsa da, mevcut uygulamaya RN eklemenin zor olduğu fark edildi.
Sadece web ya da sadece native geliştirmeye kıyasla üretkenlik de daha düşüktü; bu yüzden her iki tarafta da “öyleyse neden RN kullanıyoruz?” diye düşünen mühendisler ortaya çıktı. (Bu, Airbnb örneğine çok benziyordu ve gerçekten de Airbnb mühendisleriyle konuşarak çok şey öğrendiler.)
-
Sonuç olarak bu dersler, native ve RN'i birlikte götüren brownfield yaklaşımının tüm sorunların kaynağı olduğu sonucuna götürdü ve mevcut uygulamanın tamamını RN ile yeniden yazmaya karar verildi.
-
İki platformdan Android uygulamasının taşınmasının performans ve üretkenlik açısından daha zor olacağı düşünüldüğünden önce Android yeniden yazım hedefi olarak seçildi. Önceki deneyimlere dayanarak full rewrite'ın yaklaşık 6 ay süreceği öngörüldü; ancak ortaya çıkacak kazanımların maliyeti aşacağı düşünüldü.
-
Mart 2020'de Android uygulamasının yeniden yazımına başlandı ve gerçekten de yaklaşık 6 ay sürdü. Ardından gelen iOS yeniden yazımı da Ocak 2021'de tamamlandı. Her iki platformda da temel metriklerde güçlü sonuçlar elde edildi.
-
2020 ortasında Coinbase'te 18 iOS mühendisi ve 7 Android mühendisi vardı. Mayıs 2021 itibarıyla Coinbase'in RN deposunda 113 katkıcı bulunuyor; bunların arasında daha önce mobile katkı veremeyen çok sayıda web mühendisi de yer alıyor.
-
Native mühendislerin RN mühendisine dönüşmesi için verilen eğitim büyük bir sürtünme yaşamadan ilerledi ve native geçmişe sahip mühendisler bugün RN uygulamasında yüksek performans gösteriyor. Henüz kusursuz olmasa da başlangıçta hedeflendiği gibi her fonksiyonel organizasyonda tek bir “istemci ekip”in tüm istemci platformlarını kapsadığı bir yapıya doğru gidiliyor.
-
Üç platform (React, iOS, Android) iki platforma (React, RN) düşmüş oldu; sonraki adımda bunu 1,5 platforma indirmeyi hedefliyorlar. Web ve RN arasında paylaşılan tasarım sistemi, GraphQL tabanlı ortak veri katmanı ve altyapısal tooling paylaşımı planlanıyor. Amaç, bir mühendisin mümkün olan en az context switching ile hem web hem de mobilde tüm platformlara özellik dağıtabilmesi.
-
Bundan sonra da teknik zorluklar ve bu süreçte edinilen deneyimler gibi RN ile ilgili daha fazla makale paylaşmayı planlıyorlar.
2 yorum
Laftel'in RN'ye geçiş hikayesi aklıma geldi.
https://ridicorp.com/story/react-native-1year-review/
Yerli şirketler için de çok faydalı olabilecek bir yazı gibi görünüyor. Özet çeviri için teşekkürler!