Xây dựng nhóm phát triển ứng dụng di động đa nền tảng

Hoàng Vĩnh

Thích nghi cho một thế giới di động với React Native

Ngoài vô số những ưu điểm và nhược điểm kỹ thuật của React Native, chúng tôi đã nhận ra được tầm quan trọng của React Native đối với một tổ chức kỹ thuật. Việc áp dụng nó phức tạp hơn nhiều so với việc thêm một thư viện hoặc mẫu mới vào một nền tảng hiện có. Bằng cách đó, giúp vạch ra rất nhiều thử thách mang tính tổ chức. Không giống như những thách thức kỹ thuật thường có thể được giải quyết hoặc xoay sở được, những thách thức về tổ chức có thể khó phát hiện, sửa chữa và phục hồi. Rất may, văn hóa phát triển ứng dụng di động của chúng tôi  lành mạnh nhưng có một số điều cần lưu ý khi xem xét React Native.

React Native đang phân cực

Theo kinh nghiệm của chúng tôi, các kỹ sư tiếp cận React Native với các ý tưởng khác nhau từ việc ca ngợi nó như một viên đạn bạc hợp nhất Android, iOS và web đến hoàn toàn chống lại bất kỳ việc sử dụng React Native nào trong đội ngũ của họ. Tình huống tương tự cũng xảy ra sau khi sử dụng nó. Một số đội đã có trải nghiệm đáng kinh ngạc trong khi những người khác hối hận về nó và quay trở về native.

Nguyên nhân gốc

Trong khi làm việc trên React Native, có lỗi không thể tránh khỏi và các vấn đề hiệu suất. Tuy nhiên, có nhiều đáng lưu ý:

  • Bản thân React Native đang phát triển nhanh chóng.
  • Chúng tôi thực hiện đồng thời phát triển tính năng và cơ sở hạ tầng.
  • Các kỹ sư đã học React Native cùng nhau và nó tương đối mới đối với tất cả mọi người.
  • Tài liệu và hướng dẫn để gỡ lỗi trong phát triển và sản xuất của chúng tôi là không nhất quán về thời gian và có thể gây nhầm lẫn.

Kết quả là, rất khó để tìm ra nguyên nhân gốc rễ của một vấn đề. Đôi khi, không rõ vấn đề của nhóm nào nên được phân bổ hoặc liệu vấn đề có phải là nguyên nhân của React Native hay không.

React Native vẫn là Native

Một quan niệm sai lầm phổ biến là React Native cho phép bạn bỏ hoàn toàn việc viết mã native. Tuy nhiên, đó không phải là trạng thái hiện tại của thế giới. Nền tảng native của React Native đôi lúc vẫn phải đương đầu với khó khắn. Ví dụ: văn bản được kết xuất hơi khác trên mỗi nền tảng, bàn phím được xử lý khác và Activities được tái tạo luân phiên theo mặc định trên Android. Trải nghiệm Native React chất lượng cao đòi hỏi sự cân bằng cẩn thận của cả hai chiều. Điều này, kết hợp với những khó khăn của việc có chuyên môn cân bằng trên cả ba nền tảng làm cho việc vận chuyển trải nghiệm chất lượng cao liên tục trở nên khó khăn.

Debug đa nền tảng

Hầu hết các kỹ sư đều thành thạo ở một hoặc hai nền tảng. Cực kỳ hiếm hoi cho ai đó để thành thạo Android, iOS, và React. Mặc dù phần lớn công việc trong môi trường React Native trưởng thành được thực hiện với JavaScript và React, đôi khi việc xây dựng hoặc gỡ lỗi đòi hỏi phải đào sâu vào native. Những tình huống này có thể dẫn đến các kỹ sư bị trượt ra khỏi chuyên môn của họ khi cố gắng debug một vấn đề trên nền tảng mà họ chưa từng sử dụng. Điều này trở nên tệ hơn khi một kỹ sư thậm chí không chắc chắn tìm ở đâu do sự khó khăn của việc phân bổ nguyên nhân gốc rễ.

Tuyển dụng

Mặc dù chúng tôi đang đầu tư vào React Native, tham vọng di động và các đội ngũ của chúng tôi tiếp tục tăng tốc song song. Tuy nhiên, theo sự truyền miệng trong cộng đồng, nhiều người bắt đầu liên kết Airbnb với React Native và một số thậm chí tin rằng ứng dụng của chúng tôi là 100% React Native. Mặc dù điều này là sai sự thật, nhưng đã khiến nhiều kỹ sư Android và iOS do dự khi áp dụng Airbnb. Nếu bạn là một trong số đó, chúng tôi vẫn đang trong quá trình tuyển dụng!

Ứng dụng lai khó

Con đường của một thế giới 100% native hoặc 100% React Native là tương đối đơn giản. Tuy nhiên, một khi bạn có một kết hợp trong codebase, nhiều vấn đề mới phát sinh. Làm cách nào để bạn chia nhóm của mình? Các nhóm cộng tác như thế nào? Làm cách nào để bạn chia sẻ trạng thái trên ứng dụng của mình? Làm thế nào để bạn đảm bảo rằng mọi thứ được kiểm tra? Làm thế nào để các kỹ sư debug hiệu quả trên ba nền tảng? Làm thế nào để bạn quyết định nền tảng nào sử dụng cho một tính năng mới? Làm thế nào để bạn thuê và phân bổ nguồn lực trong tổ chức của bạn? Đây là tất cả các vấn đề với các giải pháp không hề đơn giản mà chắc chắn sẽ phát sinh nếu bạn theo con đường này.

Ba môi trường phát triển

Để trở thành một kỹ sư React Native hiệu quả, điều quan trọng là phải có môi trường React Native, Android, iOS ổn định và cập nhật. Đối với một tổ chức lớn như Airbnb, mỗi nền tảng đòi hỏi một lượng thời gian đáng kể để thiết lập, tìm hiểu và cập nhật. Quay trở lại chỉ sau vài tuần thường có nghĩa là dành ra vài giờ để mọi thứ được cập nhật.

Cân bằng Native với React Native

Có nhiều tình huống trong đó giải pháp tối ưu cho một vấn đề bắc cầu giữa Native và React Native. Ví dụ: việc triển khai điều hướng của chúng tôi sử dụng nhiều Activities và ViewControllers và hầu hết mã của nó là mã native của mỗi nền tảng. Thông thường, không rõ ràng rằng liệu mã có nên được viết bằng ngôn ngữ native hay React Native hay không. Thông thường, một kỹ sư  sẽ chọn nền tảng mà họ cảm thấy thoải mái, điều này có thể dẫn đến mã tầm thường.

Thử nghiệm đa nền tảng

Chúng tôi thấy rằng các kỹ sư chủ yếu sẽ phát triển trên một nền tảng so với một nền tảng khác do tiện lợi hoặc thoải mái. Thông thường, họ sẽ giả định rằng nếu nó hoạt động trên nền tảng mà họ đã thử nghiệm, thì sẽ hoạt động hoàn hảo trên nền tảng kia. Hầu như, điều này đúng như một minh chứng cho sức mạnh của React Native. Tuy nhiên, nó không chính xác thường xuyên khi cuối cùng lại gây ra các vấn đề thường xảy ra trễ trong chu kỳ QA hoặc trong sản xuất.

Tốc độ lặp lại được nhận thức

Một trong những mục tiêu định tính của chúng tôi với React Native là tăng tốc độ phát triển. Thông thường, các tính năng React Native được viết bởi một kỹ sư duy nhất thay vì mỗi người một nền tảng. Theo quan điểm của kỹ sư React Native, nếu mất lâu hơn 50% thời gian để viết tính năng so với trên Android hoặc iOS, họ sẽ cảm giác lâu hơn ngay cả khi tổng số giờ ít đi.

Tài liệu và Tài nguyên chung

Android và iOS đã có lịch sử mười năm và hàng triệu kỹ sư đóng góp vào tài nguyên học hỏi, mã nguồn mở và trợ giúp trực tuyến. Chúng tôi tận dụng nhiều tài nguyên như CodePath để giúp mọi người tìm hiểu Android và iOS. Mặc dù React Native có một trong những cộng đồng đa nền tảng lớn nhất và có thể tận dụng các tài nguyên React, nhưng nó vẫn nhỏ hơn nhiều so với Android và iOS. Điều đó kết hợp với thực tế chúng tôi phải xây dựng hầu hết cơ sở hạ tầng của mình trong nhà đồng nghĩa việc các nguồn tài nguyên Native React bị hạn chế được đầu tư quá mức vào giáo dục và đào tạo liên quan đến native.

Tác giả: Gabriel Peal | Nguồn: medium.com