Yêu cầu với lập trình viên
Những điều bắt buộc với lập trình viên
Danh sách ngắn những việc một dev phải làm trong mọi hạng mục, không có ngoại lệ. Đây là điều kiện để code được nhận, không phải gợi ý để cân nhắc.
Nội dung bài
Thuật ngữ trong bài (11)
Cách đọc bài này
Mọi điều trong bài này là bắt buộc. Không có mục nào là "nếu có thời gian". Nếu một yêu cầu ở đây không làm được trong hạng mục đang làm, thì hạng mục đó chưa xong — chứ không phải yêu cầu này được bỏ.
Các bài còn lại trong nhóm này giải thích chi tiết từng phần. Bài này là bản tóm tắt để dán lên tường.
Trước khi viết dòng code đầu tiên
| # | Bắt buộc | Vì sao |
|---|---|---|
| 1 | Đọc hết acceptance criteria của hạng mục | Không đọc thì làm xong sẽ lệch |
| 2 | Hỏi lại nếu có bất kỳ câu nào mơ hồ | Hỏi tốn 5 phút, làm lại tốn 2 ngày |
| 3 | Nói ra các trường hợp biên mình thấy | Đây là chặng rẻ nhất để bắt lỗi |
| 4 | Ước lượng, và báo nếu thấy quá lớn | Hạng mục quá lớn phải được chẻ trước |
| 5 | Tạo branch từ branch main mới nhất | Tránh xung đột và code lạc hậu |
Mục 3 là mục hay bị bỏ nhất và đắt nhất khi bỏ. Khi đọc yêu cầu, dev là người duy nhất biết "nếu danh sách rỗng thì sao", "nếu người dùng bấm hai lần thì sao", "nếu mất mạng giữa chừng thì sao". Nói ra lúc này, lỗi chưa kịp tồn tại. Không nói, lỗi sẽ được viết ra, được review, được test, rồi được người dùng tìm thấy.
Quy tắc: nhận một hạng mục mà không hỏi câu nào là dấu hiệu đáng lo, không phải dấu hiệu tốt.
Trong khi viết code
| # | Bắt buộc | Kiểm chứng thế nào |
|---|---|---|
| 6 | Chạy được trên máy mình trước khi đẩy lên | Tự chạy thử luồng chính |
| 7 | Không tắt, không bỏ qua cảnh báo của linter | Không có dòng vô hiệu hoá kiểm tra nào không kèm lý do |
| 8 | Viết test cho phần logic mình thêm vào | Xem chuẩn test của dev |
| 9 | Xử lý trường hợp lỗi và trường hợp rỗng | Không có màn hình trắng, không có crash |
| 10 | Không để lại khoá, mật khẩu, chuỗi kết nối trong code | Quality gate sẽ quét, nhưng đừng để nó phải chặn |
| 11 | Commit nhỏ, thông điệp rõ | Xem quản lý branch và commit |
Về mục 7: khi thật sự cần bỏ qua một cảnh báo, bắt buộc ghi chú ngay dòng đó lý do vì sao, kèm cách xử lý đúng nếu sau này làm được. Vô hiệu hoá kiểm tra mà không giải thích là hành vi bị chặn ở review.
Trước khi mở pull request
Đây là chặng chặn cuối cùng do chính dev kiểm soát. Tự chạy hết danh sách này trước khi nhờ người khác nhìn:
- Tự đọc lại toàn bộ thay đổi của mình một lượt, như đang review người khác.
- Chạy toàn bộ test tự động ở máy mình, tất cả đều xanh.
- Chạy formatter và linter, không còn cảnh báo mới.
- Đối chiếu từng acceptance criteria, tự đánh dấu đã đạt.
- Kiểm tra thủ công luồng mình sửa, cộng thêm một luồng liền kề có thể bị ảnh hưởng.
- Xoá code chết, mã ghi log tạm, phần ghi chú thử nghiệm.
- Viết mô tả pull request theo mẫu, kèm ảnh hoặc video nếu có thay đổi giao diện.
Gửi pull request mà chưa tự làm bảy việc trên là đẩy việc của mình sang người review. Người review có nhiệm vụ tìm vấn đề về thiết kế và logic, không phải nhiệm vụ phát hiện bạn quên chạy test.
Khi code đã lên branch main
| # | Bắt buộc | Thời hạn |
|---|---|---|
| 12 | Theo dõi kết quả build và test sau khi merge | Ngay sau khi merge |
| 13 | Nếu làm hỏng branch main, sửa hoặc rollback ngay | Trong 30 phút |
| 14 | Theo dõi lỗi và số liệu của phần mình vừa release | 48 giờ đầu |
| 15 | Cập nhật tài liệu nếu thay đổi cách dùng hoặc cấu hình | Cùng pull request |
Về mục 13: làm hỏng branch main không phải là chuyện xấu hổ, ai cũng có lúc. Để nó hỏng mà không xử lý mới là chuyện nghiêm trọng, vì nó chặn cả đội. Rollback trước, tìm nguyên nhân sau — không ai bị trách vì rollback.
Năm điều tuyệt đối không làm
- Không đẩy thẳng lên branch main. Mọi thay đổi đi qua pull request, kể cả sửa một dòng, kể cả bạn là người có quyền cao nhất.
- Không tự ý tắt một quality gate để cho qua. Quality gate đỏ nghĩa là dừng lại, không phải nghĩa là tìm cách đi vòng.
- Không nói "xong" khi chưa đạt Definition of Done. "Xong phần code, còn test" không phải là xong.
- Không âm thầm mở rộng phạm vi. Thấy chỗ khác cần sửa thì mở hạng mục riêng, đừng nhét vào pull request đang làm.
- Không giấu tiến độ xấu. Kẹt quá nửa ngày thì nói ra. Đội giúp được, còn hạn chót thì không.
Vì sao danh sách này tồn tại
Toàn bộ danh sách trên là một ý duy nhất được viết ra nhiều lần: đẩy việc phát hiện lỗi về phía sớm nhất có thể.
| Nơi lỗi được phát hiện | Ai trả giá | Giá |
|---|---|---|
| Lúc đọc yêu cầu và hỏi lại | Dev, 5 phút | 1 |
| Lúc gõ code, linter báo đỏ | Dev, vài giây | 1 |
| Lúc chạy test ở máy | Dev, vài phút | 3 |
| Lúc quality gate tự động chạy | Dev, 10 phút | 5 |
| Lúc người khác review | Hai người, nửa giờ | 10 |
| Lúc test trước release | Cả đội, một buổi | 30 |
| Sau khi người dùng đã cài | Cả công ty | 100+ |
Mỗi dòng trong bài này tồn tại để kéo một loại lỗi lên phía trên bảng. Đọc kỹ hơn ở tư duy shift left.

