Pull request nhỏ đến mức vừa trọn một màn hình: đổi tên một helper, thêm một test và sửa một nhánh điều kiện ngắn. Tháng sau có lẽ chẳng ai còn nhớ phần code đó. Nhưng câu chữ để lại trong lượt review vẫn đáng kể, vì nó âm thầm dạy mọi người cách nói với nhau ở đội ngũ này.
Ta thường nói về văn hóa bằng những từ lớn như tinh thần làm chủ, chất lượng, niềm tin hay an toàn tâm lý. Các từ ấy chỉ thật sự có nghĩa nếu còn đứng vững trong chuyện hằng ngày. Code review là một trong những chỗ như vậy: ở đó, chất lượng có thể trở thành tay nghề chung, hoặc trượt thành phán xét cá nhân.
Khác biệt đôi khi chỉ nằm trong một câu. “Tên này khó hiểu” có thể đúng nhưng để người viết tự đoán phần còn lại. Còn “Mình phải đọc lại vì tên này nghe như có thay đổi trạng thái, trong khi hàm chỉ định dạng đầu ra; mình làm chỗ đó rõ hơn nhé” vừa nêu vấn đề, vừa chỉ ra con đường để hiểu và sửa. Cả hai đều muốn code tốt lên, nhưng chỉ một câu giúp người nhận mang bài học sang lần sau.
Những lượt review nhỏ cho thấy mọi người muốn thắng một cuộc tranh luận hay muốn cùng cải thiện sản phẩm. Góp ý nào cũng như bản án thì người viết sớm muộn sẽ phòng thủ. Mềm mọi lo ngại đến mức không còn biết cần sửa gì thì chất lượng lại chịu thiệt. Điểm cân bằng là thẳng và rộng lòng: rõ về vấn đề, tôn trọng con người, cụ thể về hành vi mong muốn.
Cách giải thích bối cảnh cũng để lại văn hóa. Reviewer chỉ yêu cầu thêm test có thể hoàn toàn đúng, nhưng tác giả học được ít. Nếu nói thêm rằng nhánh này bảo vệ đường retry mà đội từng làm hỏng, comment ấy chuyển tiếp một mảnh trí nhớ của hệ thống. Yêu cầu không còn là ý thích của một người; nó có lý do để người khác cùng giữ.
Người viết code cũng góp phần tạo chuẩn mực. Một câu “Bắt đúng chỗ rồi, mình bỏ sót ca retry và đã thêm test” giữ cho cuộc review là hợp tác. Bỏ qua comment, đẩy lên thay đổi không giải thích, hoặc xem mọi đề nghị như một cuộc công kích sẽ dạy đội ngũ một bài khác. Review là cuộc trao đổi hai chiều, không phải cánh cổng chỉ một người giữ chìa khóa.
Diff nhỏ không làm văn hóa nhỏ đi. Trái lại, đây là nơi dễ tập thói quen nhất vì mức rủi ro còn thấp. Một đội không thể vừa cẩn thận vừa tử tế ở thay đổi đơn giản sẽ càng khó giữ được điều đó khi migration nhiều rủi ro hay bản sửa sự cố xuất hiện.
Dần dần, mọi người cảm được “thời tiết” của một codebase: có an toàn khi hỏi câu cơ bản không, một nỗi lo có được nghe không, một sai sót có thể được gọi tên mà không làm ai xấu hổ không. Thứ thời tiết ấy không sinh ra từ khẩu hiệu. Nó được tạo nên từng comment một.
Một lượt review nhỏ có thể không làm sản phẩm thay đổi theo cách người dùng nhìn thấy. Nó vẫn thay đổi đội ngũ đang xây sản phẩm, bằng cách biến sự cẩn trọng và tôn trọng thành điều bình thường mỗi ngày.