Nguyen Le PhongNguyen Le Phong

Người review như một future reader

Một ghi chú về văn hóa code review: khi xem reviewer như người đọc tương lai, pull request thường rõ hơn, tử tế hơn và hữu ích hơn cho người bảo trì sau này.

Pull request đó nhìn từ ngoài có vẻ nhỏ. Vài file đổi, check xanh, một mô tả ngắn, và một dòng nói behavior khá obvious. Rồi reviewer mở nó vào cuối một buổi chiều dài và phải tự dựng lại câu chuyện thật từ những cái tên rời rạc, assumption bị giấu, và một test chứng minh thứ gì đó chạy được nhưng không giải thích vì sao nó quan trọng.

Một người review pull request một cách bình tĩnh trong khi đồng đội ngồi cạnh với ghi chú.
Một review tốt đọc thay cho người đồng đội sẽ quay lại phần thay đổi đó sau nhiều tháng.

Ta dễ nghĩ reviewer là gatekeeper. Họ approve, block, request changes, hoặc hỏi thêm test. Vai trò đó quan trọng, nhưng chưa đủ. Reviewer cũng là một future reader xuất hiện sớm. Họ là người đầu tiên trải nghiệm thay đổi mà không mang toàn bộ trí nhớ của author về vấn đề.

Điều này đổi tone của review. Reviewer không cố bắt lỗi author. Reviewer đang hỏi người sau có hiểu decision đó một cách an toàn không. Vì sao branch này tồn tại? Vì sao dependency này được thêm vào? Test này bảo vệ behavior nào? Có điều gì người sau không nên đổi casually?

Author có thể giúp bằng cách viết pull request như một time capsule nhỏ. Description tốt không cần dài. Nó nên nói thay đổi gì, vì sao lúc này, trade-off nào được chấp nhận, và thay đổi đã được check ra sao. Screenshot, log, hoặc ví dụ before-and-after có thể giảm lượng suy đoán reviewer phải làm. Đây là sự tử tế rất thực tế.

Reviewer có thể giúp bằng cách đặt câu hỏi theo hình dạng của future maintenance. Thay vì nói chỗ này không rõ, họ có thể hỏi: mình đặt tên theo business rule được không để người đọc thấy intent mà không mở ba file? Thay vì nói thêm test đi, họ có thể hỏi: behavior nào sẽ tốn kém nếu bị break âm thầm? Cách thứ hai vẫn có standard, nhưng để lại ít nhiễu cảm xúc hơn.

Future-reader mindset cũng bắt được hidden knowledge. Nhiều thay đổi khó hiểu không sai về kỹ thuật. Chúng chỉ phụ thuộc quá nhiều vào một cuộc nói chuyện riêng, một Slack thread, hoặc một production incident mà chỉ ba người còn nhớ. Review là lúc tốt để đưa context đó vào tên code, comment, test, hoặc record của pull request.

Reviewer không nên đòi một bài luận hoàn hảo cho mọi change. Có change thật sự mechanical. Có fix thật sự gấp. Nhưng ngay cả vậy, một câu hữu ích cũng có thể bảo vệ tương lai: phần này giữ old API response trong lúc client mới rollout, hoặc test này khóa retry behavior từng fail ở production. Context nhỏ thường tiết kiệm archaeology lớn sau này.

Khi review vận hành tốt, nó làm nhiều hơn việc cải thiện code. Nó dạy team clarity trông như thế nào. Mọi người bắt đầu viết change nhỏ hơn vì change nhỏ dễ đọc hơn. Họ bắt đầu gọi tên trade-off vì trade-off không được gọi tên sẽ thành confusion tương lai. Họ bắt đầu xem review là shared stewardship thay vì judgment cá nhân.

Reviewer tốt nhất không phải người phê bình to nhất trong phòng. Thường đó là người lặng lẽ đọc thay cho một người chưa xuất hiện. Nếu một review từng giúp bạn của vài tháng sau hiểu lại decision, đó là culture đang làm việc của nó.

Bạn thấy bài viết thế nào?