Cách dùng coding agent hiệu quả, từ lên kế hoạch đến triển khai và giám sát

Chào các bạn,
Một kỹ năng AI Engineering then chốt là khả năng sử dụng coding agent. Kỹ năng định hướng (steer) chúng, cả để viết code lẫn để thực hiện các tác vụ không liên quan đến code như phân tích dữ liệu hay vận hành hệ thống, giúp bạn làm được nhiều việc hơn hẳn.
Tốc độ tiến hóa nhanh chóng của coding agent khiến kỹ năng này cũng thay đổi rất nhanh, thậm chí nhanh hơn các kỹ năng AI Engineering hàng đầu khác. Các agent độc quyền (như Claude Code, Codex, Cursor) và các agent mã nguồn mở (như OpenCode, Pi) đều tiến bộ vượt bậc nhờ cả cải tiến harness lẫn cải tiến model. Vì vậy, để bắt kịp cách dùng coding agent, bạn cần một quá trình thử nghiệm, xây dựng, và học hỏi liên tục.
Sau khi phỏng vấn hàng chục AI Engineer hàng đầu và nhìn lại cách chính đội ngũ của chúng tôi sử dụng coding agent, chúng tôi nhận thấy có một quy trình làm việc bậc cao khá nhất quán khi xây dựng phần mềm cùng chúng. Các bước chính gồm:
- Lên kế hoạch (Planning). Bao gồm (i) brainstorm, có thể gồm cả nghiên cứu, thử nghiệm, và tìm hiểu codebase hiện có (nếu có), và (ii) viết spec nắm bắt yêu cầu, thiết kế kỹ thuật, kiến trúc, sau đó tạo ra một kế hoạch thực thi (execution plan). Bạn cũng có thể review lại kế hoạch để chất vấn các giả định then chốt và kiểm tra các vấn đề về bảo mật, over-engineering, và các lỗ hổng khác.
- Thực thi (Execution), nơi bạn xây dựng, kiểm thử, và xác minh, với sự cân bằng phù hợp giữa mức độ tự chủ của agent và sự giám sát của con người. Bước này gồm (i) để agent xây dựng phần mềm với mức độ tự chủ đã được hiệu chỉnh, và (ii) xác minh kết quả đầu ra thông qua kiểm tra tự động và/hoặc kiểm tra thủ công.
- Triển khai và giám sát (Deployment and monitoring), trong đó bạn (i) triển khai, có thể có cổng kiểm soát (gate) qua pipeline CI/CD hoặc thêm bước duyệt của con người, và (ii) dùng agent để theo dõi log, phát hiện vấn đề, đề xuất và thực hiện cải tiến.
Quy trình bậc cao này khá giống với quy trình vẫn thường dùng để xây dựng phần mềm trước khi có coding agent. Điểm khác là giờ đây chúng ta tập trung ít hơn vào việc viết code, và tập trung nhiều hơn vào việc quyết định xây gì, thiết kế kiến trúc, viết spec, và xác minh kết quả đầu ra.
Thời lượng của mỗi bước có thể khác nhau đáng kể tùy dự án, và có những bước có thể bỏ qua. Ví dụ, spec cho một bản prototype greenfield (nghĩa là xây từ đầu, chưa có gì trước đó) có thể chỉ cần mô tả sơ lược trong một prompt viết nhanh, trong khi spec cho một dự án brownfield (đã tồn tại từ trước) với nhiều người dùng có thể cần nhiều công sức hơn hẳn để viết và xác minh. Hơn nữa, quy trình này mang tính lặp đi lặp lại rất cao, và những nhà phát triển giỏi biết khi nào phản hồi từ một bước sau nên khiến họ quay lại một bước trước đó. Ví dụ, nếu bước xác minh thất bại, họ biết cách định hướng agent xây dựng lại và sửa lỗi; hoặc nếu bước giám sát phát hiện vấn đề, họ biết cách để agent cập nhật hệ thống và triển khai lại.
Để sử dụng coding agent hiệu quả trong quy trình này, các kỹ năng then chốt gồm:
- Định hướng quy trình làm việc
- Cho phép agent tự chủ
- Review công việc
- Tùy biến agent và môi trường của nó
- Nền tảng về coding agent
Định hướng quy trình làm việc. Bạn biết cách điều hướng từng bước trong quy trình nêu trên. Điều này đòi hỏi quyết định nên dành bao nhiêu công sức của con người và bao nhiêu công sức của agent cho mỗi bước, cùng thời điểm nên quay lại một bước trước đó để lặp lại. Nó đòi hỏi hiểu sâu sắc sự đánh đổi giữa tốc độ, chi phí, rủi ro kỹ thuật, và công sức con người, để bạn có thể quyết định nên nghiên cứu và lên kế hoạch trước bao nhiêu, khi nào nên giữ quyền sở hữu công việc quan trọng cho con người, cách chọn kiến trúc, nên viết chi tiết đến đâu vào các tài liệu lên kế hoạch (như spec), và cách phân rã công việc thành các bước có thể xác minh được.
Cho phép agent tự chủ. Khi áp dụng coding agent vào các bước trong quy trình, bạn chọn mức độ tự chủ: Bạn sẽ theo dõi sát và tương tác qua lại, hay giao một khối lượng công việc lớn hơn cho agent tự xử lý? Và khi nào bạn nên đặt một mục tiêu rõ ràng rồi để agent tự lặp lại (loop) cho đến khi thành công? Ngoài ra, bạn phải quản lý context của agent một cách cẩn thận. Khi quá trình xây dựng đi qua các giai đoạn khác nhau, bạn sẽ hiệu chỉnh thời điểm đảm bảo những bài học quan trọng, phản hồi người dùng, và các giả định - kể cả những giả định đã thay đổi giữa chừng - được ghi lại để agent sử dụng ở các bước sau. Thêm vào đó, bạn sẽ quyết định khi nào nên thiết lập nhiều agent chạy song song trên các phần việc đã được phân rã, bằng cách để một người hoặc một agent cấp cao hơn điều phối các agent khác, và cách quản lý sự chú ý của con người trên nhiều phiên agent chạy đồng thời. Bạn cũng biết cách chạy agent một cách an toàn, thiết lập quyền hạn (permission) và kiểm soát (gate) hành động phù hợp để việc phát triển diễn ra nhanh chóng trong khi vẫn giới hạn rủi ro rò rỉ dữ liệu, mất dữ liệu, hoặc các thiệt hại khác.
Review công việc. Kết quả đầu ra của coding agent luôn có tính bất định. Chúng ta không biết trước nó sẽ nghĩ ra ý tưởng hay nào và sẽ tạo ra lỗi (bug) nào. Review và xác minh kết quả đầu ra là bước then chốt để đảm bảo bạn nhận được kết quả mình muốn, và để định hướng lại agent nếu không. Bạn sẽ thiết kế việc kiểm thử và xác thực (validation) phù hợp với từng tác vụ, áp dụng cả xác minh hành vi (behavioral) lẫn xác minh chức năng (functional) khi cần. Bạn cũng có thể kiểm thử luồng người dùng (user flow), có thể để agent cung cấp ảnh chụp màn hình làm bằng chứng thành công hay thất bại. Với việc đánh giá định tính/hành vi, bạn có thể dùng bộ eval set, đôi khi kết hợp với LLM-as-a-judge (dùng chính một LLM làm giám khảo).
Bạn cũng cần quyết định nên tự động hóa bao nhiêu phần kiểm thử này. Một số quy trình sẽ tự động hóa hoàn toàn việc kiểm thử và xác thực để agent có thể tự kiểm tra công việc của mình và biết khi nào đã hoàn thành tác vụ. Bạn phải đánh giá các bài kiểm thử để đảm bảo chúng phản ánh đúng mục tiêu của bạn, và bạn sẽ điều chỉnh chúng nếu chưa đúng. Ngoài ra, bạn dùng agentic code review (agent tự review code) và chạy các đợt kiểm tra bảo mật, kiến trúc có sự hỗ trợ của AI. Khi việc review bằng AI chưa đủ, bạn khéo léo chèn thêm bước review thủ công về hành vi của code (và, đôi khi, cả về chính đoạn code) trong lúc vẫn tìm cách tự động hóa thêm việc review này. Cuối cùng, bạn xác minh việc triển khai và có thể vận hành hóa việc giám sát cũng như quản lý sự cố cùng agent.
Tùy biến agent và môi trường của nó. Khả năng cập nhật cả agent lẫn môi trường nó hoạt động cho phép agent của bạn lấy được context cần thiết một cách hiệu quả, truy cập công cụ, và xây dựng đúng đắn, hiệu quả. Bạn biết cách tích hợp agent skill, plugin, và MCP server. Thỉnh thoảng bạn sẽ loại bỏ bớt chúng khi không còn cần thiết nữa (chẳng hạn khi một model mới khiến một skill cũ trở nên lỗi thời). Bạn có thể dùng hook để tự động hóa các phần lặp lại trong quy trình phát triển, như kích hoạt code review tự động hay pipeline CI/CD. Bạn cũng có thể duy trì môi trường mà agent hoạt động trong đó: cập nhật context thường trực (như file AGENTS.md hay CLAUDE.md) với thông tin về codebase, các giả định kiến trúc quan trọng, code style, và các pattern truy cập dữ liệu. Bạn biết cách duy trì trạng thái (state) qua nhiều phiên làm việc và qua các agent chạy song song, tích lũy những bài học của agent theo thời gian, có thể bằng cách chạy các buổi retrospective sau mỗi lần chạy để ghi lại điều gì hiệu quả và điều gì không. Bạn cũng biết cách thiết lập quy ước và cấu trúc nhất quán để giúp codebase của bạn dễ điều hướng đối với agent, và cách thỉnh thoảng dọn dẹp bớt “nợ” do agent tạo ra. Khi làm việc trong một đội nhóm, bạn cân nhắc cách đồng bộ context giữa các agent của những nhà phát triển khác nhau.
Nền tảng về coding agent. Cuối cùng, để đưa ra quyết định tốt trong suốt quá trình, bạn cần hiểu rõ cách coding agent hoạt động: cách chúng thực hiện tìm kiếm/truy xuất (search/retrieval) trên codebase, cách chúng quản lý context window, cách các thao tác khác nhau (như thêm tool call, MCP server, v.v.) ảnh hưởng đến context, cách agent và subagent tương tác với nhau, và cách một agent được xây dựng bằng cách bọc một harness quanh một LLM. Hiểu những điều này giúp agent bớt là một “hộp đen” và giúp bạn nhận ra các kiểu thất bại thường gặp, như over-engineering một giải pháp đơn giản, mất đi tính chặt chẽ vì agent thiếu một quy trình xác minh rõ ràng, dừng lại trước khi đạt mục tiêu, hay các hành động của agent có nguy cơ phá hủy file hoặc dữ liệu production. Nó cũng giúp bạn suy luận về trạng thái của agent và định hướng nó bằng cách đưa ra chỉ dẫn hoặc context phù hợp. Và khi giám sát một lượt chạy, sự hiểu biết này giúp bạn phát hiện tốt hơn khi nào agent đi chệch hướng và cần bạn can thiệp.
Tôi nhận thấy mạng xã hội thường đưa ra những mô tả quá đơn giản hóa về cách dùng coding agent. Ví dụ, đôi khi việc để agent chạy tự động trong nhiều giờ và tiêu tốn hàng triệu, thậm chí hàng chục triệu token là hữu ích. Nhưng hiện tại, giá trị thực tiễn của các tác vụ chạy rất dài hơi (long-horizon) - đặc biệt là so với chi phí bỏ ra - đang bị thổi phồng quá mức so với thực tế. Thay vào đó, việc dùng coding agent hiệu quả nhất thường là một quá trình phức tạp, lặp đi lặp lại rất nhiều, và khả năng can thiệp bằng phán đoán có kỹ năng cao mang lại kết quả tốt hơn hẳn.
Kỹ năng sử dụng coding agent sẽ giúp bạn trở thành một người xây dựng hiệu quả. Điều này đặt bạn vào vị trí thuận lợi để định hướng cả quá trình xây dựng nói chung. Tôi sẽ nói thêm về điều này trong bức thư tuần tới.
Tiếp tục xây dựng nhé!
Andrew