Kisah adopsi React Native di Coinbase
(blog.coinbase.com)Baru-baru ini, seorang developer Coinbase membagikan di Twitter bahwa aplikasi Coinbase yang baru ditulis dengan RN, dan hal ini sempat menjadi perbincangan kecil (https://twitter.com/htormey/status/1392161714250993667). Detail lebih lanjut tentang hal tersebut kemudian dibagikan melalui sebuah artikel di Medium. Menurut utas tweet terkait, memang ada beberapa modul native, tetapi sekitar 97% codebase aplikasi ditulis dalam TypeScript.
Berikut adalah ringkasan terjemahan dari isi artikel aslinya:
-
Migrasi ke RN dilakukan dalam kondisi aplikasi native iOS dan Android sudah lebih dulu ada. Dalam proses migrasi, mereka harus mengimplementasikan ulang aplikasi native besar dengan skala lebih dari 200 layar, dan untuk lebih dari 30 engineer native yang sudah ada, juga disediakan pelatihan RN internal untuk mendukung transisi.
-
Setelah melalui banyak upaya, dibandingkan masa aplikasi masih native, metrik performa, metrik bisnis, rating aplikasi, persentase pengguna 7 day crash free, waktu yang dibutuhkan untuk Cold Start, waktu perpindahan tab, dan metrik penting lainnya semuanya berhasil dipertahankan atau bahkan ditingkatkan.
-
Aplikasi pertama dirilis pada 2013, dan sekitar 2017 ada tim kecil masing-masing untuk Android dan iOS. Namun, perekrutan jauh lebih sulit dibandingkan developer web, dan mereka merasa produktivitas yang dihasilkan oleh laju perkembangan teknologi platform web tidak bisa diimbangi oleh teknologi platform native. Setelah beberapa percobaan yang gagal, pada 2018 menjadi jelas bahwa kecepatan iterasi dan laju pertumbuhan platform mobile perlu ditingkatkan.
-
Coinbase memutuskan untuk memikirkan ulang dari dasar bagaimana mereka membangun produk. Untuk fitur utama, organisasi fungsional mereka terdiri dari 2 backend engineer + 2 engineer klien untuk masing-masing platform (Web, Android, iOS), sehingga terlalu banyak orang dibutuhkan untuk satu vertikal. Mereka lalu mulai berpikir apakah jumlah minimum developer dalam satu tim fitur bisa dikurangi dari 8 menjadi sekitar 5, dan apakah developer klien bisa mencakup beberapa platform sekaligus.
-
Dari sini, mereka berharap persyaratan minimum pembentukan tim bisa dilonggarkan, pengembangan menjadi lebih efisien, dan titik temu antar developer klien bertambah. Tentu, efisiensi saja tidak cukup; mereka menilai investasi ini hanya layak jika performa dan kualitas yang dirasakan pelanggan juga ikut meningkat dalam prosesnya.
-
Saat itu sudah ada tim platform web berbasis React yang cukup matang. Setelah meninjau berbagai opsi lintas platform, mereka memilih RN karena didasarkan pada teknologi yang sudah akrab dipakai, dan jalur untuk menyatukan web dan mobile terlihat jelas. Karena mereka juga harus memigrasikan aplikasi native yang sudah berjalan, mereka melewati beberapa bulan telaah teknis awal dan penyusunan strategi untuk memastikan migrasi bisa dilakukan bertahap tanpa guncangan.
-
Mereka menilai akan lebih baik memulai dari area greenfield yang tidak memerlukan integrasi antara RN dan native. Di Coinbase sendiri, mereka memutuskan untuk terlebih dulu membuat aplikasi dari produk web bernama Pro, yang saat itu belum tersedia di mobile, meski cukup kompleks dan memiliki banyak fitur yang sensitif terhadap performa seperti grafik harga real-time dan depth chart. Asumsinya, jika Pro bisa dibangun dengan baik menggunakan RN, maka fitur-fitur lainnya—yang lebih sederhana dan tuntutan performanya tidak seketat itu—juga bisa dipindahkan dengan relatif mulus.
-
Setelah itu, mereka mencoba menempelkan implementasi onboarding flow berbasis RN, yang dipakai bersama oleh Pro dan aplikasi lama, ke aplikasi native yang sudah ada. Karena cakupan wilayah layanan beragam, bagian onboarding adalah salah satu bagian paling kompleks dalam aplikasi dan sebelumnya terlalu sulit untuk disentuh. Mereka berharap pembuatan ulang untuk Pro sekaligus bisa menjadi kesempatan untuk merefaktor aplikasi lama.
-
Terakhir, berdasarkan pengalaman dan pengetahuan yang diperoleh dari dua tahap sebelumnya, mereka menulis ulang aplikasi native lama ke RN. Saat membuat rencana, belum jelas apakah ini akan menjadi full rewrite atau bentuk peningkatan bertahap porsi RN dalam aplikasi native, dan keputusan itu akan ditentukan berdasarkan hasil dari dua tahap sebelumnya.
-
Setelah strategi ditetapkan, mereka merilis aplikasi mobile Pro pada Oktober 2019, dan hasilnya melampaui ekspektasi. Hasil bisnisnya bagus, mereka belajar titik-titik yang menimbulkan masalah performa beserta solusinya, sangat puas dengan produktivitas yang diberikan RN, dan juga memastikan bahwa web engineer dapat menjadi produktif di RN dalam waktu singkat.
-
Dengan semangat tersebut, mereka juga mulai menulis ulang onboarding flow, dan sekali lagi target bisnis maupun kualitas aplikasi tercapai.
Hasil penulisan ulang onboarding flow sendiri bagus, tetapi mereka menyadari bahwa menempelkan RN ke aplikasi lama itu sulit.
Produktivitasnya juga lebih buruk dibandingkan hanya mengerjakan web saja atau native saja, sehingga dari kedua sisi muncul engineer yang berpikir, ‘kalau begini, untuk apa pakai RN?’ (Sangat mirip dengan kasus Airbnb, dan mereka benar-benar banyak belajar dengan berbicara langsung dengan engineer Airbnb.)
-
Pada akhirnya, dari pelajaran-pelajaran tersebut mereka menyimpulkan bahwa pendekatan brownfield yang mempertahankan native dan RN secara bersamaan adalah akar dari semua masalah, lalu memutuskan untuk menulis ulang seluruh aplikasi lama ke RN.
-
Dari dua platform itu, mereka menilai migrasi aplikasi Android akan lebih sulit dari sisi kualitas, performa, dan produktivitas, sehingga Android dijadikan target penulisan ulang lebih dulu. Berdasarkan pengalaman sebelumnya, mereka memperkirakan full rewrite akan memakan waktu sekitar 6 bulan, tetapi manfaat yang dihasilkan diperkirakan akan melebihi biayanya.
-
Mereka mulai menulis ulang aplikasi Android pada Maret 2020 dan memang memakan waktu sekitar 6 bulan. Setelah itu, penulisan ulang iOS yang menyusul selesai pada Januari 2021. Di kedua platform, metrik inti menunjukkan hasil yang baik.
-
Pada pertengahan 2020, Coinbase memiliki 18 engineer iOS dan 7 engineer Android. Per Mei 2021, repositori RN Coinbase memiliki 113 kontributor, termasuk banyak web engineer yang sebelumnya tidak bisa berkontribusi ke mobile.
-
Pelatihan untuk membantu engineer native beralih menjadi engineer RN berjalan tanpa banyak gesekan, dan engineer dengan latar belakang native kini menunjukkan hasil yang tinggi di aplikasi RN. Meski belum sempurna, seperti yang diharapkan sejak awal, di tiap organisasi fitur mulai terbentuk model satu ‘tim klien’ yang mencakup semua platform klien.
-
Jumlah platform yang semula tiga (React, iOS, Android) telah menjadi dua (React, RN), tetapi langkah berikutnya adalah mencoba menurunkannya menjadi 1,5. Mereka berencana berbagi design system antara web dan RN, common data layer berbasis GraphQL, serta tooling infrastruktur. Gambaran yang mereka tuju adalah seorang engineer dapat merilis fitur ke semua platform web dan mobile dengan perpindahan konteks seminimal mungkin.
-
Ke depan, mereka berencana membagikan lebih banyak artikel terkait RN, termasuk tantangan teknis dan pengalaman yang didapat dalam proses tersebut.
2 komentar
Ini mengingatkan saya pada kisah adopsi RN oleh Laftel.
https://ridicorp.com/story/react-native-1year-review/
Ini tampaknya artikel yang akan sangat membantu juga bagi perusahaan-perusahaan di dalam negeri. Terima kasih atas ringkasan terjemahannya!