How AI Agents Halved the Effort of Migrating 500 Gradle Modules from Koin to Hilt
Bài tóm tắt Allegro 2026 4. Điều chỉnh Độ khó: Trung bình
Allegro · 2026 · 4. Điều chỉnh · Độ khó: Trung bình — bài gốc
Bối cảnh
- Q3 2024: cold start của app Android Allegro lên 6,0 giây (p90), ANR 0,13%, số gỡ cài đặt tăng mạnh, nặng nhất trên máy cũ và yếu. Sau khi khởi tạo bất đồng bộ (Q4 2024), Q1 2025 cold start còn 4,7 giây, ANR 0,08%, gỡ cài giảm 25%: theo Allegro, người dùng gắn chất lượng app với tốc độ khởi động.
- Nút thắt tiếp theo là Koin (DI lúc chạy): đăng ký mọi module và nối đồ thị phụ thuộc trên máy lúc khởi động, có lúc chiếm tới một phần ba cold start. Với gần 500 module Gradle, cách này không scale.
Thay đổi chính
- Đổi sang Hilt (Dagger): đồ thị phụ thuộc sinh thành code Kotlin lúc build; lúc chạy chỉ thực thi code đã sinh. Lợi phụ: thiếu module hay khai báo sai thành lỗi build thay vì crash ở máy người dùng. Cái giá: build chậm hơn vì annotation processing, chấp nhận được.
- Migrate từng module, giữ tương thích hai chiều: thứ tự từ dưới lên, lõi trước ("Core First": analytics, networking, deep link, remote config, utils) vì Hilt cần phụ thuộc có sẵn ở phía dưới. Module đã chuyển vẫn có mặt trong Koin dưới dạng proxy tới Hilt qua
@EntryPoint, để module chưa chuyển vẫn dùng được; module Hilt cần thứ còn ở Koin thì dùng lớp keoKoinComponenttạm. File Koin không bị xoá, chỉ sửa thành proxy; proxy bị gỡ khi cả vùng phụ thuộc đã chuyển. Mỗi team tự đi theo nhịp riêng. - Skill cho coding agent: toàn bộ quy trình được viết thành một "skill" (chạy qua GitHub Copilot với Claude Opus 4.6 hoặc Claude Code): mỗi cấu trúc DSL của Koin (factory, single, viewModel, named, binds, scoped…) có ví dụ "Trước/Sau" cụ thể; agent khớp mẫu trong code với "Trước" rồi sinh "Sau". Nguyên tắc: không giả định agent đã biết cách migrate, để kết quả dự đoán được với bất kỳ LLM nào. Bước cuối là build toàn project để xác minh đồ thị phụ thuộc.
- Đo bằng thí nghiệm chéo: mỗi developer migrate một module bằng tay và một module tương đương bằng agent (A làm X tay, Y bằng agent; B ngược lại) để loại khác biệt tay nghề; ghi thời gian chủ động, thời gian agent tự chạy, tổng thời gian.
| Cách | Thời gian developer | Thời gian agent | Tổng |
|---|---|---|---|
| Thủ công | 14 giờ 23 phút | — | 14 giờ 23 phút |
| Agent | 3 giờ 26 phút | 3 giờ 16 phút | 6 giờ 42 phút |
Thời gian chủ động của developer giảm khoảng 76%, tổng thời gian giảm khoảng 53% (theo Allegro, 2026); mỗi module từ khoảng một tuần xuống dưới hai ngày.
Vì sao
- Trạng thái Q2 2026: hơn 60 module lõi đã chuyển xong, còn hơn 400 module tính năng; mục tiêu bỏ hẳn Koin cuối năm và đưa cold start dưới 3,5 giây trên máy yếu.
- Theo Allegro: nên trả nợ kỹ thuật (cấu trúc module sai, thiếu phụ thuộc) trước khi migrate vì Hilt kiểm cả cây lúc biên dịch; nên gom khai báo vào module Hilt (
@Provides) thay vì rải@Inject constructor()trong code nghiệp vụ, để lần đổi framework sau dễ hơn.
Bài học cho SWE
- Đổi framework xuyên suốt hàng trăm module cần một trạng thái lai chạy được lâu dài (proxy hai chiều), không phải một lần chuyển lớn.
- Với coding agent, mã hoá quy trình thành ví dụ "trước/sau" tường minh và kết thúc bằng bước kiểm chứng tự động (build) thì đầu ra mới đoán trước được.
- Đo hiệu quả của agent bằng thiết kế thí nghiệm có đối chứng, tách thời gian người khỏi thời gian máy.
Liên quan
- Coding agent trong engineering (migrate, viết lại, chạy song song, quyền hạn)
- Allegro 2024 (OpenRewrite cho thay đổi phá vỡ của thư viện nội bộ) · Spotify 2026 · DoorDash 2026
- Quản lý fleet và migrate code hàng loạt
Quản lý fleet và migrate code hàng loạtCoding agent trong engineering (migrate, viết lại, chạy song song, quyền hạn)
#Android#Dependency injection#Koin#Hilt#Dagger#Cold start#Migration#Proxy#AI agent#Coding agent#Crossover experiment
Được nhắc tới trong
Chủ đề (2)
Công ty (1)
Bài tóm tắt (5)