How we deliver mobile app updates faster

Bài tóm tắt Mercari 2025 3. Quy mô lớn Độ khó: Dễ

Mercari · 2025 · 3. Quy mô lớn · Độ khó: Dễ — bài gốc

Một bài trong series Global App (ngoài sheet). Repo mobile: Mercari 2025.

Bối cảnh

  • App Global trên iOS và Android nằm chung monorepo với app Nhật. Mục tiêu: thay đổi tới người dùng nhanh (thí nghiệm ngắn, sửa nhanh) mà bản phát hành vẫn ổn định; review của Apple/Google là phần không kiểm soát được.

Thay đổi chính

  • Trunk-based + feature flag cho mọi thay đổi: merge dần vào master, tính năng ẩn sau flag riêng; xong thì developer và QA thử, rồi bật dần qua flag. Vì master luôn ổn định nên cắt bản lúc nào cũng được.
  • Release train hằng tuần: cắt nhánh release tự động mỗi thứ Ba (cùng lịch cho iOS và Android, chạy độc lập). Build bằng fastlane trên GitHub Actions; "release judgement" chủ yếu là E2E tự động, ít ca tay.
    • iOS: nộp Apple review song song với release judgement để tiết kiệm thời gian. Android: chờ judgement qua rồi mới nộp vì Google review nhanh.
    • Qua cả hai thì phased release. Tính năng xong thứ Hai có thể tới người dùng từ thứ Năm; trung bình quy trình phát hành dưới 2 ngày, 3–7 ngày làm việc từ lúc code tới production (theo bài, app thường là 1–2 tuần).
  • Sau phát hành: Firebase báo mỗi crash mới vào Slack, velocity alert gọi on-call khi crash dồn dập; CS và review trên store là kênh phản hồi.
  • Hotfix: dừng phased release đang chạy; nhánh hotfix cắt từ nhánh release cuối, thay đổi từ nhánh release tự backmerge vào master; Android nay rollback được bản đã phát hành, iOS thì không.
  • Kế hoạch: thử Xcode Cloud làm đường dự phòng cho pipeline; thêm đo hiệu năng (thời gian khởi động, cuộn theo màn hình) vào pipeline để bắt hồi quy.

Vì sao

  • Client mobile không revert được như server; cách lùi chính là tắt flag, còn binary thì chỉ còn hotfix (và rollback trên Android).

Bài học cho SWE

  • Tách "deploy binary" khỏi "bật tính năng" là điều kiện để phát hành theo lịch cố định mà không chờ tính năng.
  • Chạy song song các bước chờ bên ngoài (review của store) với kiểm chứng nội bộ.

Liên quan