Một thứ hỏng. Bạn hỏi ai viết đoạn này. Câu trả lời, nhẹ tênh: "À, agent viết."
Và câu đó được thả ra như thể nó kết thúc cuộc điều tra. Agent viết — nghĩa là không phải lỗi của ai cả. Mà đúng là không phải lỗi của ai thật: con agent thì không nhận lỗi được, người gộp thì vừa phủi tay xong. Trách nhiệm vừa bốc hơi ngay trước mắt bạn. Đó không phải câu trả lời cho câu hỏi — đó chính là vấn đề, nói thành lời.
01Agent không gánh trách nhiệm được — nên ai đó phải gánh
Trách nhiệm không phải một cái nhãn dán cho vui. Nó là cái neo giữ chất lượng: người chịu trách nhiệm là người sẽ lãnh hệ quả nếu sai, nên là người có lý do để xem cho kỹ.
Agent không có cái neo đó. Nó không lãnh hệ quả gì khi code nó viết làm sập một thứ lúc nửa đêm. Nó không nhớ cú sai đó để lần sau tránh — sáng mai nó quên sạch. Nó không mất uy tín, không mất ngủ, không học được gì. Giao trách nhiệm cho agent cũng vô nghĩa như giao cho cái bàn phím: cả hai đều chỉ là công cụ chuyển ý định của một người thành chữ.
Nên trách nhiệm không thể nằm ở agent. Nó phải nằm ở một con người — và con người hợp lý duy nhất là người quyết định đưa cái code đó vào: người bấm nút gộp. Cú lật nằm ở chỗ này: "ai viết" là câu hỏi sai. Câu đúng là "ai đứng tên" — và câu trả lời không bao giờ được phép là "con máy".
02Dấu hiệu một vòng review đang đóng dấu cho có
Khi máy viết nhanh và nhiều, có một cám dỗ rất tự nhiên: review lướt nhanh cho kịp. Mà review lướt thì chỉ còn là đóng dấu. Mấy dấu hiệu dưới đây cho biết vòng review của đội đang tụt xuống thành nghi thức:
Điểm chung: tất cả đều là review tin vào <i>lời kể</i> thay vì <i>bằng chứng</i>. Mà cái agent viết ra thì cực giỏi tạo ra lời kể nghe êm tai — nên đây đúng là chỗ bar phải dâng, không phải tụt.
03Giữ bar review dâng lên, không tụt xuống
Nghịch lý cần nuốt: máy viết nhiều hơn không có nghĩa review được nhẹ đi — mà ngược lại. Càng nhiều code đến từ thứ không tự chịu trách nhiệm cho nó, gánh nặng "có người thật đứng tên" càng phải nặng hơn, không nhẹ đi. Vài luật giữ cái bar đó:
Bấm nút gộp nghĩa là nhận: "tôi chịu cho cái này y như tự tay tôi viết." Không có ngoại lệ "agent viết". Cái neo trách nhiệm phải có một con người ở đầu kia.
Diff năm trăm dòng là diff không ai xem thật. Bắt agent ship theo từng mảnh review được trong một lần ngồi — cái xem nổi mới là cái được xem.
Đừng phí sức soi cú pháp — agent gõ đúng cú pháp. Soi cái nó hay trượt: nó có hiểu đúng ý không, có lặng lẽ đụng chỗ khác không, cái test nó viết có thật sự kiểm cái cần kiểm không.
Để ý cả ba đều dịch trọng tâm review từ "code có sạch không" sang "có người chịu cho nó không, và nó có làm đúng cái cần làm không". Review code agent viết không phải bắt lỗi chính tả — là xác nhận một con người đã thật sự hiểu và đứng sau cái sắp vào hệ thống.
04Code mồ côi là nợ không tên
Một đoạn code không ai thật sự đứng tên là một món nợ không tên trong hệ thống: lúc nó hỏng, không ai thấy mình phải hiểu nó, vì "có ai viết nó đâu". Nó nằm đó tới khi nổ, rồi cả đội xúm vào dò một thứ chưa ai từng đọc kỹ.
Cái cần nhớ gọn trong một câu: agent viết, nhưng người gộp sở hữu. Đây là vòng review không-đóng-dấu ở quy mô đội, và là phiên bản đội của thói quen đòi bằng chứng thay vì tin lời "xong". Tốc độ máy viết là thật và đáng mừng — nhưng nó chỉ là món hời chừng nào mỗi dòng vào hệ thống vẫn có một con người đứng sau, sẵn sàng nói "cái này tôi chịu". Bỏ cái neo đó đi, bạn không tăng tốc — bạn chỉ chất nợ nhanh hơn.