React Native tại Airbnb (P3): Xây dựng một Mobile Team cross-platform

197

Ngoài vô sô ưu điểm và khuyết điểm của React Native, chúng ta còn biết thêm về những gì nó làm được cho các công ty và tập đoàn ngành công nghệ. Việc ứng dụng nó phức tạp hơn nhiều lần so với việc add library hay pattern mới vào platform hiện có. Nó đã kéo theo không ít rắc rối đến cho doanh nghiệp: Nó không chỉ đơn thuần là những vấn đề có thể xử lý tức thì, mớ này rất khó nhằn, không dễ bị phát hiện hoặc sửa hoặc recover tí nào. Trong điều kiện này, mặc dù chúng tôi có một nền tảng khá ổn định nhưng trước khi dùng đến React Native phải lưu ý một số điểm.

Những quan điểm trái chiều xoay quanh React Native 

Theo như kinh nghiệm thì các kĩ sư khi tiếp cận với React Native có nhiều quan điểm trái chiều xung quanh nó, người thì ưu ái dùng nó cho cả Android, iOS, và web nhưng người thì chống đối, cương quyết không dùng nó trong team. Sau khi sử dụng rồi cũng xảy ra chuyện tương tự: Team này thì có những trải nghiệm rất tuyệt vời nhưng cũng có team phải quay lại con đường native.

Đi tìm gốc rễ của vấn đề 

Dĩ nhiên khi làm việc với React Native thì việc gặp bug, lỗi kĩ thuật hay lỗi performance là không thể tránh khỏi. Tuy nhiên vẫn còn nhiều khuất mắt chưa tìm hiểu được nguyên nhân:

  1. React Native di chuyển rất nhanh.
  2. Đồng thời chúng tôi cũng đang phát triển thêm nhiều infrastructure và feature mới.
  3. Mọi người còn khá mới với React Native và vẫn đang học cách sử dụng nó.
  4. Tài liệu và hướng dẫn debug trong lập trình và production không được thống nhất lắm và dễ bối rối không hề nhẹ.

Vì thế mà rất khó để tìm ra được căn nguyên của vấn đề. Đôi khi việc xác định xem vấn đề xuất phát từ team nào hay liệu nó có liên quan đến React Native hay không cũng không được rõ ràng.

React Native thì vẫn là Native

Một hiểu lầm khá phổ biến đó là nếu dùng React Native bạn có thể ngừng hẳn luôn việc viết code native. Lầm to nhé! Bản chất native của React Native vẫn sẽ ở đó lúc bạn làm việc mà thôi. Ví dụ, trên mỗi platform text sẽ bị render khác nhau một tí, keyboard sẽ được xử lý khác nhau một tẹo, và phần Activities sẽ được tái lập mặc định bởi Android. Để mang lại môt trải nghiệm chất lượng cao với React Native, nó đòi hỏi sự cân bằng từ cả hai phía. Điều này kéo theo một thử thách khá lớn về trình độ chuyên môn cao trên cả 3 platform làm cho việc truyền tải được trải nghiệm tốt khó khăn hơn. 

Debug xuyên Platform

Hầu hết mọi kĩ sư đều sẽ chuyên sâu 1 hoặc 2 platform. Còn chuyện có người chuyên về cả Android, iOS, và React là hiếm vô cùng. Mặc dù hầu hết mọi việc trong môi trường React Native là bằng JavaScript và React, đôi lúc khi build hoặc debug vẫn sẽ yêu cầu quay về native. Đây là những trường hợp trớ trêu dồn kĩ sư vào thế bí khi phải debug vấn đề trên các platform mà họ chưa bao giờ đụng đến. Nó sẽ còn tệ hơn nếu như các kĩ sư không biết bắt đầu từ đâu vì rất khó để tìm ra cốt lõi của vấn đề.

Tuyển mộ người tài

Mặc dù đang đầu tư tốc lực cho React Native, việc mở rộng các team và tham vọng về mobile của chúng tôi vẫn không ngừng mở rộng và đầu tư. Tuy nhiên, sau một thời gian dài trong cộng đồng, người ta bắt đầu đánh đồng Airbnb với React Native và gán luôn cho Airbnb là 100% react Native. Từ đó mà nhiều lập trình viên Android và iOS cũng chần chừ apply vào Airbnb, mặc dù tin đồn kia là không đúng tí nào. Vì thế, đừng ngại ngùng nữa và apply ngay nào!

Khó khăn về các Hybrid App 

Một lộ trình 100% native hoặc 100% React Native nghe tương đối dễ chịu. Nhưng nếu bạn trộn codebase lại, thì sẽ nảy sinh ra 1001 vấn đề mới. Làm sao để chia team? Làm sao để các team collab? Làm sao để share state qua app? Làm sao để đảm bảo rằng mọi thứ được test? Làm sao để kĩ sư có thể debug hiệu quả trên cả 3 platform? Làm sao để quyết định dùng platform nào cho feature mới? Đây là một trong số ít những câu hỏi mà bạn phải giải quyết khi đụng độ với chuyện này.

Ba Môi trường Development

Để trở thành một kĩ sư React Native giỏi, điều quan trọng là bạn phải có 3 môi trường React Native, Android, và iOS thật ổn định và cập nhật kịp thời. Đối với các công ty lớn như Airbnb, mỗi platform đòi hỏi một lượng thời gian nhất định để set up, tìm hiểu và cập nhật. Chỉ cần bạn lơ là với nó một hai tuần là bạn sẽ phải tốn hàng tiếng đồng hồ để bắt kịp với mọi thứ.

Native vs React Native

Có rất nhiều trường hợp xảy ra làm cho các giải pháp tối ưu hoá cho vấn đề sử dụng cả Native và React Native. Ví dụ, ứng dụng navigation của chúng tôi sử dụng tối đa Activities và ViewControllers và hầu hết code của nó là native trên mọi platform. Thường thì việc code nên được viết bằng Native hoặc React Native là không rõ ràng. Kĩ sư thường sẽ chọn platform nào thoải mái nhất để hỗ trợ việc xử lý unideal code.

Test Cross-Platform 

Chúng tôi phát hiện ra rằng các kĩ sư làm việc chủ yếu trên 1 platform nhất định phụ thuộc vào sự tiện lợi và thoải mái. Họ thường giả định là nếu nó hiệu quả trên platform mà họ test, thì nó cũng hiệu quả trên những platform khác nữa. Logic này gần như luôn đúng, và đây cũng là một trong những thế mạnh lớn nhất của React Native. Tuy nhiên, số lần nó không đúng cũng đủ để gây ra một mớ rắc rối trong các cycle QA hoặc trong production.

Các team riêng lẻ

Các team nào thường làm việc ở cả native cũng như React Native thường sẽ vướng phải cả những khó khăn về mặt kĩ thuật lẫn giao tiếp. Sau khi codebase bị tách ra thành native và React Native, code sẽ bắt đầu đứt đoạn. Từ đó việc chia sẻ các logic kinh doanh, các model, state,… trở nên khó khăn hơn và các kĩ sư không có đủ chuyên môn để làm việc xuyên suốt cả quá trình được. Chúng tôi hiểu rằng nó sẽ xảy ra từ đầu nhưng lại nghĩ rằng nó có thể sẽ cân bằng nếu có collab mới với web. Một số team đã bắt đầu share resource và code qua web và mobile nhưng hầu hết đều không thể nhận ra được tiềm năng này.

Iteration Speed đạt được

Một trong những mục tiêu đề ra về React Native đó là gia tăng tốc độ lập trình. Thông thường, các React Native feature chỉ được 1 kĩ sư viết, chứ không phải mỗi platform một người. Từ góc nhìn của một kĩ sư React Native, cho dù nhìn chung nó có tốn ít thời gian để viết feature so với trên Android hoặc iOS, đối với họ nó sẽ vẫn lâu hơn.

Các Resource và Tài liệu chung 

Hàng triệu kĩ sư trong vòng 10 năm qua đã cống hiến và chia sẻ vô số resource học tập, open resource và hỗ trợ online về Android và iOS. Chúng tôi cũng cho ra lò nhiều resouce như CodePath để giúp mọi người học về Android và iOS chuyên sâu hơn. Có thể React Native sở hữu một trong những cộng đồng cross-platform lớn nhất và cung cấp các nguồn React, nhưng nó vẫn còn nhỏ hơn nhiều so với Android và iOS. Cộng thêm một thực tế rằng chúng ta phải tự tay build nên gần hết infrastructure in-house của mình cho thấy rằng nguồn resource React Native hạn hẹp của chúng ta đã bị đầu tư quá lỗ trong giáo dục và đào tạo so với native.

TopDev via Medium

  React Native tại Airbnb (P1): Mở đầu
  React Native tại Airbnb (P2): Công nghệ
  Tiki đã dùng React Native như thế nào?