Tóm tắt
Tác giả xây một ứng dụng khoảng 150.000 dòng code, chủ yếu Rust, bằng agent như Claude Code và Cursor. Ứng dụng có UI, background jobs, tích hợp hệ thống ngoài, ML/text analysis và deployment tự động. Tác giả gần như không review code trong lúc agent tạo ra nó.
Kết quả quen thuộc với nhiều team dùng AI coding: một file data-access Rust phình lên 17.155 dòng. Nó lặp lại setup HTTP request, JSON encoding/decoding và nhiều pattern khác trong cùng một module khổng lồ. File vẫn có boundary rõ, nên trở thành mục tiêu tốt để refactor mà không đổi interface.
Thí nghiệm
Mục tiêu của refactoring ở đây không chỉ là code đẹp hơn. Mục tiêu là tiêu token hôm nay để giảm token cho các change sau. Tác giả tạo một prompt đại diện cho một feature change, chạy fresh sub-agent ở từng giai đoạn refactor, rồi đo token, thời gian và số dòng code.
Quy trình gồm: lập plan refactor theo kỷ luật refactoring, đo baseline cho cùng một change, bỏ change đó đi, áp dụng từng bước refactor, chạy lại đúng prompt feature change bằng sub-agent mới, rồi lại bỏ change. Vì mỗi sub-agent mới không học từ lần trước, kết quả ít bị nhiễu bởi memory của agent hơn so với thử trên người.
Kết quả chính
Baseline của change đại diện dùng khoảng 159.564 input token và mất 342 giây. Sau nhiều bước tách module, ở điểm tốt nhất input token giảm xuống khoảng 98.672 và thời gian còn 253 giây. Largest file cũng giảm từ 17.155 dòng xuống khoảng 6.435 dòng ở cuối chuỗi refactor.
Output token không giảm rõ như input token. Điều này hợp lý: change cần sinh ra bao nhiêu code thì vẫn cần sinh từng đó code. Nhưng input token mới là phần context phình to vì file khổng lồ, dependency rối và thiếu cấu trúc. Khi code có boundary tốt hơn, agent đọc ít thứ hơn để làm cùng một việc.
Ý nghĩa với Dev
Với codebase dùng agent hằng ngày, refactoring giờ có thêm một business case mới: giảm context load. File lớn không chỉ làm người khó đọc; nó còn làm model tốn tiền hơn, chạy lâu hơn và dễ kéo nhầm context hơn.
Điểm quan trọng là agent không tự nhiên giỏi refactor. Tác giả ghi nhận Claude tạo file lớn rất dễ, nhưng để chia nhỏ đúng cách vẫn cần người hướng dẫn. Một số bước cơ học được làm bằng script cũng lỗi vì grep/sed lẫn indentation. Kết luận thực dụng: dùng agent để thực hiện nhiều edit nhỏ có test, nhưng con người vẫn phải giữ hướng kiến trúc và chọn đường refactor có nghĩa.
Cách áp dụng
- Tìm các file mà agent thường phải đọc lại trong nhiều change.
- Đo token hoặc proxy đơn giản như số ký tự context cho một prompt đại diện.
- Refactor từng bước nhỏ, giữ interface và chạy test sau mỗi bước.
- Đo lại cùng prompt để xem context có thật sự giảm không.
Nếu không đo, refactoring rất dễ trở thành tranh luận thẩm mỹ. Khi đo bằng token và thời gian, nó trở thành một dòng chi phí vận hành của AI coding.