Chương 59 — Email của Minh
Mai vẫn còn đang nói lời cảm ơn trong quán thì Hoàng đọc lại câu cuối email lần thứ ba.
Bên trong Sào, vài người khách nán lại đứng chụp ảnh với nhóm nhạc. Lâm cúi xuống tháo dây mixer, miệng ngậm một đầu dây để khỏi rối. Quân giơ máy ảnh lên quá đầu người, tìm góc có đèn vàng hắt qua ô cửa kính. Hạnh ngồi sát loa, notebook mở trên đầu gối, bút bi di một đường dài rồi dừng. Người đàn ông Quảng Nam từ Melbourne bắt tay Mai bằng cả hai tay, nói thêm gì đó khiến cô vừa cười vừa cúi mặt.
Ngoài hiên, mưa đã tạnh. Mùi đường ướt, cà phê nguội và khói xe máy trộn vào nhau. Hoàng đứng dưới mái che hẹp, lưng tựa cột sắt, điện thoại sáng trong lòng bàn tay.
Tôi muốn gặp người thật sự viết hệ thống này, không phải người bán nó.
Câu văn không dài. Không thô. Không châm chọc. Chính vì vậy nó mới sắc.
Nếu Minh viết: tôi biết các bạn chỉ có một developer, Hoàng còn có thể xếp nó vào suy đoán. Nếu Minh viết: người bán hàng không hiểu kỹ thuật, anh có thể bỏ qua vì kiêu. Nhưng câu này chọn đúng chỗ: người thật sự viết hệ thống.
Người đó là anh.
Và cũng là điểm yếu lớn nhất của NỢ SỔ.
Quân mở cửa bước ra, tay cầm hai lon nước ngọt.
“Anh Hoàng, uống không? Chị Hồng cho thêm.”
Hoàng tắt màn hình điện thoại, nhận một lon.
“Cảm ơn.”
Quân nhìn mặt anh. “Có mail cấp phép mới nữa hả?”
“Không. Mail NỢ SỔ.”
“À.” Quân không hỏi tiếp. Với nhóm nhạc, NỢ SỔ giống một cái máy nào đó chạy phía sau Hoàng — họ biết có tồn tại, biết quan trọng, nhưng không thấy hết dây điện nối vào đâu. “Vậy anh xử lý đi. Trong kia chắc còn lâu mới xong.”
Hoàng bật nắp lon. Tiếng xì nhỏ tan vào tiếng xe ngoài đường. Anh uống một ngụm, đường ngọt dính ở đầu lưỡi.
Điện thoại lại sáng. Không phải email mới. Khoa nhắn trong nhóm NỢ SỔ:
Khách Bình Dương hỏi vụ app chậm lúc mở danh sách nợ dài. Mày coi được không?
Dưới đó, sau ba giây:
Không gấp. Mai cũng được. Nhưng người ta hỏi lần thứ hai rồi.
Hoàng nhìn tin nhắn, rồi nhìn cánh cửa kính. Bên trong, Mai đang đứng giữa mấy người nghe nhạc, tay vẫn cầm mic dù buổi diễn đã hết. Hạnh ngẩng lên cười với cô — nụ cười nhỏ, hiếm.
Một trụ vừa sinh ra.
Trụ cũ đang rung điện thoại trong tay anh.
Anh trả lời Khoa:
Để tao xem log tối nay.
Khoa gửi lại ngay:
Ok. Mà tao forward cho mày cái gì đó trong mail support. Có thằng gửi CV nhìn ghê phết.
Hoàng nhìn dòng chữ đó, nhắn:
Tao thấy rồi.
Ba chấm hiện lên, biến mất. Khoa cuối cùng gửi:
Đừng cáu trước khi đọc hết.
Hoàng nhíu mày.
Anh mở lại email của Minh. Lần này không đọc CV nữa. Dưới file CV còn có một file PDF khác, dung lượng hơn hai megabyte. Tên file:
nosor_architecture_notes_trinhnguyenminh.pdf
Ở quán ồn, mạng yếu. File tải chậm. Thanh tiến độ bò qua từng phần trăm.
Hoàng nhìn nó chạy, tay cầm lon nước ngọt đã lạnh đi.
Minh không chỉ gửi CV.
Minh gửi bản mổ xẻ.
Đêm đó, Hoàng về nhà sau mười một giờ.
Ba mẹ đã ngủ. Căn bếp còn mùi canh hâm lại và dầu gió mẹ hay xoa ở cổ tay. Anh đi rón rén qua phòng khách, để giày vào góc, thay áo rồi ngồi vào bàn học. Đèn bàn bật lên thành một khoanh vàng nhỏ giữa căn phòng.
Laptop khởi động chậm. Quạt tản nhiệt kêu rè rè. Hoàng cắm sạc, mở hộp thư NỢ SỔ, tải file PDF của Minh xuống máy.
Trang đầu không có lời chào.
Ghi chú kỹ thuật sau ba tuần sử dụng NỢ SỔ
Bên dưới là ba dòng:
Mục tiêu: chỉ ra rủi ro vận hành nếu sản phẩm tiếp tục tăng trưởng.
Giới hạn: không truy cập codebase, chỉ quan sát hành vi client, API response, log lỗi hiển thị phía người dùng, và dữ liệu network khi mạng yếu.
Kết luận ngắn: sản phẩm hiểu đúng người dùng, nhưng kiến trúc đang chịu nợ kỹ thuật của giai đoạn một người làm tất cả.
Hoàng đặt ngón tay lên touchpad, không cuộn ngay.
Nợ kỹ thuật của giai đoạn một người làm tất cả.
Câu đó không xúc phạm. Nó còn tử tế hơn nhiều thứ anh từng tự nói về code của mình lúc ba giờ sáng. Nhưng khi nó nằm trong tài liệu của một người lạ, gửi vào hộp thư công khai, nó có trọng lượng khác.
Anh cuộn xuống.
Minh chia tài liệu thành bốn phần. Không màu mè. Không slide đẹp. Chỉ chữ, bảng, ảnh chụp request, vài sơ đồ tự vẽ.
Phần một: Đồng bộ dữ liệu khi mạng yếu.
Minh mô tả đúng hành vi NỢ SỔ ở các tiệm nhỏ: chủ tiệm ghi nợ khi 3G chập chờn, app lưu tạm local rồi đẩy lên server khi có mạng. Đây là điểm Hoàng từng tự hào nhất. Anh đã thiết kế nó từ ngày đầu sau khi nhìn chị Bảy tạp hoá đứng trong hẻm mất sóng, tay vẫn phải ghi nợ cho khách.
Nhưng Minh ghi tiếp:
Queue đồng bộ hiện tại có dấu hiệu xử lý theo thứ tự tạo bản ghi, nhưng chiến lược retry không phân biệt lỗi mạng tạm thời và lỗi conflict logic. Khi mạng yếu liên tục, client có xu hướng gửi lại cùng một payload nhiều lần trong khoảng ngắn. Nếu server không idempotent đủ chặt, một số thao tác cộng nợ có thể bị áp hai lần trong điều kiện hiếm.
Bên dưới là ảnh chụp network log. Ba request giống nhau, cách nhau mười hai giây, hai cái trả timeout, cái thứ ba trả success. Minh không chứng minh được lỗi nhân đôi đã xảy ra. Nhưng anh ta chỉ đúng khe hở.
Hoàng kéo ghế sát bàn hơn.
Phần hai: Conflict resolution dựa vào timestamp phía thiết bị.
Minh viết:
Giải pháp hiện tại giả định giờ trên điện thoại người dùng lệch không quá nhiều. Giả định này không an toàn với nhóm khách hàng mục tiêu. Nhiều điện thoại Android cũ tắt tự động cập nhật giờ, hoặc lệch giờ sau khi hết pin. Nếu hai thiết bị cùng sửa một khách nợ, bản ghi có timestamp “mới hơn” chưa chắc là bản ghi đúng hơn.
Hoàng nhìn dòng chữ đó lâu hơn cần thiết.
Anh nhớ lúc viết phần đó. Đêm server sập sau bài blog, mắt cay, đồng hồ chỉ 2:17. Anh chọn timestamp phía client vì nhanh, dễ, đủ chạy. Anh tự ghi vào TODO: sau này sửa vector clock hoặc server-side versioning. TODO đó vẫn nằm trong file ghi chú, chưa được đụng tới.
Minh không biết TODO. Nhưng Minh thấy vết vá.
Phần ba: Backup và log.
Backup database hiện có vẻ chạy theo lịch thủ công hoặc cron đơn giản. Không thấy dấu hiệu point-in-time recovery. Nếu dữ liệu ghi nợ của khách hàng bị hỏng trong khoảng giữa hai lần backup, không rõ khả năng phục hồi đến mức nào.
Log lỗi hiện tại đủ để developer biết server chậm, nhưng không đủ để truy nguyên một giao dịch cụ thể theo người dùng, thiết bị, phiên đăng nhập và thao tác. Khi có đội chăm sóc khách hàng, họ sẽ không có dữ liệu để trả lời khách ngoài câu “để kỹ thuật kiểm tra”. Câu này dùng được mười lần. Không dùng được một nghìn lần.
Hoàng thở ra qua mũi.
Không dùng được một nghìn lần.
Khoa đang sống trong câu đó. Anh Sáu gọi Khoa. Chị Bảy nhắn Khoa. Khách Bình Dương hỏi Khoa. Và mỗi lần Khoa phải chạy đi hỏi Hoàng, vì log không đủ cho ai khác đọc.
Phần bốn ngắn nhất, nhưng khó chịu nhất.
Rủi ro tổ chức
Minh không viết dài. Chỉ có một đoạn:
Các lỗi trên không lạ với sản phẩm tăng trưởng nhanh. Vấn đề không nằm ở việc có lỗi. Vấn đề nằm ở dấu hiệu không có team review. Cùng một người đang thiết kế sản phẩm, viết backend, xử lý server, trả lời lỗi kỹ thuật cấp hai và ra quyết định kiến trúc. Người này giỏi. Nhưng nếu sản phẩm tiếp tục tăng trưởng, năng lực của một người sẽ chuyển từ lợi thế thành điểm nghẽn.
Dưới đó, Minh thêm một câu riêng:
Người dùng đang tin vào NỢ SỔ như tin vào một quyển sổ thật. Kiến trúc hiện tại chưa xứng với mức tin đó.
Hoàng dừng cuộn.
Căn phòng nhỏ im đến mức anh nghe tiếng đồng hồ treo tường ngoài phòng khách chạy từng nhịp. Quạt laptop thổi hơi nóng vào cổ tay. Trên màn hình, dòng cuối nằm trắng rõ.
Chưa xứng với mức tin đó.
Lần này cơn khó chịu trồi lên rõ hơn. Không phải vì Minh sai. Nếu sai, anh đã nhẹ hơn.
Hoàng mở terminal, ssh vào server, kéo log lỗi tối nay. Vài request timeout từ Bình Dương hiện ra. Anh mở bảng user, tìm account vừa bị Khoa nhắc. Danh sách nợ dài, hơn bảy trăm bản ghi — tiệm này dùng NỢ SỔ nghiêm túc, ghi từng khoản nhỏ. API trả chậm vì query chưa index đủ cho trường lọc mới.
Một lỗi ngớ ngẩn. Sửa được trong mười phút.
Anh thêm index, chạy migration, test lại request. Thời gian giảm từ hơn ba giây xuống chưa tới ba trăm mili giây.
Xong.
Mười phút.
Nếu chỉ nhìn lỗi này, Hoàng vẫn là người giải quyết nhanh nhất. Vấn đề ở chỗ không ai khác biết nó tồn tại trước khi khách hỏi lần thứ hai. Không ai khác có quyền nhìn server. Không ai khác có đủ bối cảnh để quyết định thêm index có phá phần nào không.
Anh gửi tin nhắn cho Khoa:
Sửa xong lỗi Bình Dương. Bảo họ thử lại sáng mai.
Khoa trả lời gần như ngay:
Đang thức hả? Đọc file chưa?
Hoàng nhìn PDF.
Rồi.
Thấy sao?
Hoàng gõ: Nó chỉ nhìn từ ngoài, nhiều chỗ suy diễn.
Anh nhìn câu đó. Xóa.
Gõ lại: Nó đúng vài điểm.
Lại xóa.
Cuối cùng anh gửi:
Sáng nói.
Khoa gửi một sticker con chó cầm ly cà phê, dưới đó là câu:
Đừng cáu trước khi ngủ.
Hoàng tắt khung chat. Nhưng ngủ thì không tới.
Anh mở file PDF thêm một lần, kéo lên đầu, đọc lại từ trang đầu.
Không có dòng nào nói “sản phẩm tệ”. Không có dòng nào nói “người viết ngu”. Minh thậm chí khen đúng chỗ: hiểu người dùng, cắt tính năng thừa, offline-first hợp phân khúc. Nhưng mọi lời khen đều dẫn về một chỗ: người viết giỏi, vậy càng nguy hiểm khi chỉ có một người viết.
Hoàng đóng laptop lúc 1 giờ 18.
Trong bóng tối, màn hình điện thoại trên bàn sáng lên vì tin nhắn mới từ Phương Anh.
Khoa forward em file audit. Mai mình nói chuyện được không?
Hoàng nhìn chữ audit.
Khoa đã forward cho Phương Anh.
Anh đáng lẽ phải khó chịu vì chuyện đó. Nhưng Phương Anh phụ trách cấu trúc quyền và dòng tiền của Cổng Việt; cô đã bước vào vòng ra quyết định đủ sâu để nhìn thấy vấn đề này. Nếu đây là một tổ chức, tài liệu như vậy không thể nằm trong hộp thư của một người.
Nếu đây là một tổ chức.
Hoàng nhắn:
Được. Trưa mai.
Phương Anh trả lời:
Không chỉ chuyện tuyển người. Chuyện quyền quyết định.
Hoàng đặt điện thoại úp xuống bàn.
Ngoài hẻm, một chiếc xe máy chạy qua vũng nước, tiếng bánh rít nhẹ rồi xa dần.
Trưa hôm sau, Khoa đến trước Phương Anh mười phút.
Quán nước gần trường đông học sinh, mùi trà tắc và bánh tráng trộn phủ trên mấy chiếc bàn nhựa. Khoa đặt balô xuống ghế, kéo điện thoại ra, mở file PDF đã lưu.
“Rồi,” Khoa nói, không vòng vo. “Gặp thằng này đi.”
Hoàng cầm ly nước mía, chưa uống. “Mày đọc hết chưa?”
“Đọc hết mấy phần tao hiểu. Mấy phần không hiểu tao hỏi Google.”
“Và kết luận?”
“Kết luận là có người nói giùm tao mấy thứ tao không biết nói.” Khoa gõ ngón tay lên màn hình. “Nhất là đoạn log. Khách hỏi lỗi, tao chỉ biết nhắn mày. Mày trả lời nhanh thì xong. Mày đang ở phòng thu, đang họp, đang ngủ, thì tao đứng chết.”
“Không ai chết vì app chậm ba giây.”
Khoa ngẩng lên.
“Không. Nhưng người ta bỏ app thì có.”
Hoàng nhìn ly nước mía. Đá tan, nước đọng quanh thành ly.
Khoa dựa lưng vào ghế. Áo thun game của anh hôm nay nhăn ở vai, chắc mặc vội. Mắt hơi thâm, nhưng giọng tỉnh.
“Tao mừng khi đọc cái này,” Khoa nói.
“Mừng?”
“Ừ. Cuối cùng có người giỏi kỹ thuật muốn bước vào. Mày tưởng tao thích mỗi lần khách hỏi là tao phải nhắn ‘để em hỏi kỹ thuật’ hả? Mà kỹ thuật là ai? Là mày. Một thằng vừa học, vừa code, vừa lo server, vừa mở thêm Cổng Việt, vừa trả lời mấy email Bangkok Đức gì đó.”
Hoàng nói: “Cổng Việt chưa chạy chính thức.”
“Nhưng nó đã ăn thời gian của mày rồi.” Khoa chụp lấy câu đó ngay. “Tao không phản đối. Tao nói rồi, tao không phản đối mày làm cái lớn hơn. Nhưng NỢ SỔ không tự lớn được chỉ vì mày muốn nó tự lớn.”
Một nhóm học sinh bàn bên cười lớn vì ai đó làm đổ ly trà. Nước chảy xuống nền, chị chủ quán cầm giẻ lau đi tới, miệng mắng yêu. Khoa đợi tiếng ồn lắng xuống rồi nói tiếp:
“Thằng Minh này có thể không hợp. Có thể khó chịu. Có thể vào rồi cãi nhau với mày. Nhưng ít nhất nó nhìn ra cái tao đang thấy từ phía khách: mọi đường đều chạy về mày.”
Hoàng nhấc ly, uống một ngụm. Nước mía ngọt gắt.
“Tao biết.”
“Biết khác sửa.”
Câu đó làm Hoàng đặt ly xuống mạnh hơn dự định. Đá va vào thành nhựa.
Khoa thấy, nhưng không lùi.
“Bro, mày tự ái cũng được. Tao mà bị người lạ gửi file nói cách tao bán hàng có vấn đề, tao cũng chửi trước. Nhưng chửi xong vẫn phải đọc.”
Hoàng nhìn bạn. “Mày nghĩ tao đang không đọc?”
“Tao nghĩ mày đang đọc bằng mắt của người bị đụng vào đồ của mình.” Khoa nói chậm lại. “Còn tao đọc bằng mắt của người đang đứng ngoài cửa phòng server, tay cầm điện thoại khách.”
Hoàng không đáp ngay.
Đó là thứ Khoa giỏi nhất: nói một câu nghe đời thường, nhưng đặt đúng vị trí người khác không thấy. Hoàng thấy code, server, kiến trúc. Khoa thấy cánh cửa server đóng trước mặt anh khi khách gọi.
Phương Anh đến trong lúc cả hai đang ngồi lặng. Cô đặt túi xuống, gọi một ly trà đào ít đường, rồi kéo ghế ngồi cạnh chứ không ngồi đối diện. Cách ngồi đó khiến cuộc nói chuyện bớt giống chất vấn, nhưng câu đầu tiên của cô thì không mềm.
“Em đọc file rồi.”
Hoàng hỏi: “Ai cũng đọc hết rồi nhỉ?”
Khoa giơ tay. “Tao forward. Có tội tao nhận.”
Phương Anh nhìn Hoàng. “Nếu file này liên quan chuyện kỹ thuật thuần tuý, em không cần đọc. Nhưng nó có phần rủi ro tổ chức.”
Hoàng tựa lưng vào ghế. “Rồi. Nói đi.”
Phương Anh mở sổ tay. Cô không mở laptop, chỉ dùng bút gạch ba dòng trên trang giấy.
“Câu hỏi thứ nhất: nếu Minh vào, anh muốn anh ấy làm nhân viên, cộng tác viên, hay đồng sáng lập kỹ thuật?”
“Chưa gặp mà.”
“Em biết. Nên mới hỏi trước khung.”
Khoa liếc Hoàng, vẻ mặt như muốn nói thấy chưa.
Phương Anh tiếp: “Câu hỏi thứ hai: nếu Minh nói kiến trúc hiện tại phải viết lại một phần, còn anh nói không vì rủi ro tăng trưởng, ai quyết định?”
Hoàng đáp ngay: “Anh.”
Câu trả lời ra nhanh quá. Cả anh cũng nghe thấy.
Phương Anh không phản ứng trên mặt. Cô chỉ ghi xuống giấy một chữ: Anh.
Rồi cô hỏi: “Vậy anh tuyển người giỏi để làm gì?”
Khoa ngả người ra sau, huýt sáo nhỏ. “Câu này đau.”
Hoàng nhìn Phương Anh. “Quyết định cuối cùng phải có người chịu trách nhiệm.”
“Đúng.” Cô gật. “Nhưng chịu trách nhiệm không giống giữ mọi quyền phủ quyết trong đầu. Nếu Minh chỉ được sửa thứ anh cho sửa, theo cách anh đã nghĩ sẵn, thì anh ấy không giảm cổ chai. Anh ấy chỉ tăng tốc tay của anh.”
“Tay của anh hiện tại đang thiếu.”
“Thiếu tay thì thuê người junior cũng được.” Phương Anh đặt bút xuống. “Minh không gửi CV kiểu xin làm tay. Anh ấy gửi audit. Nghĩa là anh ấy muốn được đối thoại với người ra kiến trúc.”
Hoàng nhìn sang đường. Một chiếc xe buýt chạy qua, khói đen phụt ra sau, bảng tuyến rung bần bật. Anh nhớ CV của Minh: Bách Khoa 2012, FPT ba năm, GitHub commit đều, thư viện mã nguồn mở 1.200 star. Người như vậy không đến để nhận ticket nhỏ rồi im.
Khoa nói: “Tao thì nghĩ đơn giản hơn. Cứ gặp trước. Không hợp thì thôi.”
Phương Anh quay sang Khoa. “Gặp là đúng. Nhưng trước khi gặp phải biết mình sợ gì.”
Khoa nhún vai. “Tao sợ app chết vì không ai ngoài thằng này sửa được.” Anh chỉ Hoàng. “Còn Hoàng sợ gì thì để Hoàng nói.”
Cả hai nhìn anh.
Hoàng cười rất nhạt. “Hai người phối hợp tốt ghê.”
“Không phối hợp.” Khoa cắm ống hút vào ly trà tắc. “Tao nói phần của tao. PA nói phần của PA. Mày nói phần mày đi.”
Phương Anh không thúc. Cô ngồi yên, tay đặt lên sổ.
Hoàng nhìn ba dòng cô viết. Vai trò. Quyền quyết định. Ranh giới truy cập.
Anh có thể trả lời theo kiểu chiến thuật: chưa biết Minh hợp văn hoá không, cần kiểm tra năng lực, phải bảo vệ codebase, rủi ro lộ dữ liệu khách hàng, tuổi của anh là vấn đề. Tất cả đều đúng. Tất cả đều chưa chạm vào lõi.
Lõi nằm ở câu Hoàng không muốn nói: anh sợ người đủ giỏi bước vào sẽ nhìn thấy NỢ SỔ không phải một hệ thống hoàn hảo được thiên tài thiết kế, mà là một ngôi nhà chạy được nhờ người xây nó thức khuya vá từng vết nứt.
Anh sợ Minh đúng.
Và sợ hơn: nếu Minh đúng, việc Hoàng vẫn một mình quyết định mọi thứ không còn là trách nhiệm. Nó trở thành cản trở.
“Anh sợ mất tốc độ,” Hoàng nói cuối cùng.
Khoa nhìn anh, biết đó chưa phải hết, nhưng không chen.
Phương Anh hỏi: “Tốc độ hay quyền kiểm soát?”
Hoàng cầm ly nước mía, xoay một vòng. Đá đã tan gần hết.
“Cả hai.”
Đó là câu thật nhất anh có thể đưa ra giữa quán nước ồn ào này.
Phương Anh gật. Không khen anh thành thật, cũng không khai thác thêm. Cô chỉ nói:
“Vậy khi gặp Minh, đừng gọi là phỏng vấn.”
“Tại sao?”
“Phỏng vấn đặt anh ở ghế người chọn, Minh ở ghế người xin. Với người gửi audit như vậy, buổi gặp đó nên là kiểm tra hai chiều. Anh kiểm tra năng lực và độ phù hợp. Minh kiểm tra xem sản phẩm này có đủ trưởng thành để anh ấy đặt thời gian vào không.”
Khoa cười. “Nói chung là đừng ngồi kiểu sếp nhỏ hỏi lương mong muốn.”
Hoàng nhìn Khoa. “Tao có ngồi kiểu đó bao giờ?”
“Chưa. Nhưng mày có mặt kiểu ‘tao biết rồi’.”
Phương Anh nhấc ly trà đào vừa được mang ra, uống một ngụm. “Còn một chuyện nữa. Tuổi của anh.”
Không khí trên bàn mỏng đi.
Khoa hạ ly xuống.
Hoàng nói: “Minh chưa biết.”
“Rồi sẽ biết.” Phương Anh nói. “Nếu anh giấu đến khi gặp mới lộ, phản ứng của anh ấy sẽ nói nhiều thứ. Nhưng phản ứng của anh cũng quan trọng. Anh không cần xin lỗi vì trẻ. Nhưng anh cũng không thể đòi người ta bỏ qua rủi ro chỉ vì anh đã làm được nhiều.”
Hoàng nhìn cô lâu hơn. “Em nghĩ anh nên nói trước?”
“Không nhất thiết. Nhưng anh phải chuẩn bị câu trả lời cho câu hỏi: ai review quyết định kỹ thuật của anh?”
Câu hỏi rơi xuống bàn, nằm giữa ba ly nước.
Ai review quyết định kỹ thuật của anh?
Từ ngày NỢ SỔ là vài dòng wireframe trên giấy học trò đến lúc 871 người dùng, câu trả lời luôn là: không ai. Hệ thống không review code. Nó đo kết quả. Khoa không review kiến trúc. Anh Tuấn không review backend. Phương Anh không review server. Người dùng review bằng cách ở lại hoặc bỏ đi, nhưng khi họ bỏ đi thì đã muộn.
Không ai.
Và trước hôm nay, Hoàng đã xem đó là bằng chứng anh đủ giỏi.
Chiều, Hoàng về nhà sớm hơn thường lệ.
Mẹ đang phơi đồ sau bếp, áo công nhân màu xanh nhạt treo thành hàng. Bà thấy anh đi qua, hỏi:
“Ăn gì chưa con?”
“Con ăn rồi.”
“Có cơm đó. Tối hâm lại.”
“Dạ.”
Những câu ngắn quen thuộc trôi qua. Mẹ không biết con trai vừa ngồi bàn chuyện quyền quyết định kỹ thuật. Bà chỉ thấy áo nó hơi ẩm mồ hôi, tóc bết vì nắng, mắt nhìn như đang tính gì đó. Bà cầm kẹp áo, ngập ngừng:
“Đừng thức khuya quá nghen. Dạo này mặt con xanh.”
Hoàng dừng ở cửa phòng.
“Dạ. Con biết.”
Anh đóng cửa, ngồi xuống bàn học. Không mở laptop ngay. Anh lấy quyển vở bìa xanh từ chồng sách, lật tới trang tối qua.
Văn hoá không phải thứ mình đẩy đi. Nó đi khi có người nhận ra mình trong đó.
— Còn tổ chức thì sao?
Dưới hai dòng đó, anh viết thêm:
Tổ chức bắt đầu khi có người khác đủ quyền nói mình sai trước khi khách hàng nói bằng cách rời đi.
Viết xong, anh nhìn câu đó. Nó không đẹp. Không giống khẩu hiệu. Nhưng đúng hơn những câu gọn gàng anh hay tự ghi.
Laptop bật lên. Hoàng mở lại file audit của Minh, lần này không đọc như người bị tấn công. Anh tạo một tài liệu mới, đặt tên: Minh — câu hỏi buổi gặp.
Dòng đầu tiên: Bạn phát hiện những điểm trên bằng cách nào?
Dòng thứ hai: Theo bạn, lỗi nào phải sửa trong 30 ngày nếu người dùng tăng gấp đôi?
Dòng thứ ba: Bạn muốn quyền truy cập đến đâu để chịu trách nhiệm thật?
Anh dừng ở dòng thứ ba.
Quyền truy cập.
Codebase NỢ SỔ không chỉ là code. Nó là commit history từ những đêm đầu tiên, là dấu vết tuổi thật của anh nếu ai nhìn kỹ thời gian làm việc, là cấu trúc pháp lý lắt léo qua VietPath và anh Tuấn, là dữ liệu của những chủ tiệm đã đặt niềm tin vào app. Cho người ngoài bước vào không giống mở một repo phụ.
Nhưng nếu không cho ai bước vào, mọi thứ sẽ tiếp tục chạy qua anh.
Hoàng mở Hệ thống.
Giao diện quen thuộc hiện lên trong tầm nhìn: thuộc tính, nhiệm vụ đã hoàn thành, chỉ số DI SẢN mới mở sau cung văn hoá, MẠNG LƯỚI TỔ CHỨC Lv.1 nằm ở góc cây kỹ năng. Không có nhiệm vụ mới. Không có dòng Tuyển kỹ sư đầu tiên. Không có phần thưởng nếu gặp Minh.
Anh chuyển sang bảng trạng thái NỢ SỔ.
Dữ liệu người dùng, doanh thu, tỉnh thành, lỗi server gần nhất. Tất cả như bình thường.
Rồi một ô nhỏ ở góc dưới nhấp nháy đỏ.
Hoàng chưa từng thấy ô đó trước đây.
Anh nhìn vào.
[CẢNH BÁO TỔ CHỨC]
Hạng mục: CỔ CHAI KỸ THUẬT
Mức: ĐỎ
Mô tả: Một cá nhân nắm toàn bộ kiến thức vận hành lõi, quyền truy cập production, lịch sử quyết định kiến trúc và năng lực xử lý sự cố. Tốc độ tăng trưởng hiện tại vượt ngưỡng an toàn của cấu trúc một người.
Tác động dự báo: chậm phản hồi lỗi khách hàng; tăng rủi ro mất dữ liệu; giảm khả năng tuyển người giỏi; tăng phụ thuộc vào tình trạng sức khoẻ/lịch học của cá nhân lõi.
Khuyến nghị: Không có. Cần quyết định tổ chức thực tế.
Hoàng đọc đến dòng cuối.
Không có khuyến nghị.
Hệ thống không nói hãy tuyển Minh. Không nói đừng tuyển. Không cho hạn chót, không treo phần thưởng. Nó chỉ đặt màu đỏ lên thứ Minh đã viết, Khoa đã nói, Phương Anh đã hỏi.
Giao diện giống một tấm gương soi vào chỗ anh không muốn nhìn.
Hoàng đóng Hệ thống. Màu đỏ vẫn còn đọng sau mí mắt trong vài giây.
Anh mở email, nhấn trả lời Minh.
Con trỏ nhấp nháy trong khung trắng.
Hoàng gõ:
Chào anh Minh,
Dừng lại. Xóa chữ anh. Gõ lại:
Chào Minh,
Lại dừng.
Minh hai mươi sáu tuổi. Trong giấy tờ, Hoàng vẫn là một học sinh quá trẻ để ngồi ghế người sáng lập. Trong đầu, anh lớn hơn Minh một tuổi theo thời gian đã sống. Nhưng không có cách xưng hô nào giải quyết được vấn đề thật: quyền lực và năng lực không trùng với tuổi.
Anh để lại:
Chào anh Minh,
Em đã đọc CV và ghi chú kỹ thuật anh gửi. Cảm ơn anh vì bản phân tích thẳng và có ích.
Ngón tay Hoàng dừng trên bàn phím. Anh định viết: Chúng tôi muốn mời anh phỏng vấn. Câu đó chết ngay trong đầu.
Anh gõ tiếp:
Nếu anh rảnh, em muốn hẹn một buổi gặp để trao đổi sâu hơn về NỢ SỔ — không chỉ về vị trí công việc, mà về các vấn đề kiến trúc anh đã chỉ ra.
Chiều thứ Bảy, quán cà phê gần Bách Khoa có tiện cho anh không?
Anh đọc lại. Thêm một dòng:
Người gặp anh sẽ là người đang trực tiếp viết và vận hành hệ thống.
Câu này đủ thật. Chưa đủ hết. Nhưng đủ để mở cửa.
Hoàng nhấn gửi trước khi tự sửa thêm.
Email biến khỏi khung soạn. Hộp thư trở lại danh sách cũ. File audit của Minh vẫn nằm trong thư đến, chưa đánh dấu sao, nhưng không cần đánh dấu: từng dòng của nó đã mắc vào đầu anh.
Điện thoại rung sau đó chưa đầy hai phút.
Minh trả lời ngắn:
Được. Thứ Bảy 15:00. Tôi sẽ mang laptop.
Hoàng nhìn câu đó. Không có cảm ơn dài. Không có hỏi lương. Không có thắc mắc ai là “em”. Chỉ thời gian và laptop.
Anh mở tài liệu câu hỏi buổi gặp, thêm một dòng cuối:
Nếu ý kiến kỹ thuật của anh khác tôi, anh muốn quy trình quyết định ra sao?
Ngoài phòng, mẹ gọi anh xuống ăn cơm. Tiếng nồi đặt lên bếp, tiếng muỗng chạm tô, tiếng đời sống bình thường kéo anh về căn nhà hẻm.
Hoàng đứng dậy, nhưng mắt còn ở màn hình.
Trong giao diện vừa tắt, cảnh báo đỏ vẫn như còn treo ở góc nhìn.
Người đầu tiên đủ giỏi để giúp anh đã trả lời.
Cũng có thể là người đầu tiên đủ giỏi để chứng minh anh không thể một mình quyết định đúng tất cả.