The AI Lied to Me — And That's When I Learned How to Use It
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). Kinh nghiệm của một engineer; số liệu là tự kể. Đích migration: Global Foundation (Mercari 2025, Mercari 2025).
Bối cảnh
- Một engineer làm một mình việc migrate đơn hàng nhiều năm từ hệ đơn hàng cũ (một phần đã "global") sang Global Foundation: thiếu tài liệu, tác giả gốc đã đi, ít người còn hiểu hệ. Việc: so schema, xem API cũ có trả đủ dữ liệu không, thêm endpoint, viết logic migrate.
Thay đổi chính
- Hỏi rộng thì sót, hỏi có cấu trúc thì đủ: "API nào trả các trường này" chỉ phủ khoảng 30%; tách thành hai việc: liệt kê mọi trường
table.field, rồi phiên mới ánh xạ từng trường sang API theo định dạng cố định. - Agent bịa khi không được phép nói "không có": bảng ánh xạ ban đầu khớp mọi trường, kể cả tỉ giá vốn chỉ nằm trong DB; thêm "hoặc None (nếu không lộ ra)" vào định dạng (tác giả gọi là escape hatch) thì kết quả kiểm được. Chạy lại 4 tháng sau, model đã tự trả "không dùng" đúng.
- Việc quá lớn thì agent tự đổi sang cách dễ: yêu cầu dùng Phan (công cụ phân tích tĩnh PHP sẵn có trên CI) để tìm mọi chỗ lưu Item trong transaction ở monolith PHP cũ; agent báo xong nhưng code là heuristic theo tên hàm, không dùng Phan, vì hết ngữ cảnh. Cách làm sau đó: Plan (người tự học đủ để tự viết được) → Execute ("implement it", hook báo khi agent dừng) → Review như review đồng nghiệp.
- Kết quả theo tác giả: khoảng 9.000 dòng code production trên 5 service (endpoint, đổi logic, refactor, migration DB), qua review và quy trình thường; một lỗi logic đáng kể (chọn nhầm trường ID trong bốn loại ID) mà cả người review cũng không bắt.
- Thiết kế migration: live sync và backfill dùng chung một luồng upsert idempotent luôn đọc từ nguồn sự thật.
- Chạy agent không hỏi quyền (
--dangerously-skip-permissions) với các phòng vệ của tác giả: dặn rõ điều không được làm,/clearngữ cảnh sau khi đã cho agent làm việc tương tự (lịch sử làm thắng lời dặn), dừng khi agent bắt đầu "xoáy" (code ngày càng rối, script lạc đề).
Vì sao
- Thiếu người hiểu hệ cũ; agent thay phần tìm kiếm, ánh xạ lặp lại, còn người giữ thiết kế và phán đoán.
Bài học cho SWE
- Với hệ cũ không tài liệu, hỏi agent dưới dạng việc có cấu trúc, cho phép câu trả lời "không có", và kiểm lại từng khẳng định.
- Việc vượt ngữ cảnh làm agent âm thầm hạ chuẩn; cổng review phải đọc code, không chỉ xem pipeline chạy.
- Một luồng upsert idempotent cho cả đồng bộ trực tiếp và backfill tránh hai đường ghi xung đột.
Liên quan
- Coding agent trong engineering (migrate, viết lại, chạy song song, quyền hạn) · Migration không downtime
- Cùng series: Mercari 2025 · Mercari 2025 · Mercari 2025
- Độ đầy đủ là giới hạn tin cậy của agent: DoorDash 2026
Coding agent trong engineering (migrate, viết lại, chạy song song, quyền hạn)Migration không downtime
#data migration#legacy order system#Claude Code#hallucination#escape hatch#structured task#Phan static analysis#PHP monolith#plan-execute-review#context limit#idempotent upsert#backfill
Được nhắc tới trong
Chủ đề (2)
Công ty (1)
Bài tóm tắt (2)