Mình Đã “Sợ” Dùng AI Code Cho Feature Lớn, Cho Đến Khi Tìm Thấy AI Dev Tasks


Hồi tháng trước, mình cố gắng dùng Claude Code để code một feature quản lý dự án mà cơ bản là khá phức tạp — có form nhập dữ liệu, validation, gửi API, xử lý error, v.v. Tôi lồng ghép toàn bộ yêu cầu vào một prompt dài ngoằng, ấn Enter, và chờ AI Code “làm phép màu”.

Kết quả? AI viết ra 300 dòng code, mình mở ra xem, thấy logic ở một chỗ sai, logic ở chỗ khác lại nhầm, thiếu validation ở chỗ này, thêm thứ mình không cần ở chỗ khác. Mình phải “chỉnh sửa” từng phần, nhưng khi chỉnh một chỗ lại ảnh hưởng chỗ khác. Rồi sau một tiếng đồng hồ ngồi debug, mình chỉ còn cách xóa hết đi viết lại bằng tay.

Từ đó, mình cảm thấy hơi ngại — “AI code đúng cho feature nhỏ thôi, feature lớn thì quên đi”. Cho đến khi tôi tìm thấy repo AI Dev Tasks (7.8k stars trên GitHub), và nhận ra vấn đề không phải do AI, mà do cách mình dùng AI quá vô ý thức.

Vấn đề thực tế

Thực ra, điểm yếu không phải ở model AI — Claude hay GPT có thể viết code rất tốt. Vấn đề là khi bạn dump toàn bộ 10 requirement vào một lần, AI phải “cân bằng” tất cả cùng một lúc. Kết quả là code thường:

  • Quên một vài chi tiết (ví dụ bạn nói “validate email” nhưng AI quên mất phần xử lý email không hợp lệ)
  • Overlap logic không cần thiết (viết một cách, bạn lại mong muốn cách khác)
  • Khó debug — nếu có lỗi, bạn không biết nó ở phần nào của toàn bộ code

Đơn giản là: request càng to, AI càng dễ “mất phương hướng”.

Idea từ snarktank: AI Dev Tasks hệ thống quản lý tác vụ đơn giản để quản lý các tác nhân AI.

Repo này của tác giả snarktank có một ý tưởng rất đơn giản: thay vì gửi hết yêu cầu một lần, hãy tách ra từng bước nhỏ, kiểm chứng mỗi bước trước khi sang bước tiếp theo. Giống như khi bạn code bằng tay — bạn không viết toàn bộ chương trình một lúc, bạn viết function, test nó, rồi viết function tiếp theo.

Workflow có 4 bước chính:

Bước 1: Viết cái gọi là “PRD” (Product Requirement Document)

Không phải cái PRD dài dòng trong công ty bạn đâu — mà chỉ là một file markdown mô tả rõ ràng cái feature bạn muốn build: cần gì, tại sao, ai sẽ dùng, giới hạn là gì.

Ví dụ, thay vì tôi bảo AI “code một form upload file”, tôi viết rõ hơn:

Upload dialog cho dự án. Người dùng chọn file CSV từ máy, hệ thống kiểm tra kích thước (max 10MB), hiện progress bar, sau đó reload danh sách dữ liệu. Nếu lỗi, hiện error message với gợi ý.

Có thể kèm thêm: “Tại sao? Vì người dùng hay import dữ liệu lô từ file CSV, cần clear feedback.”

Bạn gửi file này cho AI + template create-prd.md từ repo, AI sẽ viết ra PRD chuẩn mực hơn.

Bước 2: AI chia PRD thành task list

Bạn lấy PRD vừa tạo, gửi kèm file generate-tasks.md, AI sẽ chia thành danh sách chi tiết từng task nhỏ:

1. UI Structure
  1.1 Tạo Dialog component với title, close button
  1.2 Thêm file input với label "Chọn file CSV"
  1.3 Thêm button "Upload"
  1.4 Placeholder error message

2. File Validation
  2.1 Kiểm tra loại file (phải là CSV)
  2.2 Kiểm tra kích thước (max 10MB)
  2.3 Hiện error message chi tiết

3. Upload Logic
  3.1 Gửi file lên server
  3.2 Hiện progress bar (không fake)
  3.3 Handle timeout / server error
  3.4 Reload dữ liệu khi xong

Mỗi task nhỏ tới mức có thể code xong trong 5-10 phút.

Bước 3: Chỉ AI code từng task, bạn check từng bước

Mình bảo AI: “Làm task 1.1 nào”.

AI viết code cho chỉ task 1.1 — có thể chỉ 15-20 dòng, tạo Dialog component với title và close button. Mình xem code, nếu ổn thì “OK task 1.1 xong, sang 1.2”.

Nếu mình thấy chỗ nào không ưng (ví dụ “thêm class CSS này vào”, “dùng Tailwind chứ không dùng styled-components”), mình bảo ngay, AI sửa task 1.1, rồi mới sang 1.2.

Bước 4: Lặp lại

Cứ thế từng task một. 1.2 xong, 1.3, 1.4, rồi chuyển sang block 2. Mỗi lần review ít dòng code, nên dễ catch lỗi.

Tại sao cách này mình thấy nó work

Thứ nhất: AI tập trung hơn

Khi request cụ thể (“Tạo Dialog component với title, close button”), AI không bao giờ tự ý thêm thứ bạn không cần. Output hẹp nhưng chính xác. Nó khác hẳn với “code một upload feature” — quá vague, AI có thể hiểu 10 cách khác nhau.

Thứ hai: Bạn kiểm soát hướng đi

Sau mỗi task, bạn xem code, có thể chỉnh sửa hướng. Giống như pair programming — AI code, bạn ngồi bên canh, bảo “không, đợi, làm cách khác đi”. Kết quả là code theo ý bạn từ đầu, không phải sửa sau.

Thứ ba: Bug dễ tìm

Nếu có lỗi, bạn biết nó ở task nào (ví dụ “progress bar không chạy” = task 3.2), thay vì phải scan toàn bộ code. Fix nhanh, không ảnh hưởng phần khác.

Thứ tư: Thay đổi requirement dễ

Nếu bạn sau này muốn “hạn upload thành 5MB chứ không 10MB”, bạn chỉ cần sửa task 2.2, không refactor toàn bộ.

Mình thử rồi, có khác?

Hơn tháng trước, mình áp dụng workflow này cho một feature quản lý workflow (có state machine, transition validation, v.v.) — khá phức tạp. Thay vì dump, mình tạo PRD, sinh task, rồi từ từ code. Kết quả?

  • Mất thêm 30 phút để tạo PRD + task list
  • Nhưng tiết kiệm 1.5 tiếng debug vì code từ lần đầu đã đúng hướng
  • Code sạch hơn vì mỗi task là một trách nhiệm rõ ràng
  • Dễ giải thích với team — chỉ cần show task list, team biết feature gồm những gì

Net net, nhanh hơn cách “dump rồi sửa” khoảng 30 phút cho feature đó.

Ai nên dùng repo AI Dev Tasks?

Nên dùng nếu:

  • Feature bạn muốn code khá phức tạp (10+ component, nhiều logic state)
  • Bạn chưa quen dùng AI, muốn kiểm soát từng bước
  • Bạn muốn code vừa đúng vừa sạch lần đầu

Không cần thiết nếu:

  • Feature nhỏ (một dialog, vài function)
  • Bạn đã rất quen dùng AI, có thể guide bằng natural language tốt
  • Dự án có team lớn — có thể bạn cần agile sprint, code review formal, v.v. rồi

Làm thế nào để bắt đầu?

  1. Clone repo này: git clone https://github.com/snarktank/ai-dev-tasks.git
  2. Mở Claude Code (hoặc Codex, Windsurf, Amp, v.v.)
  3. Tạo PRD: kéo file create-prd.md vào Claude, bảo “dùng template này để tạo PRD cho feature: [mô tả feature của bạn]”
  4. Sinh task list: copy PRD vừa tạo, kéo file generate-tasks.md vào, bảo “chia PRD này thành task list chi tiết”
  5. Code từng task: copy task list, chỉ AI “làm task 1.1”, review, rồi tiếp “làm task 1.2”, v.v.

Không cần cài đặt, không cần script — toàn bộ là prompt hướng dẫn AI thôi. Nếu sau đó bạn muốn chỉnh sửa style, template ấy là file markdown, chỉnh đơn giản.

Lưu ý nhỏ

Cách này không phải viên đạn bạc — nó yêu cầu bạn rõ ràng từ đầu, review kỹ từng bước, chỉ dẫn có tâm. Nếu PRD bạn mơ hồ, AI vẫn sẽ hỏi lại. Nhưng nếu bạn rõ ràng từ đầu, quy trình này sẽ tiết kiệm rất nhiều thời gian ngồi sửa code sau này.

Bản thân mình giờ không code feature lớn nào mà không dùng cách này. Nó không quá phức tạp, mà kết quả thật sự khác biệt.


Previous

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *