
Link bài viết gốc: https://mp.weixin.qq.com/s/RURNTQi-DJ2WN...
Lưu Tiểu Bài · Official Account · Lưu Tiểu Bài r · 2026-10-23 15:48
Bài viết này được chia sẻ lại, bản quyền thuộc về tác giả gốc, toàn văn căn cứ theo link bài gốc
Xin chào mọi người, tôi là Lưu Tiểu Bài.
Năm nay tôi gặp phải hai câu hỏi cực kỳ khó trả lời:
- Official Account của bạn có dùng AI không?
- Sản phẩm của bạn có phải làm bằng Vibe Coding không?
Official Account của tôi có dùng AI không? AI là thứ tốt như vậy, đương nhiên phải dùng chứ. Nhưng nếu tôi trả lời thẳng là "Tôi có dùng AI để viết bài", tôi có thể thấy ngay qua màn hình có người sẽ bảo "Thấy chưa, AI viết đấy, chẳng có chất xám gì, unfollow thôi".
Thực ra, "tôi dùng AI khi viết bài" và "bài viết của tôi do AI viết" là hai chuyện hoàn toàn khác nhau.
Sản phẩm của tôi có phải làm bằng Vibe Coding không? Cũng tương tự như vậy. May mà tôi cũng chẳng cần phải trả lời, vì người hỏi tôi câu này đâu phải người dùng của tôi; sản phẩm của tôi có nhiều người dùng hay không, họ có trả tiền cho tôi hay không, hoàn toàn chẳng liên quan gì đến việc nó có phải do Vibe Coding tạo ra hay không.
Vibe Coding, tôi thích gọi nó là "lập trình ước nguyện" hơn. Nếu founder hoàn toàn không hiểu về kỹ thuật, quả thực rất dễ tạo ra một đống code rác, bug và các rủi ro bảo mật.
Cách giải quyết là gì? Cách giải quyết là phải học.
Đáng tiếc là nhiều người bây giờ chẳng có mấy kiên nhẫn, rất dễ bị cuốn hút bởi lập trình ước nguyện mà không chịu bỏ thời gian ra học. Càng làm trong ngành này lâu, tôi lại càng thấu hiểu: Nhiều người sẵn sàng làm bất cứ điều gì, chỉ để trốn tránh việc học hỏi thực sự.
Để xoa dịu nỗi lo lắng của mọi người, tôi vẫn luôn suy nghĩ: Liệu có cách nào giúp những người mới quen với "lập trình ước nguyện", dù không học chuyên sâu, vẫn có thể hạn chế tối đa code rác và bug không?
Gần đây, tôi đã tìm ra một cách.
Bạn cứ việc thoải mái "lập trình ước nguyện" đi! Nhưng trước khi chính thức phát hành sản phẩm và bắt đầu thu tiền, hãy copy đoạn văn dưới đây cho AI của bạn để nó rà soát lại một lượt.
Nói trước nhé, đây không phải câu thần chú vạn năng. AI chưa chắc đã tìm ra được mọi vấn đề, và càng không đồng nghĩa với việc tìm ra là nó sẽ sửa được.
Thế nhưng, ngay cả vấn đề nằm ở đâu bạn còn chẳng biết, thì làm sao có thể giải quyết được chứ?
Checklist này đến từ Mark Ajzenstadt, founder của Limestone Digital.
Ban đầu, Mark muốn nhắc nhở những ai đang nghĩ rằng "có Vibe Coding rồi thì không cần đến lập trình viên nữa": việc làm ra một sản phẩm chạy được và việc làm ra một sản phẩm có thể vận hành ổn định lâu dài, dám để người dùng trả tiền, ở giữa còn cách nhau rất nhiều công đoạn.
Thế nhưng tôi nhận thấy, dùng ngược lại checklist này cũng rất hay.
Nếu AI đã có thể viết code giúp bạn, tại sao lại không để nó dựa theo checklist này để review code giúp bạn?
Tôi đã thêm một đoạn prompt ở đầu checklist. Bạn có thể copy toàn bộ đoạn này cho AI đang hỗ trợ bạn lập trình:
Bây giờ bạn là reviewer kỹ thuật phần mềm của tôi.Trước tiên hãy đọc toàn bộ code và cấu hình thực tế của dự án này, sau đó đối chiếu theo checklist dưới đây để kiểm tra từng mục một.Yêu cầu:Hãy xác định trước xem từng mục có áp dụng cho sản phẩm của tôi hay không. Mục nào không áp dụng thì bỏ qua luôn, đừng cố nhồi nhét những tính năng vô ích chỉ để khớp với checklist.Khi phát hiện vấn đề, hãy cho tôi biết rủi ro là gì, mức độ nghiêm trọng ra sao và chỉ rõ file code hoặc cấu hình tương ứng. Đừng chỉ đưa ra lời khuyên chung chung.Phần nào chưa thực sự kiểm tra được thì hãy nói rõ là "không thể xác nhận", đừng giả vờ như đã kiểm tra rồi.Sắp xếp theo mức độ nghiêm trọng, hãy chỉ ra cho tôi 10 vấn đề đáng sửa nhất trước tiên, đặc biệt là các vấn đề có nguy cơ gây rò rỉ dữ liệu, thiệt hại tiền bạc hoặc gián đoạn dịch vụ.Tạm thời đừng sửa code vội. Chờ tôi xác nhận xong, chúng ta sẽ xử lý từng vấn đề một.Dưới đây là checklist kiểm tra:> một schema do con người thiết kế bài bản, thay vì một schema do AI tự ứng biến qua từng bảng> tính năng đăng nhập vẫn hoạt động khi người dùng thêm dấu cộng (+) trong email> link đặt lại mật khẩu có thời hạn hết hạn và chỉ dùng được một lần> MFA, kèm phương án khôi phục cho người dùng bị mất điện thoại> session có timeout, và có cách để vô hiệu hóa toàn bộ session của một người dùng> SSO cho khách hàng doanh nghiệp không chịu ký hợp đồng nếu thiếu nó> SAML, vì đội IT của khách hàng đó không chấp nhận magic link> SCIM, để nhân viên bị sa thải mất ngay quyền truy cập ngay khi IT offboard họ> phân quyền và vai trò sâu hơn là chỉ có "admin" và "tất cả những người còn lại"> cơ chế kiểm tra ngăn người dùng A đọc dữ liệu của người dùng B chỉ bằng cách đổi một con số trên URL> cô lập tenant, để bug của khách hàng này không bao giờ làm lộ dữ liệu của khách hàng khác> nút "đăng nhập dưới danh nghĩa người dùng này" cho admin để hỗ trợ, kèm audit trail ghi nhận mỗi lần sử dụng> rate limit khi đăng nhập, để không ai có thể brute-force dò mật khẩu hàng loạt> cơ chế khóa tài khoản ngăn chặn kẻ tấn công mà không vô tình khóa nhầm CFO vào đêm trước cuộc họp hội đồng quản trị> database migration có thể chạy nâng cấp và rollback được> các bản migration không làm khóa bảng chính vào lúc 2 giờ chiều thứ Ba> index, vì câu truy vấn chạy tức thì trên 50 dòng test sẽ bị timeout trên 5 triệu dòng thực tế> connection pooling, để lượng truy cập tăng đột biến không làm database cạn kiệt kết nối> backup hàng đêm> quy trình restore từ các bản backup đã được kiểm thử, vì bản backup chưa từng restore chỉ là một niềm hy vọng> point-in-time recovery cho ngày nào đó ai đó lỡ chạy lệnh delete mà không có mệnh đề where> soft delete, để "tôi lỡ tay xóa mất" chỉ là một ticket hỗ trợ chứ không trở thành một sự cố nghiêm trọng> validation ở phía server, chứ không chỉ ở form phía client> lưu trữ timezone chuẩn xác, để thông báo 9 giờ sáng không bị kích hoạt vào lúc 4 giờ sáng> xử lý được trường hợp khách hàng có dấu nháy đơn trong họ tên> hỗ trợ emoji, ký tự có dấu và văn bản viết từ phải sang trái ở mọi trường nhập> lưu tiền tệ dưới dạng số nguyên, vì với floating point thì 0.1 + 0.2 không bằng 0.3> quy tắc tiền tệ, làm tròn và thuế cho từng quốc gia bạn kinh doanh> data model vẫn đứng vững khi khách hàng thứ hai yêu cầu "chỉ một thay đổi nhỏ thôi"> idempotency key, để việc thử lại thanh toán không trừ tiền thẻ hai lần> khử trùng lặp cho người dùng bấm submit liên tiếp bốn lần> phân trang vẫn hoạt động tốt ở trang 400> tính năng export, vì sớm muộn gì mọi khách hàng cũng muốn lấy dữ liệu ra file bảng tính> tính năng import vẫn xử lý được file CSV ai đó đã lưu từ năm 2009> quy tắc lưu trữ dữ liệu (retention), và code xóa đúng những gì đã cam kết trong hợp đồng> đưa secret ra khỏi code, ra khỏi repo và ra khỏi lịch sử chat của AI> rotate mọi key mà AI đã dán vào file config tháng trước> xác nhận mọi package mà AI cài đặt đều tồn tại và đúng là gói bạn cần dùng> dependency scanning, vì AI đã kéo về những thư viện chưa từng được ai review> input sanitization ở mọi nơi người dùng có thể nhập liệu> biện pháp phòng thủ chống lại SQL injection, XSS, CSRF và danh sách các lỗ hổng OWASP còn lại> tính năng upload file được quét bảo mật, giới hạn dung lượng và lưu ở nơi chúng không thể thực thi mã> Quy tắc CORS không phải kiểu "cho phép tất cả"> Security header trên mọi response> Mã hóa dữ liệu at rest và in transit> Quyền truy cập tối thiểu (least-privilege) cho tất cả mọi người, bao gồm cả AI agent nắm giữ credential môi trường production> Log ghi lại ai đã làm gì mà không ghi lại mật khẩu, token hay số thẻ> Đợt kiểm thử xâm nhập (penetration test) trước khi đội ngũ bảo mật của khách hàng doanh nghiệp tự tiến hành> Câu trả lời cho bảng câu hỏi bảo mật mà mọi khách hàng doanh nghiệp gửi đến, đi kèm bằng chứng cho từng mục> Quy trình tiếp nhận và công bố khi có người lạ gửi email báo cáo lỗ hổng bảo mật> Kế hoạch ứng phó cho ngày một chiếc laptop có quyền truy cập production bị mất cắp> SOC 2, nghĩa là chính sách, bằng chứng và kiểm toán viên, chứ không phải chỉ là một ô tích chọn> HIPAA, ngay thời điểm một hồ sơ bệnh nhân duy nhất chạm tới hệ thống của bạn> BAA với mọi nhà cung cấp tiếp xúc với dữ liệu đó, bao gồm cả nhà cung cấp AI model của bạn> Audit trail ghi nhận ai đã xem bản ghi, chứ không chỉ ai đã thay đổi nó> Phạm vi PCI, và giữ số thẻ hoàn toàn ngoài cơ sở dữ liệu của bạn> Yêu cầu xóa dữ liệu theo GDPR được thực thi trên mọi bảng dữ liệu, bản backup và log> Lưu trữ dữ liệu cục bộ (data residency) cho khách hàng có điều khoản hợp đồng chỉ lưu tại EU> Đánh giá quyền truy cập hàng quý có người ký duyệt> Các môi trường dev, staging và production đồng nhất với nhau> Hạ tầng được định nghĩa bằng mã (infrastructure as code), để cấu hình không chỉ tồn tại trong trí nhớ của một người duy nhất> Pipeline deploy tự động chạy test trước khi bất kỳ thứ gì tiếp cận khách hàng> Rollback một cú nhấp chuột, vì chuyện deploy vào thứ Sáu vẫn cứ xảy ra> Deploy không gián đoạn (zero-downtime), vì khách hàng của bạn không có khung giờ bảo trì> Feature flag, để bạn có thể ship code mà không cần kích hoạt tính năng ngay> Autoscaling cho lượng truy cập tăng vọt vào sáng thứ Hai> CDN, để ứng dụng tải nhanh ở cả Singapore> DNS, chứng chỉ SSL và việc gia hạn không bị hết hạn vào đúng Chủ Nhật> Hàng đợi background job, để các tác vụ chậm không làm đơ trang> Retry với backoff, để một lệnh gọi API chập chờn không làm mất đơn hàng> Dead-letter queue cho các job thất bại sau mọi lần retry> Cron job không bị chạy hai lần vào ngày bạn bổ sung server thứ hai> Caching, và xóa cache đó khi dữ liệu thay đổi> SPF, DKIM và DMARC, để email đặt lại mật khẩu không rơi vào hộp thư rác> Xử lý bounce và complaint đối với mọi transactional email> Quy tắc lưu trữ, để bạn không phải tiếp tục trả tiền duy trì các file tạm từ năm 2021> Cảnh báo chi phí, để vòng lặp agent chạy vô tận bị phát hiện ngay trong ngày chứ không phải đợi đến lúc nhìn hóa đơn (chúng tôi đã học được bài học này với giá $1.382,59)> Kế hoạch khắc phục sự cố sau thảm họa (disaster recovery), được lập thành văn bản và kiểm thử mỗi năm một lần> Region thứ hai, nếu hợp đồng của bạn cam kết mức uptime mà một region không thể đáp ứng> Structured log mà bạn có thể tìm kiếm lúc 3 giờ sáng> Theo dõi lỗi có khả năng gom nhóm cùng một bug thay vì gửi về cho bạn 4.000 email> Kiểm tra uptime từ bên ngoài mạng nội bộ của bạn> Cảnh báo gửi thông báo đến người trực, được tinh chỉnh cho đến khi không còn báo động giả> Bảng điều khiển giám sát theo dõi độ trễ (latency), tỷ lệ lỗi và throughput> Tracing cho một request chậm xuyên suốt mọi service mà nó đi qua> Lịch trực on-call, và có người thực sự bắt máy> Runbook, để kỹ sư trực on-call hiểu cảnh báo "queue depth critical" nghĩa là gì> Các buổi postmortem thực sự mang lại thay đổi> Status page để khách hàng kiểm tra trước khi gửi email cho bạn> Unit test được viết bởi người thực sự hiểu logic cần phải làm gì> Integration test cho mọi API bên thứ ba mà bạn phụ thuộc> End-to-end test cho flow đăng ký, thanh toán và các flow khác mang lại doanh thu cho bạn> Load test trước khi gửi email ra mắt> Dữ liệu test trông giống như production nhưng không phải là dữ liệu production thực tế> Regression test, để việc sửa bug số 41 không làm bug số 12 xuất hiện trở lại> Test trên chiếc laptop 5 năm tuổi mà đội ngũ vận hành của khách hàng lớn nhất vẫn đang dùng> Tuân thủ khả năng tiếp cận (accessibility), vì hợp đồng doanh nghiệp yêu cầu điều đó> Gói subscription, nâng cấp, hạ cấp và tính phí theo tỷ lệ (proration)> Thử lại khi thanh toán thất bại và gửi email nhắc nợ (dunning email)> Hóa đơn có kèm số PO của khách hàng, vì bộ phận thu mua sẽ không thanh toán nếu thiếu nó> Thuế bán hàng và VAT> Hoàn tiền, credit và hoàn tiền một phần> Đo lường mức sử dụng khớp với số tiền bạn tính, chính xác đến từng xu> Hợp đồng năm với các điều khoản tùy chỉnh mà logic thanh toán của bạn chưa từng tính đến> Báo cáo doanh thu mà đội ngũ tài chính có thể đối soát> Webhook có xác thực chữ ký (signature)> Webhook có cơ chế retry, đi kèm log của từng lượt gửi thất bại> API được quản lý theo version, để bạn có thể thay đổi mà không làm hỏng các tích hợp của khách hàng> API key mà khách hàng có thể tự tạo và thu hồi> Rate limit của API giúp bảo vệ bạn mà không chặn các tích hợp thực tế> Kế hoạch cho ngày một API bên thứ ba thay đổi định dạng response mà không báo trước> Cơ chế làm mới OAuth token, vì token luôn hết hạn vào thời điểm tồi tệ nhất> Môi trường sandbox để khách hàng có thể kiểm thử tích hợp> Cơ chế bảo vệ chống prompt injection trên mọi trường dữ liệu chuyển đến model> Dữ liệu khách hàng và bệnh nhân được giữ kín, không gửi vào prompt ra bên ngoài mạng nội bộ> Giới hạn chi tiêu model cho từng khách hàng, tránh việc một người dùng quá nhiều làm hóa đơn tăng vọt> Evals, để phát hiện kịp thời khi một bản cập nhật model khiến câu trả lời tệ đi> Cơ chế fallback cho buổi chiều mà nhà cung cấp model gặp sự cố> Kế hoạch migration cho ngày mà model của bạn bị khai tử> Log của prompt và output để debug, trừ đi bất kỳ dữ liệu nào bạn không được phép lưu trữ> Bước phê duyệt của con người đối với bất kỳ tác vụ nào của AI mà không thể hoàn tác> Các trang web vẫn tải được dù dùng wifi khách sạn> Empty state, loading state và error state trên mọi màn hình> Thông báo lỗi có thể giúp khách hàng thao tác xử lý, thay vì chỉ hiện "đã có lỗi xảy ra"> Form biểu mẫu vẫn giữ nguyên nội dung người dùng đã nhập khi có một trường validation thất bại> Email hiển thị chuẩn xác trên mọi ứng dụng mail mà khách hàng của bạn sử dụng> Thông báo mà người dùng có thể tắt đi> Hoàn tác> Điều hướng bằng bàn phím và hỗ trợ trình đọc màn hình> Bản dịch, với ngày tháng và con số được định dạng chuẩn cho từng locale> Nút quay lại hoạt động đúng như mong đợi của người dùng> Code mà con người có thể đọc hiểu> Code review cho từng thay đổi> Chiến lược branching để hai người có thể làm việc mà không ghi đè lên nhau> Nâng cấp dependency hàng tháng để không bao giờ bị tụt lại sau hai phiên bản lớn> Nâng cấp framework trước khi phiên bản cũ dừng nhận các bản vá bảo mật> Xóa bỏ dead code mà AI để lại sau ba lần thử đầu tiên> Tách nhỏ tệp 2.000 dòng mà AI cứ liên tục ghi thêm vào> Ghi chép rõ ràng các quyết định kiến trúc kèm theo lý do> File README giúp kỹ sư mới chạy được dự án trên máy local trong vòng chưa đầy một giờ> Tài liệu dành cho bất kỳ ai tiếp quản lại dự án này> Admin panel cho đội ngũ vận hành> Bộ công cụ hỗ trợ để đội ngũ customer success có thể trả lời thắc mắc mà không cần réo bên kỹ thuật> Nhật ký thay đổi mà khách hàng có thể đọc hiểu> Điều khoản dịch vụ và chính sách quyền riêng tư ăn khớp với những gì code thực tế đang chạy> Mọi tài khoản, tên miền và repo đều đứng tên công ty, chứ không phải tên của người đã dựng prototype> Bus factor lớn hơn một> Ồ, và bên cạnh việc duy trì tất cả những thứ này hoạt động mỗi ngày, mãi mãi… ứng dụng Vibe Coding của bạn vẫn sẽ cần những người thực sự am hiểu công việc:> Đọc từng dòng code AI viết trước khi release (cần một senior engineer)> Thiết kế data model trước khi khách hàng thứ hai làm sập nó (cần một backend engineer)> Giải thích lý do vì sao cách AI sửa một bug lại đẻ thêm hai bug mới (lại cần senior engineer)> Deploy, rollback, quản lý máy chủ và hóa đơn đám mây (cần một DevOps engineer)> Trực cảnh báo lúc 3 giờ sáng khi hệ thống thanh toán gặp sự cố (bất cứ ai đang on-call)> Vá lỗi framework ngay trong tuần mà lỗ hổng bảo mật bị công bố (cần chuyên viên bảo mật)> Giải trình với kiểm toán viên về luồng di chuyển của dữ liệu bệnh nhân (cần chuyên viên bảo mật và tuân thủ)> Kiểm thử lại những gì AI tuyên bố là đã test (cần QA)> Chạy migration trên database đang hoạt động mà không làm mất dòng nào (cần một backend engineer)> Nói không với tính năng làm hỏng ba tính năng khác (cần một tech lead)> Biến "chạy tốt trên máy tôi" thành "phục vụ ổn thỏa mọi khách hàng cùng lúc" (cần một architect)> Debug đoạn code mà chính AI viết ra cũng bó tay (cần một senior engineer)> Nhớ lại lý do vì sao hệ thống được xây dựng như vậy sau một năm nữa (cần người gắn bó từ ngày đầu)
Lời kết:
Đúng vậy, đây là một "lối tắt tiện lợi". Dù có thể phần nào giảm bớt đống code rác, bug và các vấn đề bảo mật,
nhưng tôi vẫn muốn nhấn mạnh rằng, với những bạn thực sự quan tâm đến việc phát triển một sản phẩm nghiêm túc, lời khuyên của tôi vẫn không đổi:
AI hiểu không có nghĩa là bạn hiểu.
Nếu có thời gian hãy rèn luyện thêm nội lực, ít nhất thì bạn cũng phải hiểu rõ từng thuật ngữ trong danh sách trên có ý nghĩa gì chứ.
Đọc thêm: Hướng dẫn nhập môn Claude Code cực kỳ tinh giản: 3 quy tắc sắt giúp bạn tạm biệt đống code rác
Rất hoan nghênh mọi người cùng trao đổi.
Học tương tác với AI (NotebookLM)
Ngoài đọc , bạn có thể nghe , xem và xem hoạ thông tin ở đầu bài. Bài này còn có bộ công cụ tương tác do AI tạo: Bài kiểm tra trắc nghiệm, Thẻ ghi nhớ, Sơ đồ tư duy, Bản trình bày và Báo cáo chuyên sâu.
Mở không gian học tương tác