Tài liệu đào tạo nội bộ · Bản dành cho học viên

Làm phần mềm bằng cách ra đề, duyệt và nghiệm thu

Đây là bản dành cho học viên. Mọi ví dụ đã được thay bằng ví dụ chung và hai sản phẩm của khoá học: "Sổ thuật ngữ dự án" và kho luyện tập "Hỏi đáp với khách".

Sổ tay này dạy người không chuyên kỹ thuật cách làm ra một sản phẩm phần mềm chạy thật bằng Claude Code. Bạn không viết mã. Bạn viết đề bài, duyệt bản đặc tả, kiểm tra kết quả trên trình duyệt thật và quyết định khi nào phát hành.

Dành cho
BA, PM, kiểm thử, vận hành, người làm nghiệp vụ muốn tự dựng công cụ
Điều kiện vào
Dùng máy Mac thành thạo, đọc được tiếng Anh kỹ thuật cơ bản, chưa cần biết lập trình
Đầu ra
Tự cài đặt môi trường, tự làm một công cụ nhỏ chạy trên mạng, tham gia dự án thật đúng quy trình
01

Vibe code là gì, bạn làm vai gì

Mục tiêu học: hiểu đúng cách chia việc giữa người và AI, và ba vai bạn phải giữ trong mọi dự án.

Vibe code là cách làm phần mềm trong đó AI viết toàn bộ mã nguồn, còn người quyết định làm gì, duyệt cách làm và nghiệm thu kết quả. Người làm không đọc từng dòng mã. Người làm đọc đặc tả, chạy thử sản phẩm và giữ kỷ luật quy trình.

Trong khoá này bạn làm hai sản phẩm theo cách đó:

  • Sổ thuật ngữ dự án. Bắt đầu là trang web tĩnh dựng bằng Vite, phát hành lên Cloudflare Pages. Sau đó thêm máy chủ Hono với SQLite, gợi ý bản dịch bằng AI, rồi nối với Backlog và Teams.
  • Hỏi đáp với khách. Kho luyện tập có sẵn: ứng dụng theo dõi câu hỏi giữa khách Nhật và đội phát triển. Bạn vào kho này để tập sửa lỗi an toàn.

Ba vai bạn phải giữ

Người ra đề

Mô tả vấn đề, phạm vi, tiêu chí đạt. Đề bài mơ hồ thì AI đoán, và đoán sai tốn nhiều giờ hơn viết rõ 15 phút.

Người duyệt

Đọc bản đặc tả và kế hoạch AI sinh ra trước khi cho làm. Sai ở đây rẻ. Sai sau khi đã có mã đắt gấp nhiều lần.

Người nghiệm thu

Tự bấm trên trình duyệt thật, so với tiêu chí đã viết. AI nói "đã xong" chưa phải bằng chứng.

Những gì vibe code không phải

  • Không phải chat rồi dán mã vào đâu đó. Claude Code chạy trong thư mục dự án, tự đọc và sửa tệp, tự chạy lệnh kiểm tra.
  • Không phải bỏ qua quy trình. Dự án lớn phải đi theo thứ tự: đặc tả trước, kế hoạch sau, rồi mới làm. Bỏ bước là cách nhanh nhất để mất một ngày.
  • Không phải một người một lần. Dự án thật thường chạy vài phiên AI song song trên cùng thư mục. Phần lớn quy tắc an toàn ở học phần 08 ra đời từ tình huống này.
Nguyên tắc

AI viết mã. Người giữ ba thứ: đề bài, quyết định và bằng chứng nghiệm thu. Bỏ một trong ba là dự án trôi.

02

Kiến thức nền tối thiểu

Mục tiêu học: đọc hiểu những gì AI nói với bạn. Không cần viết mã, cần hiểu 25 khái niệm dưới đây.

Nơi mã sống

Kho mã nguồn (repository)
Một thư mục dự án có Git theo dõi. Mỗi dự án là một kho.
Commit
Một mốc lưu có tên và thời gian. Quay lại mốc được. Commit là đơn vị bạn nghiệm thu và bàn giao.
Nhánh (branch)
Một dòng phát triển tách ra để thử. Dự án nhỏ thường làm thẳng trên nhánh chính, kèm kỷ luật commit chặt.
Cây làm việc (working tree)
Trạng thái hiện tại của các tệp trên đĩa, gồm cả phần chưa commit. Nhiều phiên AI dùng chung một cây là tình huống nguy hiểm nhất.
Tệp .env và khoá API
Tệp chứa mật khẩu và khoá dịch vụ. Không bao giờ dán vào chat, không bao giờ commit.

Cách sản phẩm chạy

Giao diện (frontend)
Phần người dùng nhìn thấy trong trình duyệt.
Máy chủ (backend)
Phần xử lý, lưu dữ liệu, gọi AI. Sổ thuật ngữ bản đầu là trang tĩnh nên chưa có phần này.
Cơ sở dữ liệu và schema
Nơi lưu dữ liệu và bản mô tả cấu trúc của nó. Đổi schema là thay đổi lớn, luôn cần đặc tả và sao lưu.
API
Cửa để giao diện nói chuyện với máy chủ, hoặc để ta nói chuyện với dịch vụ ngoài như một mô hình AI.
localhost và cổng
Sản phẩm chạy trên máy bạn ở địa chỉ dạng http://localhost:5173. Mỗi dự án một số cổng. Hai dự án chung cổng thì một cái không chạy.
Chạy tại chỗ, dev, prod
Ba môi trường: máy bạn, máy thử, máy thật có người dùng. Đọc dữ liệu phải đúng môi trường, xem quy tắc đọc cấu hình ở học phần 08.
Triển khai (deploy)
Đưa bản mới lên máy thật. Chỉ làm khi người phụ trách ra lệnh.

Cách biết mã có đúng không

Typecheck
Kiểm tra máy móc xem mã có tự mâu thuẫn không. Xanh là điều kiện tối thiểu trước mỗi commit.
Kiểm thử đơn vị (test)
Kịch bản chạy tự động kiểm tra từng phần. Xanh nghĩa là những gì đã được viết kịch bản vẫn đúng.
Kiểm thử đầu cuối (e2e)
Máy tự mở trình duyệt và bấm như người dùng, dùng Playwright. Bắt được lỗi hiển thị mà typecheck không thấy.
Nhật ký (log)
Dòng chữ hệ thống ghi khi chạy. Khi có lỗi, nhật ký là thứ đầu tiên AI cần đọc.
Lỗi im lặng
Hệ không báo gì nhưng làm sai. Nguy hiểm hơn lỗi đỏ. Chỉ bắt được bằng nghiệm thu trên trình duyệt thật.

Cách làm việc với AI

Claude Code
Công cụ AI chạy trong cửa sổ dòng lệnh hoặc VS Code, đọc và sửa được tệp trong thư mục dự án.
CLAUDE.md
Tệp luật của dự án, AI đọc mỗi phiên. Có một bản cấp máy áp cho mọi dự án và một bản riêng mỗi kho.
Đặc tả, kế hoạch, đầu việc
Ba tài liệu spec-kit sinh ra trước khi viết mã: cái gì và vì sao, làm thế nào, chia thành những bước nào.
Skill và agent
Skill là quy trình đóng gói gọi bằng lệnh gạch chéo. Agent là AI con nhận một vai (BA, kiểm thử) để chạy song song.
MCP
Cách nối Claude Code với công cụ ngoài, như Stitch để vẽ giao diện hay sentrux để đo chất lượng mã.
Token và chi phí
AI tính tiền theo lượng chữ đọc và viết. Đề bài rõ và tệp CLAUDE.md gọn giúp tiết kiệm.
Phiên (session)
Một cửa sổ Claude Code đang chạy. Dự án lớn có nhiều phiên cùng lúc.
Ảo giác (hallucination)
AI nói chắc điều không có thật, ví dụ "đã kiểm tra trên trình duyệt" khi chưa làm. Cách phòng là đòi bằng chứng.
Cách học

Đừng học thuộc bảng này. Mở nó bên cạnh khi làm tuần đầu. Gặp từ nào AI dùng mà bảng chưa có, hỏi AI giải thích bằng tiếng Việt rồi thêm vào bảng.

03

Cài đặt bộ công cụ

Mục tiêu học: máy sẵn sàng làm dự án. Cài theo đúng thứ tự, mỗi bước có lệnh kiểm tra.

Hướng dẫn cho máy Mac chip Apple. Tích vào ô khi xong. Trạng thái tích được lưu trên trình duyệt của bạn.

Bậc 1. Nền tảng, bắt buộc

Bậc 2. Nối vào hạ tầng công ty

Bậc 3. Cần khi dự án có máy chủ hoặc phát hành

Bậc 4. Máy chủ MCP, tuỳ chọn nhưng nên có

Công cụViệcDùng khiLưu ý khi cài
StitchSinh màn hình giao diện từ mô tả chữ, theo hệ thiết kế đã tạoCần bản vẽ giao diện để duyệt trước khi AI viết mã, ví dụ màn danh sách thuật ngữ.Cần khoá Google. Tệp mô tả hệ thiết kế có giới hạn dung lượng; tệp quá lớn thì tải lên báo lỗi, khi đó rút gọn tệp.
sentruxĐo chất lượng mã và so với mốc ban đầuDự án chạy dài, muốn biết mã có xấu đi sau mỗi lượt AI làm không.Máy chip Apple phải tải đúng bản arm64. Lưu mốc một lần bằng sentrux gate --save ., sau đó chạy sentrux gate . để so.
GitNexusĐồ thị gọi hàm, trả lời "sửa chỗ này thì vỡ chỗ nào"Kho mã lớn, hoặc mã cũ không có tài liệu.Chỉ có tác dụng ở kho đã lập chỉ mục bằng gitnexus analyze. Lập lại chỉ mục sau khi mã đổi nhiều.

Kiểm tra toàn bộ một lần

Dán khối lệnh sau vào cửa sổ dòng lệnh. Dòng nào in "không có" thì quay lại bậc tương ứng. Công cụ tuỳ chọn mà bạn chưa cài thì bỏ qua.

for t in brew git node pnpm uvx claude docker wrangler sentrux gitnexus; do
  printf "%-10s " "$t"
  command -v "$t" >/dev/null && "$t" --version 2>/dev/null | head -1 || echo "không có"
done
Chú ý

Đừng ghi số phiên bản cụ thể vào tài liệu dự án. Ghi ngưỡng tối thiểu và lệnh tự kiểm tra như trên. Số phiên bản lệch sau vài tuần và người đọc sau tưởng là sự thật.

04

Quy trình làm một dự án

Mục tiêu học: thuộc hai luồng làm việc, biết khi nào dùng luồng nào, và nhịp một ngày làm việc.

Bước 0. Khởi tạo kho

Làm một lần cho mỗi dự án mới, mất khoảng 15 phút.

  1. Tạo thư mục, chạy git init.
  2. Chạy install-speckit.sh trỏ vào thư mục đó. Lệnh này cài các lệnh /speckit-* và bộ xuất HTML.
  3. Mở Claude Code trong thư mục, chạy /speckit-constitution để chốt nguyên tắc dự án: công nghệ, kiểu commit, cách nghiệm thu.
  4. Viết CLAUDE.md của kho theo mẫu ở phụ lục học phần 10. Ghi rõ hai luồng làm việc và những bẫy riêng của dự án.
  5. Tạo .env.example liệt kê khoá cần có nhưng để trống. Thêm .env vào .gitignore.

Hai luồng làm việc

Mọi kho nên ghi hai luồng này trong CLAUDE.md. Chọn sai luồng là lỗi phổ biến nhất của người mới.

Luồng nhanh

  • Sửa lỗi nhỏ, đổi chữ, chỉnh 1 đến 2 tệp.
  • Không đổi cấu trúc dữ liệu, không đổi API, không đụng luồng thời gian thực hay phân quyền.
  • AI làm thẳng, chạy typecheck và test xanh, commit tiếng Việt kiểu fix(phạm vi): mô tả.
  • Đụng giao diện thì chạy thêm kiểm thử đầu cuối liên quan.

Luồng chuẩn spec-kit

  • Bắt buộc khi có một trong các dấu hiệu: tính năng mới trọn vẹn, đổi schema, đụng phân quyền hay bảo mật, ước tính trên 5 tệp, hoặc kéo dài nhiều phiên.
  • Đi đủ 5 bước dưới đây. Mỗi bước sinh tài liệu Markdown kèm bản HTML để bạn đọc.
  • Bạn duyệt bản đặc tả trước khi AI đi tiếp. Đây là điểm kiểm soát rẻ nhất.

Năm bước của luồng chuẩn

Đặc tả/speckit-specifyMô tả cái gì, cho ai, vì sao, tiêu chí đạt. Chưa nói làm thế nào.
Làm rõ/speckit-clarifyAI hỏi lại chỗ mơ hồ. Trả lời hết trước khi lên kế hoạch.
Kế hoạch/speckit-planCách làm: tệp nào, cấu trúc dữ liệu, thứ tự.
Đầu việc/speckit-tasksChia thành các bước nhỏ có thể kiểm tra riêng.
Thực hiện/speckit-implementAI làm lần lượt, chạy kiểm tra sau mỗi bước.

Tài liệu sinh ra nằm ở specs/00X-tên-tính-năng/. Mỗi thư mục là một tính năng đã giao. Kho "Hỏi đáp với khách" đã có sẵn vài thư mục như vậy, ví dụ danh sách câu hỏi và lọc theo trạng thái. Đó là lịch sử dự án mà người mới vào đọc được.

Hai kiểu nhịp giao hàng

Chọn theo khách hàng và ghi vào CLAUDE.md, vì nó đổi cách AI dừng lại chờ bạn.

  • Theo sprint, dừng chờ nghiệm thu: làm xong một sprint, khách kiểm tra và duyệt, rồi mới chạy sprint sau. Hợp với dự án làm cho khách bên ngoài, ví dụ một cửa hàng nhỏ đặt làm trang bán hàng.
  • Chạy hết rồi rà soát một thể: AI làm toàn bộ danh sách đầu việc, bạn rà soát cuối. Hợp với công cụ nội bộ mà người ra đề cũng là người dùng, ví dụ Sổ thuật ngữ cho đội của bạn.

Nhịp một ngày làm việc

  1. Sáng: mở Claude Code, hỏi "hôm qua dừng ở đâu, có gì chưa commit". Nếu kho có phiên khác đang chạy, khai vùng mình sẽ sửa.
  2. Ra đề: viết đề bài theo mẫu học phần 06. Chọn luồng nhanh hay chuẩn.
  3. Duyệt: đọc bản HTML của đặc tả. Sửa bằng lời, không sửa tệp.
  4. Để AI làm: trong lúc chờ, chuẩn bị kịch bản nghiệm thu.
  5. Nghiệm thu: mở trình duyệt, bấm theo kịch bản, chụp màn hình khi lệch.
  6. Commit: AI commit theo đường dẫn tường minh, tài liệu và mã cùng một commit.
  7. Cuối ngày: ghi vào tệp bàn giao trong kho: đã xong gì, dở gì, bẫy gì mới phát hiện. Tin nhắn giữa các phiên không bền, tệp trong kho mới bền.
Luật

Đổi hành vi thì sửa tài liệu trước, sửa mã sau, commit chung. Tài liệu mô tả hành vi thật. Thấy tài liệu nói một đằng mã làm một nẻo thì mặc định tài liệu sai, sửa tài liệu và báo người phụ trách, không lặng lẽ sửa mã cho khớp.

05

Skill, agent và luồng superpowers

Mục tiêu học: biết máy đang có sẵn gì, cái gì tự chạy, cái gì phải gọi tay, và ghép chúng với spec-kit thế nào.

Đang có gì trên máy

BộNằm ởGồmCó tự chạy không
Superpowersbộ skill nguồn mở obra/superpowers.claude/skillsCác skill: brainstorming, writing-plans, executing-plans, subagent-driven-development, dispatching-parallel-agents, test-driven-development, systematic-debugging, verification-before-completion, requesting-code-review, receiving-code-review, using-git-worktrees, finishing-a-development-branch, writing-skills, using-superpowersKhông, nếu chỉ sao chép phần skill. Chỉ chạy khi gõ /tên-skill hoặc khi AI tự chọn gọi.
Agent dùng chung4 vai, không dính công nghệ~/.claude/agents cấp máyproject-manager, business-analyst, code-reviewer, testerCó đăng ký ở mọi kho. Gọi bằng tên trong câu, hoặc AI tự chọn khi giao việc.
Agent riêng khotuỳ kho.claude/agents của từng khoMột tech-lead và vài agent lập trình ghi đúng công nghệ của kho. Ví dụ Sổ thuật ngữ khi có máy chủ: frontend-dev (Vite), server-dev (Hono), db-architect (SQLite)Có đăng ký khi mở Claude Code từ kho đó.
Spec-kit.claude/skills của từng kho, cài bằng install-speckit.shCác lệnh speckit-constitution, specify, clarify, plan, tasks, implement, analyze, checklist và vài lệnh phụ; các lệnh chính có thêm bước xuất HTMLKhông. Gõ lệnh gạch chéo theo thứ tự ở học phần 04.
Skill cấp máy~/.claude/skillsVí dụ skill viết tiếng Việt chuẩn, skill đi kèm GitNexusTuỳ skill. Skill có mô tả khớp việc đang làm thì AI tự gọi; skill khác gọi bằng lệnh gạch chéo.
Hook~/.claude/settings.jsonLệnh tự chạy ở một thời điểm cố định, ví dụ cuối mỗi lượt chạy sentrux so chất lượng mã với mốcCó. Chạy tự động, không cần gọi. Hỏi người phụ trách máy bạn đang có hook nào.
MCP~/.claude.json cấp máyVí dụ Stitch, sentrux, GitNexus. Mọi kho dùng chung.AI tự gọi khi thấy cần, hoặc bạn nêu tên công cụ trong đề bài.
Chú ý

Nếu superpowers được sao chép vào thư mục thay vì cài qua kho tiện ích, bản sao chỉ có phần skill, không có phần hook tự nạp khi mở phiên. Khi đó quy tắc "luôn kiểm tra skill trước khi trả lời" trong using-superpowers không tự chạy. AI chỉ dùng skill khi bạn gõ lệnh hoặc khi AI tự thấy cần, và không phải lượt nào AI cũng tự thấy.

Kiểm tra nhanh: mở phiên mới, giao một tính năng. Nếu AI lao vào viết mã mà không hỏi ngược, skill brainstorming đã không chạy.

Ba cách để skill chạy chắc chắn

  1. Gọi tay. Gõ /brainstorming trước tính năng mới, /systematic-debugging khi có lỗi, /verification-before-completion trước khi cho AI nói "xong". Cách này luôn đúng, không cần cài gì.
  2. Ghi vào CLAUDE.md của kho. Thêm dòng "Tính năng mới: chạy /brainstorming trước /speckit-specify. Có lỗi: chạy /systematic-debugging." AI đọc CLAUDE.md mỗi phiên nên sẽ tự gọi.
  3. Cài hook nạp khi mở phiên. Thêm hook SessionStart vào ~/.claude/settings.json để nạp nội dung using-superpowers vào mọi phiên. Đây là cách bản gốc superpowers làm. Việc sửa cấu hình cấp máy do người phụ trách quyết định, không để AI tự thêm.

Luồng superpowers và cách ghép với spec-kit

Hai bộ trùng vai ở bước lập kế hoạch. Quy ước trong khoá: spec-kit là luồng chuẩn, superpowers bổ trợ ở đầu, giữa và cuối.

Giai đoạnSuperpowersSpec-kitQuy ước dùng
Làm rõ ý/brainstorming/speckit-clarifyBrainstorming trước khi viết đặc tả, khi ý còn mơ hồ. Clarify sau khi đã có đặc tả.
Đặc tả và kế hoạch/writing-plans/speckit-specify, /speckit-plan, /speckit-tasksDùng spec-kit, vì có bản HTML để duyệt và thư mục specs làm lịch sử.
Tách vùng làm việc/using-git-worktreesKhông cóDùng khi kho có nhiều phiên và muốn hết lo giẫm chân. Đổi cách làm phải hỏi người phụ trách trước.
Thực hiện/executing-plans, /subagent-driven-development, /dispatching-parallel-agents/speckit-implementImplement của spec-kit là mặc định. Việc gồm nhiều phần độc lập thì cho AI phát nhiều agent song song, mỗi agent một tệp.
Viết mã có kiểm thử/test-driven-developmentKhông cóBật khi đụng luật nghiệp vụ có thể tính sai: tiền, điểm, phân quyền.
Gặp lỗi/systematic-debuggingKhông cóLuôn dùng. Bắt AI tìm nguyên nhân gốc trước khi sửa.
Trước khi nói xong/verification-before-completion/speckit-checklistCả hai. Checklist cho đặc tả, verification cho mã.
Rà soát mã/requesting-code-review, /receiving-code-review/speckit-analyzeRà soát mã sau implement, trước commit tính năng. Agent code-reviewer làm việc này.
Kết thúc/finishing-a-development-branchKhông cóDùng khi làm trên nhánh riêng, để chốt gộp hay bỏ.

Agent theo vai

Agent là một AI con nhận một vai và làm trong ngữ cảnh riêng. Nó không thấy cuộc trò chuyện chính, nên đề bài giao cho agent phải đủ như giao cho người mới vào.

AgentVaiGiao việc gì
project-managerQuản lý dự ánLộ trình, chia sprint, ưu tiên, rủi ro
business-analystPhân tích nghiệp vụYêu cầu, câu chuyện người dùng, tiêu chí nghiệm thu, luật nghiệp vụ
tech-leadriêng khoTrưởng kỹ thuậtChọn cách làm, chia đầu việc cho agent lập trình, rà kiến trúc
Agent lập trìnhriêng kho, tên khác nhau theo khoLập trình từng lớpĐặt tên theo lớp của kho. Ví dụ Sổ thuật ngữ: frontend-dev cho giao diện Vite, server-dev cho máy chủ Hono, ai-dev cho phần gợi ý dịch, db-architect cho cơ sở dữ liệu SQLite.
code-reviewerRà soát mã, chỉ đọcTìm lỗi, lỗ hổng, hiệu năng sau khi agent khác viết
testerKiểm thửKế hoạch kiểm thử, viết và chạy kiểm thử, báo lỗi
Explore, Plan, general-purposeCó sẵn của Claude CodeTìm trong kho lớn, lập kế hoạch, việc chưa có vai riêng

Luồng phối hợp chung: quản lý dự án chia lộ trình, phân tích nghiệp vụ làm rõ yêu cầu, trưởng kỹ thuật chia đầu việc, agent lập trình viết, rà soát mã soát, kiểm thử kiểm. Bạn giao bằng câu tự nhiên, ví dụ: "Nhờ business-analyst viết tiêu chí nghiệm thu cho tính năng gợi ý bản dịch, xong thì cho tester viết ca kiểm thử."

Ba giới hạn cần biết

  • Claude Code chỉ đọc .claude/agents tại thư mục mở phiên và ~/.claude/agents cấp máy, không đọc thư mục cha. Vì vậy agent nên chia hai lớp: các vai dùng chung ở cấp máy, thấy được ở mọi kho; vai lập trình để trong từng kho.
  • Vai lập trình ghi cứng công nghệ và bẫy của kho. Mỗi agent mở đầu bằng đọc CLAUDE.md và spec của kho, kèm các sự cố đã xảy ra trong kho đó. Kho mới cần agent lập trình thì sao chép bộ của kho gần nhất về công nghệ và sửa lại.
  • Nhiều agent cùng sửa một tệp thì đè nhau. Phát song song chỉ khi việc độc lập, và chia theo tệp: mỗi tệp một agent.
Điều phối lớn

Claude Code có công cụ Workflow để chạy hàng chục agent theo kịch bản, ví dụ rà soát nhiều chiều rồi kiểm chứng từng phát hiện. Công cụ này tốn nhiều token và chỉ chạy khi bạn nói rõ "dùng workflow". Với đội mới, chưa cần.

06

Viết đề bài cho AI

Mục tiêu học: viết được đề bài mà AI làm đúng ngay lần đầu trên 7 trong 10 lần.

Đề bài tốt có sáu phần. Thiếu phần nào AI sẽ tự đoán phần đó, và bạn sẽ mất thời gian sửa lại thứ đáng lẽ chỉ cần một câu.

PhầnTrả lời câu hỏiVí dụ: Sổ thuật ngữ, tính năng gửi thuật ngữ đã chốt lên Teams
Bối cảnhHệ đang có gì, người dùng là aiSổ thuật ngữ đã có máy chủ Hono và SQLite. Người dùng là BrSE và Comtor (thông dịch viên) tra cứu thuật ngữ khi làm với khách Nhật.
Mục tiêuSau khi xong, người dùng làm được gì mớiMỗi thuật ngữ có trạng thái: Nháp hoặc Đã chốt. Khi một thuật ngữ chuyển sang Đã chốt, kênh Teams của đội nhận một tin báo.
Phạm viNhững màn hình, luồng cụ thể nào bị đụngMàn sửa thuật ngữ có nút Chốt, danh sách có lọc theo trạng thái, luật gửi Teams, cột trạng thái mới trong bảng thuật ngữ.
Ngoài phạm viNhững gì cố ý không làm lần nàyKhông đổi trạng thái hàng loạt cho thuật ngữ cũ. Không đổi nội dung tin Teams đang có.
Tiêu chí nghiệm thuBạn sẽ bấm gì và thấy gì để nói "đạt"Lưu một thuật ngữ ở trạng thái Nháp, kênh Teams không nhận tin. Bấm Chốt, Teams nhận đúng một tin trong vòng một phút.
Ràng buộcLuật kỹ thuật và quy trình phải theoĐi luồng chuẩn spec-kit vì đổi schema. Cột mới đặt cuối bảng. Sao lưu cơ sở dữ liệu prod trước khi chạy migration.

Câu nói hay và câu nói dở

Dở, vì AI phải đoán

  • "Làm cho nó đẹp hơn."
  • "Thêm tính năng xuất báo cáo."
  • "Sửa lỗi hôm qua."
  • "Deploy luôn đi."

Tốt, vì có thể kiểm tra

  • "Bảng thuật ngữ trên điện thoại đang tràn ngang. Cho cuộn trong khung bảng, thân trang không cuộn ngang."
  • "Thêm nút xuất Excel ở màn danh sách câu hỏi, xuất đúng các cột đang hiển thị và bộ lọc đang chọn."
  • "Lỗi: bấm Chốt lần hai thì Teams nhận hai tin. Mong muốn: chỉ một tin cho mỗi lần chốt."
  • "Chưa deploy. Cho tôi danh sách khác biệt giữa bản local và bản prod trước."

Bốn thói quen khi nói chuyện với AI

  • Mô tả hiện tượng, không đoán nguyên nhân. "Trang trắng sau khi bấm Lưu" tốt hơn "chắc là lỗi cơ sở dữ liệu". Khi bạn đoán sai, AI đi theo hướng sai.
  • Đòi bằng chứng cho mỗi câu "đã xong". Hỏi: "Kiểm bằng cách nào? Cho tôi xem kết quả lệnh hoặc ảnh chụp."
  • Yêu cầu AI hỏi lại trước khi làm việc lớn. Câu "Liệt kê những gì bạn chưa chắc trước khi bắt đầu" tiết kiệm nhiều giờ.
  • Một lượt một việc. Gộp ba yêu cầu vào một câu thì AI ưu tiên cái dễ và quên cái khó.

Dùng skill có sẵn

  • /brainstorming trước khi ra đề cho tính năng mới, để AI hỏi ngược và làm rõ ý bạn.
  • /systematic-debugging khi gặp lỗi, để AI tìm nguyên nhân gốc thay vì vá triệu chứng.
  • /verification-before-completion trước khi AI được phép nói "xong".
  • Skill viết tiếng Việt chuẩn, nếu máy bạn có, để soạn và rà soát tài liệu gửi khách.
  • Bảng ghép đầy đủ giữa superpowers và spec-kit ở học phần 05.
07

Nghiệm thu và kiểm chứng

Mục tiêu học: phân biệt "AI nói đã xong" với "đã xong", và biết ba mức bằng chứng.

Nghiệm thu là vai quan trọng nhất của người không viết mã. Người viết mã có thể tự đọc mã để tin. Bạn phải tin bằng bằng chứng bên ngoài mã.

Ba mức bằng chứng, từ yếu đến mạnh

MứcBằng chứngĐủ cho
1. Máy kiểmTypecheck xanh, kiểm thử đơn vị xanh, kết quả lệnh dán trong chatLuồng nhanh không đụng giao diện
2. Máy bấm thay ngườiKiểm thử đầu cuối Playwright chạy qua, có ảnh chụp màn hìnhMọi thay đổi giao diện trước khi bàn giao
3. Người bấmBạn mở trình duyệt thật, đi theo kịch bản nghiệm thu, đối chiếu dữ liệu trong cơ sở dữ liệuTính năng mới, bất cứ gì sắp lên prod
Luật

Giao diện xong phải kiểm trên trình duyệt thật hoặc Playwright, hoặc AI phải nói rõ "chưa kiểm". Đo cơ sở dữ liệu và cây giao diện trước khi nói "đã sửa". Câu "đã sửa" không kèm phép đo là câu chưa được phép nói.

Kịch bản nghiệm thu mẫu

Viết trước khi AI làm, từ phần "tiêu chí nghiệm thu" của đề bài. Mỗi dòng một hành động và một kết quả mong đợi.

# Tính năng: chốt thuật ngữ và báo Teams (Sổ thuật ngữ)
1. Mở /terms/new                      → thấy ô "Trạng thái", mặc định Nháp
2. Nhập 仕様書 (shiyōsho, bản đặc tả), lưu Nháp → kênh Teams KHÔNG có tin mới sau 2 phút
3. Mở lại thuật ngữ đó, bấm Chốt     → kênh Teams có đúng một tin trong 1 phút
4. Danh sách, lọc "Đã chốt"          → chỉ hiện thuật ngữ ở bước 3
5. Kiểm DB: SELECT status FROM Term WHERE id=... → đúng giá trị Đã chốt

Kiểm chứng phải đi đúng đường hệ thống thật đi

Đây là bẫy tinh vi nhất. Một phép kiểm trả lời câu hỏi khác với câu bạn muốn hỏi thì kết quả xanh vô nghĩa.

  • Kiểm tra tệp tồn tại trên đĩa không chứng minh hệ đọc được tệp đó qua đường tải lên.
  • Biến môi trường in ra từ cửa sổ dòng lệnh của bạn không phải biến môi trường trong tiến trình đang chạy.
  • Kiểm thử với dữ liệu tự bịa không bắt được lỗi chỉ xảy ra với dữ liệu thật. Ví dụ ở Sổ thuật ngữ: gợi ý dịch chạy tốt với câu tiếng Nhật ngắn tự gõ, nhưng hỏng với đoạn dán từ email của khách có ký tự toàn khổ và xuống dòng. Chỉ thử bằng đúng đoạn văn thật mới thấy.
  • Lớp kiểm chứng của chính bạn cũng có thể báo sai. Bước kiểm tra tự động có thể báo "AI không gợi ý được" trong khi bản gợi ý đã lưu đúng vào cơ sở dữ liệu.

Bảng kiểm trước khi nói "đạt"

08

Quy tắc an toàn bắt buộc

Mục tiêu học: thuộc các quy tắc đã trả giá bằng sự cố thật. Mỗi quy tắc ở đây từng mất ít nhất nửa ngày.

Khi nhiều phiên AI dùng chung một thư mục

Tình huống thường gặp ở dự án có nhiều người hoặc nhiều phiên AI cùng làm. Chỉ có một Git, một cây làm việc, không có cơ chế nào của Git bảo vệ bạn. Mười quy tắc đầy đủ nằm trong tệp luật cấp máy, đây là bản tóm tắt.

  1. Khai vùng trước khi sửa. Đầu phiên, nhắn các phiên khác mình sẽ sửa tệp nào. Thông tin bền thì ghi vào tệp trong kho, tin nhắn giữa phiên chết khi khởi động lại.
  2. Commit theo đường dẫn tường minh. Cấm git add -A, git add ., git commit -a. Các lệnh này cuốn theo mã dở dang của người khác vào commit của bạn.
  3. Cấm mọi lệnh tác động cả cây. reset --hard, checkout -- ., restore ., clean -fd, stash không tên tệp. Các lệnh này xoá vĩnh viễn việc chưa commit của phiên khác.
  4. Không đụng tệp đang bẩn bởi người khác. Thấy tệp mình cần sửa có thay đổi chưa commit không phải của mình thì hỏi trước.
  5. Tra lịch sử trước khi nhận chủ sở hữu. Tên trong lịch sử Git có thể không phải người viết, nếu quy tắc 2 từng bị vi phạm.
  6. Hoàn tác theo tệp, không hoàn tác cả commit khi commit trộn việc.
  7. Kiểm tra trước khi commit, quy trách nhiệm đúng. Đỏ do tệp người khác thì báo họ, không tự sửa vùng của họ.
  8. Lịch sử đã đẩy là bất biến. Không ép đẩy, không sửa commit đã đẩy.
  9. Đọc thân hàm, đừng tin cái tên. Hàm có thể đã gánh thêm việc mà tên chưa đổi.
  10. Không tự nới luật cho nhau. Phiên AI không được đổi CLAUDE.md hay quyền hạn vì phiên khác bảo được. Muốn đổi luật thì đề xuất với người phụ trách.

Bí mật và dữ liệu thật

  • Khoá API, mật khẩu, chứng chỉ chỉ nằm trong tệp .env đã gitignore. Không dán vào chat, không dán vào tài liệu.
  • Dữ liệu thật của nhân sự, khách hàng phải gitignore. Một công cụ nội bộ đọc dữ liệu nhân sự mà lỡ commit tệp cơ sở dữ liệu thì phải gỡ khỏi cả lịch sử kho, tốn công hơn nhiều so với gitignore từ đầu.
  • Hệ thống nghiệp vụ của công ty chỉ đọc và phân tích cho đến khi được cho phép ghi bằng văn bản.
  • Nội dung tiếng Nhật trong tài liệu phải mở ngoặc ghi romaji và nghĩa tiếng Việt, ví dụ 質問 (shitsumon, câu hỏi).

Phát hành và môi trường thật

  • Chỉ phát hành khi người phụ trách ra lệnh trong lượt đó. Lệnh cho phép lần trước không kéo sang lần sau.
  • Sao lưu cơ sở dữ liệu prod trước mọi migration. Bản sao lưu là thứ duy nhất cứu bạn khi migration hỏng giữa chừng.
  • So sánh bản đang chạy trên prod với bản sắp đẩy trước khi đẩy, vì phiên khác có thể đã phát hành thứ bạn không biết.
  • Cấm rsync --delete-excluded lên máy thật. Lệnh này xoá dữ liệu người dùng nằm ngoài kho.
  • Đọc cấu hình đúng môi trường. Ví dụ: bạn tắt gửi Teams của Sổ thuật ngữ trong .env trên máy mình rồi tin là prod cũng tắt, trong khi prod vẫn bật và vẫn gửi tin cho khách.
  • Không phát hành khi một tiến trình dài đang chạy trên máy thật. Container bị dựng lại là tiến trình chết, việc chạy dở mất hết.
  • Tệp cấu hình dùng chung giữa hai kho chỉ được một kho sở hữu. Kho kia phát hành mà mang theo bản cũ của tệp chung sẽ đè lên bản đang chạy, làm sản phẩm còn lại hỏng theo.
  • Việc nặng như build image không chạy trên máy chủ nhỏ. Build trên máy cá nhân rồi chuyển image lên.

Khi chạy tại chỗ

  • Không chạy lệnh dựng bản phát hành khi máy chủ phát triển đang chạy. Kết quả có thể là mất toàn bộ giao diện và mất hàng giờ tìm lý do.
  • Tiến trình theo dõi cũ tích lại thành tiến trình mồ côi làm mã mới không nạp. Thấy "sửa rồi mà vẫn như cũ" thì tắt sạch và chạy lại một tiến trình.
  • Không chạy kiểm thử đầu cuối khi máy chủ phát triển đang giữ cơ sở dữ liệu SQLite.
09

Sự cố thật và bài học

Mục tiêu học: nhận ra kiểu sự cố khi nó lặp lại. Đọc phần "Luật rút ra" là đủ, phần nguyên nhân dành cho ai muốn hiểu sâu.

Các sự cố dưới đây đã xảy ra thật. Bối cảnh và tên sản phẩm đã được thay bằng ví dụ chung hoặc sản phẩm của khoá học. Luật rút ra giữ nguyên.

Prod sập vì xuất bản ghi lớn (một ứng dụng ghi biên bản họp)

Hiện tượng
Người dùng tải gói xuất đầy đủ của một cuộc họp dài, cả trang chết với mọi người.
Nguyên nhân
Mã đọc toàn bộ tệp ghi âm rất lớn vào bộ nhớ. Vài lượt tải cùng lúc vượt bộ nhớ máy chủ.
Luật rút ra
Mọi thứ tải lên hay tải xuống phải chảy theo dòng, không gom vào bộ nhớ. Đặt trần bộ nhớ cho container để một lỗi không kéo cả máy.

Nhập tệp kẹt giữa chừng (một ứng dụng ghi biên bản họp)

Hiện tượng
Nhập bản ghi ngắn chạy được, bản dài đứng mãi ở một mức phần trăm.
Nguyên nhân
Chương trình con xử lý âm thanh ghi nhật ký lỗi đầy bộ đệm mà không ai đọc, nên tự treo.
Luật rút ra
Lỗi chỉ xuất hiện với dữ liệu lớn thì nghiệm thu phải có ca dữ liệu lớn. Kịch bản nghiệm thu cần một tệp thật dài.

Commit trộn việc (kho có nhiều phiên AI)

Hiện tượng
Một phiên AI commit với git add -A, cuốn theo mã dở dang của hai phiên khác rồi đẩy lên nhánh chính. Tình huống này dễ lặp lại ở bài tập nhiều phiên trên kho "Hỏi đáp với khách".
Nguyên nhân
Không ai biết có phiên khác đang chạy, và lệnh gom cả cây là mặc định của AI.
Luật rút ra
Toàn bộ 10 quy tắc ở học phần 08. Ghi chú bàn giao trong kho phải nói rõ commit nào trộn việc của ai, để người sau hoàn tác theo tệp.

Trang chết câm sau khi chuyển máy chủ (Sổ thuật ngữ)

Hiện tượng
Chuyển máy chủ Hono sang máy lớn hơn, mọi thứ chạy trong máy nhưng bên ngoài không vào được.
Nguyên nhân
Máy mới không tự mở cổng 443. Cấu hình mạng nằm ngoài kho mã nên AI không thấy.
Luật rút ra
Sau mọi việc hạ tầng, bước cuối là mở tên miền từ mạng ngoài, không phải từ chính máy chủ.

"AI không làm gì" nhưng thật ra đã làm (Sổ thuật ngữ, gợi ý dịch)

Hiện tượng
Màn hình báo gợi ý dịch thất bại, nhưng xem cơ sở dữ liệu thì bản gợi ý đã lưu đúng.
Nguyên nhân
Lớp kiểm chứng của chính chúng ta báo sai, theo nhiều cách khác nhau.
Luật rút ra
Khi kết quả ngược với cảm nhận, nghi lớp đo trước khi nghi lớp làm. Tra bản ghi chạy đầy đủ trước khi kết luận.

Dịch vụ AI treo làm màn hình đứng (Sổ thuật ngữ, gợi ý dịch)

Hiện tượng
Bấm gợi ý dịch cho một loạt thuật ngữ, màn hình đứng im, người dùng không thấy gì.
Nguyên nhân
Dịch vụ AI bên thứ ba treo không trả lời. Mã chờ vô hạn và xử lý theo thứ tự nên chặn mọi yêu cầu sau.
Luật rút ra
Mọi lời gọi dịch vụ ngoài phải có thời hạn chờ và đường dự phòng. Hiển thị bản gốc trước, bản dịch đến sau.

Sản phẩm bên cạnh mất chứng chỉ sau mỗi lần phát hành (hai sản phẩm chung một máy chủ)

Hiện tượng
Một công cụ nội bộ báo lỗi chứng chỉ, trong khi Sổ thuật ngữ vừa phát hành xong trên cùng máy chủ vẫn chạy bình thường.
Nguyên nhân
Hai sản phẩm dùng chung một tệp cấu hình máy chủ web. Kho Sổ thuật ngữ giữ một bản cũ của tệp này chỉ có tên miền của mình. Mỗi lần phát hành, bản cũ đè lên bản đang chạy.
Luật rút ra
Tệp chung thuộc một kho duy nhất. Khôi phục tệp xong thì khởi động lại container dùng tệp đó và kiểm lại cả hai tên miền; lệnh nạp lại cấu hình có thể vẫn đọc bản cũ. Sự cố kiểu này lặp lại nếu luật chỉ nằm trong trí nhớ của phiên, chưa ghi vào CLAUDE.md của kho.

Tiến trình dài chết khi còn vài bước (một công cụ nội bộ chấm báo cáo hàng loạt)

Hiện tượng
Lượt chấm gần xong thì dừng hẳn, màn hình vẫn ghi "đang chạy".
Nguyên nhân
Phát hành bản mới dựng lại container, giết tiến trình đang chạy bên trong. Bản ghi trạng thái không ai dọn nên hiện mãi là đang chạy.
Luật rút ra
Không phát hành khi có tiến trình dài. Tiến trình dài phải lưu kết quả từng bước, dọn bản ghi mồ côi khi khởi động, và lưu đệm kết quả AI theo nội dung để chạy lại không tốn tiền.

Build làm treo máy chủ (một ứng dụng ghi biên bản họp)

Hiện tượng
Lệnh build trên máy chủ nhỏ ăn hết bộ nhớ, máy treo, người đang dùng bị rớt theo.
Nguyên nhân
Build cần nhiều bộ nhớ hơn máy chủ có. Trước đó build vẫn qua vì mã còn nhỏ.
Luật rút ra
Build image trên máy cá nhân, đúng kiến trúc của máy chủ, rồi chuyển lên bằng docker load. Máy chủ chỉ chạy, không build.

Lần đo đọc ra 0 commit (một công cụ nội bộ thống kê commit)

Hiện tượng
Một lần đo trên máy thật kết luận nhiều người "không có commit" dù tháng đó họ có commit.
Nguyên nhân
Kho mã được clone từng phần để tiết kiệm, nhưng khi cần nội dung tệp thì không có quyền kéo tiếp. Bước đọc git trả về rỗng và bước chấm coi rỗng là không làm gì.
Luật rút ra
Bằng chứng thiếu phải chặn cả lần đo, không được chấm điểm 0. Thêm bước kiểm tra git có dữ liệu trước khi chấm. Khoá truy cập đưa qua kịch bản hỏi mật khẩu của git, không ghép vào địa chỉ kho.
Cách ghi sự cố

Mỗi sự cố ghi theo ba dòng như trên: hiện tượng, nguyên nhân, luật rút ra. Luật rút ra đưa vào CLAUDE.md của kho ở mục "Bẫy bắt buộc nhớ" để AI đọc mỗi phiên. Sự cố không ghi là sự cố sẽ lặp lại.

10

Lộ trình 4 tuần và phụ lục

Mục tiêu học: đi từ máy trắng đến tham gia dự án thật. Mỗi tuần có điều kiện qua cửa, chưa đạt thì chưa sang tuần sau.

T1Cài đặt

Máy sẵn sàng và sản phẩm đầu tiên

Cài bậc 1 và bậc 2 ở học phần 03. Dựng Sổ thuật ngữ bản tĩnh bằng Vite theo đề bài do người hướng dẫn giao, chỉ dùng luồng nhanh, không cần cơ sở dữ liệu. Phát hành lên Cloudflare Pages.

Cửa: gửi được đường dẫn mở trên điện thoại, kho có ít nhất 5 commit đúng chuẩn.
T2Quy trình

Một tính năng theo luồng chuẩn

Thêm máy chủ Hono với SQLite cho Sổ thuật ngữ để lưu và sửa thuật ngữ. Đi đủ 5 bước spec-kit. Viết kịch bản nghiệm thu trước khi AI làm. Chạy kiểm thử đầu cuối Playwright.

Cửa: thư mục specs có đủ đặc tả, kế hoạch, đầu việc kèm HTML. Người hướng dẫn bấm theo kịch bản nghiệm thu và đạt.
T3Kho có sẵn

Sửa lỗi nhỏ trong kho có nhiều phiên

Nhận 3 lỗi nhỏ trong kho luyện tập "Hỏi đáp với khách". Thực hành khai vùng, commit theo đường dẫn, ghi tệp bàn giao. Đọc CLAUDE.md của kho trước khi bắt đầu.

Cửa: 3 commit được người hướng dẫn chấp nhận, không vi phạm quy tắc nào ở học phần 08.
T4Tự chủ

Một tính năng trọn vẹn có đổi schema

Thêm cho Sổ thuật ngữ một tính năng có đổi schema, ví dụ gợi ý bản dịch bằng AI, hoặc nối Backlog và Teams. Tự ra đề theo mẫu học phần 06, tự duyệt đặc tả, tự nghiệm thu ba mức, tự viết mục sự cố nếu có. Trình bày 10 phút cho nhóm.

Cửa: tính năng lên môi trường thử và được người hướng dẫn nghiệm thu. Bài trình bày nêu được một điều đã làm sai và sửa thế nào.

Sau 4 tuần, học viên đủ điều kiện nhận dự án nội bộ nhỏ một mình, hoặc làm vai ra đề và nghiệm thu trong dự án lớn.

Phụ lục A. Mẫu CLAUDE.md cho kho mới

# CLAUDE.md: «Tên dự án» («một câu mô tả»)

«Công nghệ chính, cổng chạy local, nơi phát hành.»

## Quy trình làm việc: 2 luồng

**Luồng nhanh**: sửa lỗi, đầu việc nhỏ (1 đến 2 tệp, không đổi schema/API).
Code thẳng, typecheck + test xanh, commit tiếng Việt `feat|fix|chore(phạm vi): mô tả`.

**Luồng chuẩn (spec-kit)**: BẮT BUỘC khi tính năng mới trọn vẹn, đổi schema,
đụng phân quyền, ước tính > 5 tệp.
1. /speckit-specify → specs/00X-tên/spec.md + spec.html → đưa HTML cho người phụ trách duyệt.
2. Duyệt xong → /speckit-plan → /speckit-tasks → /speckit-implement.
3. Nhịp giao: «theo sprint chờ nghiệm thu | chạy hết rồi rà soát một thể».

## Kiểm chứng
Giao diện xong phải kiểm trên trình duyệt thật/Playwright hoặc nói rõ CHƯA kiểm.
Đo DB/DOM trước khi nói "đã sửa".

## Bẫy bắt buộc nhớ
- «mỗi sự cố một dòng: luật rút ra»

## Phát hành
Chỉ khi người phụ trách yêu cầu. «lệnh + máy đích + bước sao lưu».

Phụ lục B. Lệnh hay dùng, đọc để hiểu AI đang làm gì

LệnhNghĩa
git status --shortTệp nào đã đổi, chưa commit. Chạy trước mỗi commit.
git log --oneline -1010 mốc gần nhất. Xem ai làm gì hôm qua.
git log --oneline -3 -- đường/dẫnAi đụng tệp này gần đây.
git add a.ts b.ts && git commit -m "..."Commit đúng chuẩn: nêu tên từng tệp.
git restore đường/dẫnBỏ thay đổi của một tệp cụ thể. Không bao giờ dùng dấu chấm thay đường dẫn.
pnpm installTải thư viện dự án cần. Chạy sau khi kéo mã mới.
pnpm devChạy sản phẩm trên máy bạn, mở localhost.
pnpm typecheck && pnpm testHai phép kiểm máy tối thiểu trước commit.
pnpm test:e2eMáy tự bấm trên trình duyệt theo kịch bản.
pnpm prisma migrate devÁp thay đổi cấu trúc cơ sở dữ liệu tại chỗ. Trên prod phải sao lưu trước.
docker compose up --buildDựng và chạy toàn bộ dịch vụ trong container.
lsof -i :5173Tiến trình nào đang giữ cổng 5173. Dùng khi "cổng đã bị chiếm".

Phụ lục C. Bảng kiểm trước khi commit

Phụ lục D. Tài liệu đọc thêm

  • Tệp luật cấp máy ~/.claude/CLAUDE.md: 10 quy tắc Git nhiều phiên và luật tài liệu đi trước mã, bản đầy đủ.
  • CLAUDE.md của kho "Hỏi đáp với khách": mẫu tệp luật dự án, có mục "Bẫy bắt buộc nhớ". Đọc để viết CLAUDE.md của mình.
  • Thư mục specs/ của kho "Hỏi đáp với khách": các bộ đặc tả mẫu để học cách viết đề bài, đánh số theo thứ tự làm.
  • .claude/skills/README.md và .claude/agents/README.md nếu kho có: danh sách skill và agent có sẵn.