Người không code có thể dùng vibe coding rất hiệu quả. Nhưng có một luật không dễ nghe: thứ bạn không hiểu thường là thứ sẽ làm bạn trả giá.
Không phải vì bạn kém. Vì AI có xu hướng lấp khoảng trống bằng code nghe hợp lý. Nếu bạn không biết vùng nào nguy hiểm, bạn sẽ không biết lúc nào phải dừng lại.
Một app có thể nhìn đơn giản nhưng chạm vào những vùng không đơn giản: auth, payment, database, file upload, email, privacy, role permission, deploy, dependency, secret. Đây là những nơi “chạy được” không đủ. Sai một chút có thể mất data, lộ key, gửi nhầm email, hoặc tạo bug mà bạn không biết cách điều tra.
Không hiểu auth thì đừng tự tin về login
Login UI là phần dễ nhất. Auth thật là phần khó hơn nhiều.
Bạn cần biết tối thiểu:
- User identity đến từ đâu.
- Session lưu ở đâu.
- Token có hết hạn không.
- API có check token không.
- Logout có xóa session không.
- User chưa đăng nhập bị chặn ở đâu.
- User không có quyền bị chặn ở đâu.
Nếu bạn không trả lời được, đừng nói “app đã có login”. Hãy nói “app có màn hình login, auth cần review”.
Câu này nghe nhỏ nhưng cứu bạn khỏi rất nhiều hiểu nhầm.
Không hiểu database thì đừng để agent migrate bừa
Database là nơi vibe coding dễ gây nợ thật. UI sai có thể sửa. Data sai thì phiền hơn nhiều.
Các câu hỏi tối thiểu:
- Bảng nào chứa dữ liệu thật?
- Field nào bắt buộc?
- Có unique constraint không?
- Xóa là hard delete hay soft delete?
- Migration có rollback không?
- Data cũ có bị mất không?
- User này có thấy data user khác không?
Nếu agent đề xuất đổi schema, hãy chậm lại. Với prototype rỗng thì được. Với data thật thì cần backup, migration plan, rollback plan, và người hiểu backend đọc lại.
Không hiểu billing thì đừng ship payment
Payment là vùng không nên vibe cho vui rồi đưa user thật vào.
Sai payment không chỉ là bug UI. Nó liên quan tới tiền, refund, invoice, tax, webhook, duplicate charge, failed charge, subscription state, trial, cancellation.
Nếu bạn đang non-tech, nguyên tắc thực dụng:
- Prototype payment bằng fake state thì dán nhãn rõ.
- Không lưu card tự chế.
- Không tự viết checkout flow nếu có hosted checkout.
- Không tự xử webhook nếu chưa có log và retry.
- Không nói “billing xong” nếu chưa test cancel, failed payment, refund.
Payment là nơi demo rất dễ đẹp và rất dễ sai.
Không hiểu secrets thì đừng paste key vào prompt bừa
AI agent không cần thấy mọi key của bạn. Và frontend không được chứa secret.
Những thứ thường bị lộ trong vibe coding:
- API key paste vào chat.
.envbị commit.- Service role key nằm trong frontend.
- Database URL nằm trong client bundle.
- Webhook secret nằm trong repo public.
- Token test dùng nhầm cho production.
Rule đơn giản:
Secrets stay in environment variables.
Do not expose secrets in frontend code.
If a secret is required, tell me the variable name and where to set it.
Nếu agent bảo “just paste your API key here”, dừng lại.
Không hiểu dependency thì đừng cài mọi thứ agent gợi ý
Agent hay giải quyết vấn đề bằng cách thêm package. Một package để validate form. Một package để date. Một package để chart. Một package để auth helper. Một package để upload. Sau vài vòng, app có dependency bạn không hiểu, build chậm hơn, security surface rộng hơn, và lỗi khó debug hơn.
Trước khi approve install:
- Package này có thật sự cần không?
- Project đã có helper sẵn chưa?
- Package có maintain không?
- Nó chạy frontend hay backend?
- Nó có chạm data nhạy cảm không?
- Có cách native đơn giản hơn không?
Non-tech không cần audit source package. Nhưng cần biết việc thêm dependency không miễn phí.
Không hiểu deploy thì đừng coi URL là kết thúc
URL preview làm bạn thấy xong. Nhưng deploy là bắt đầu của vận hành.
Bạn cần biết:
- App đang dùng environment nào.
- Domain nào trỏ vào bản nào.
- Preview có chạm production database không.
- Rollback bằng cách nào.
- Log xem ở đâu.
- Error report gửi về đâu.
- Ai có quyền deploy.
Nếu không biết, ghi rõ: “deployed for review, not production”.
Học đủ để hỏi đúng, không cần học hết để làm
Mục tiêu không phải biến non-tech thành backend engineer. Mục tiêu là học đủ để biết vùng nào cần review.
Bạn có thể dùng bảng này:
| Vùng | Nếu không hiểu, label an toàn |
|---|---|
| Auth | Needs security review |
| Database migration | Needs dev review and backup |
| Payment | Prototype only |
| Secrets | Blocked until env setup |
| Permission | Needs backend enforcement check |
| Deploy | Preview only |
| File upload | Needs size, type, and storage policy |
Label đúng giúp bạn vẫn tiến nhanh mà không tự lừa mình.
Chốt lại
Vibe coding cho non-tech là một bước tiến thật. Bạn có thể tự thử ý tưởng, tự tạo prototype, tự hiểu product flow nhanh hơn trước rất nhiều.
Nhưng nó không xóa rủi ro ở những vùng bạn không hiểu. Nó chỉ làm bạn chạm vào các vùng đó sớm hơn.
Vì vậy đừng hỏi “AI có build được không?” Câu trả lời thường là có. Hỏi tiếp: “Nếu nó build sai, tôi có biết sai ở đâu không?”
Nếu câu trả lời là không, đó là vùng cần dán nhãn, thu nhỏ scope, hoặc đưa cho người có chuyên môn review.