Tám giờ năm mươi ba phút sáng hôm sau, Lâm Dư An là người đầu tiên vào phòng họp số bốn.
Cậu cắm laptop vào màn hình, mở ticket actor mapping từ tối qua rồi kéo một bảng thống kê sang bên trái. Sau một đêm chạy lại sample, tỷ lệ event không map được người thực hiện giảm từ gần mười tám phần trăm xuống còn mười bốn phẩy sáu. Con số tốt hơn, nhưng không đủ để gọi là đã xử lý. Gần một phần sáu lịch sử phê duyệt mà không biết ai đã bấm nút thì thứ còn lại chỉ là dấu thời gian và trạng thái, đẹp hơn log thô một chút nhưng không có nhiều giá trị khi cần truy nguyên.
Dư An mở sẵn ba phương án trên bảng trắng.
A. Giữ raw actor ID, không enrich.
B. Backfill từ identity archive, tách bảng mapping riêng.
C. Chỉ giữ summary với các event map được.
Cậu không đánh dấu phương án nào là đề xuất. Cuộc họp chưa bắt đầu, và những người phải chịu trách nhiệm cho từng phần vẫn chưa có mặt.
Tám giờ năm mươi bảy, Tuấn từ Data Engineering vào trước, theo sau là Mai phụ trách Security phía công ty. Quang của đội PMI đến đúng tám giờ năm mươi chín. Tống Hoài Cẩn bước vào cùng một người phụ trách Security phía tập đoàn mà Dư An mới gặp ở kick-off, chào từng người rồi chọn ghế bên cạnh Quang thay vì đầu bàn.
Điều đó khiến vị trí gần màn hình vẫn trống. Dư An đứng ở đó.
“Đủ người rồi.” Cậu nhìn đồng hồ. “Bắt đầu nhé.”
Không ai có lý do phản đối. Dư An tóm tắt sự cố trong chưa đầy ba phút, bỏ qua những gì mọi người đã đọc trong ticket và chỉ giữ các điểm cần quyết định. “Batch tối qua có mười bốn phẩy sáu phần trăm event không map được actor hiện tại. Khoảng sáu mươi phần trăm trong nhóm lỗi có raw ID đủ ổn định để thử backfill từ identity archive. Phần còn lại là service account, tài khoản trước lần đổi nền tảng xác thực hoặc record thiếu nguồn đối chiếu. Vấn đề hôm nay không phải làm sao đạt một trăm phần trăm. Vấn đề là mức nào đủ để giữ auditability mà không tạo thêm rủi ro dữ liệu cá nhân.”
Tuấn mở ngay một tab log. “Nếu cho Data thêm hai ngày, bên em có thể kéo archive từ hệ thống IAM cũ. Có email công ty và employee code.”
Mai lắc đầu. “Khoan. IAM cũ có cả dữ liệu nhân sự đã nghỉ nhiều năm. Không thể cứ kéo sang môi trường mới rồi tính sau.”
“Không ai nói kéo sang production.” Tuấn đáp.
“Nhưng cậu đang nói dùng để backfill.”
“Nếu không backfill thì log vô nghĩa.”
Hai câu cuối bắt đầu có nhịp quen thuộc của những cuộc họp kỹ thuật mà Dư An đã ngồi đủ nhiều để biết năm phút nữa sẽ biến thành tranh luận ai đang hiểu sai ai. Cậu giơ tay một chút, không cao đến mức giống xin phát biểu.
“Dừng ở đây. Tuấn, thứ em cần từ IAM cũ chính xác là gì?”
“Raw ID sang employee code, nếu có. Email chỉ để cross-check.”
“Mai, thứ chị không muốn đi qua boundary là gì?”
“Email cá nhân nếu từng có, số điện thoại, thông tin HR, và bất kỳ field nào không cần cho mục đích audit.”
Dư An gõ hai dòng lên bảng. “Vậy hai bên chưa mâu thuẫn. Data cần một identity bridge tối thiểu. Security không cho phép mang toàn bộ hồ sơ định danh sang. Chúng ta tách extraction job chỉ lấy raw ID, employee code và corporate email nếu email vẫn là key đối chiếu. Chạy trong vùng restricted, tạo mapping table riêng, xong thì không đưa source archive vào môi trường tích hợp.”
Người phụ trách Security phía tập đoàn hỏi: “Retention của mapping table?”
“Chưa chốt.” Dư An trả lời. “Phải xem nghĩa vụ lưu lịch sử transaction và thời gian cần truy nguyên. Phần đó không phải Data quyết.”
Câu cuối vừa nói ra, Dư An thấy Hoài Cẩn ngước lên khỏi màn hình. Chỉ một cái nhìn ngắn. Cậu không dừng lại.
“Còn service account thì không cố biến thành người. Giữ loại actor riêng. Các record không đủ bằng chứng để backfill thì đánh confidence level, không đoán.”
Tuấn nói: “Nếu làm vậy tỷ lệ map được có thể lên tám mươi tám, chín mươi phần trăm.”
“Không cần hứa con số trước khi chạy.” Dư An đáp. “Cho tôi sample sau vòng đầu.”
Tuấn gật đầu. Mai vẫn chưa hoàn toàn đồng ý. “Tôi muốn xem danh sách field trước khi cho access IAM archive.”
“Được. Chị approve schema extraction trước. Data không tự mở quyền.”
Trong vài phút, cuộc họp chuyển từ tranh luận sang thiết kế phương án. Dư An chia việc, chốt dependency và đánh dấu ba câu hỏi cần Legal xác nhận sau khi sample mới có kết quả. Cậu không nhìn Hoài Cẩn để chờ đồng ý. Những gì thuộc hệ thống phía target, cậu quyết trong phạm vi mình có quyền. Những gì thuộc security boundary, Mai quyết. Phía tập đoàn giữ tiêu chuẩn tích hợp và rủi ro chương trình.
Đến phút thứ mười bảy, người phụ trách Security phía tập đoàn quay sang Hoài Cẩn. “Nếu giữ raw actor ID lâu như vậy thì chương trình có chấp nhận một lớp dữ liệu không chuẩn hóa không?”
Hoài Cẩn không trả lời ngay. Cậu hỏi Dư An: “Nếu ép normalize ở migration, rủi ro lớn nhất là gì?”
“Gắn sai người.”
“Có sửa được không?”
“Có, nếu còn raw. Không, nếu mình ghi đè rồi bỏ nguồn.”
Hoài Cẩn quay lại người vừa hỏi. “Vậy chương trình chấp nhận raw restricted layer cho tới khi có tiêu chí loại bỏ rõ. Tôi không muốn đổi một vấn đề nhìn thấy được thành một vấn đề đẹp hơn nhưng không truy ngược được.”
Không ai tranh luận thêm về điểm đó. Dư An nhìn bảng trắng. Câu trả lời vừa đủ, không lấn sang cách Data phải triển khai và cũng không dùng chức danh PMI Lead để biến một lựa chọn kỹ thuật thành mệnh lệnh. Bảy năm trước, Hoài Cẩn rất giỏi tìm ra phương án tối ưu. Cậu mười tám tuổi thường nhìn thấy đường ngắn nhất rồi đi thẳng vào đó, đôi lúc quên mất người khác có muốn đi cùng hay không.
Người trước mặt bây giờ vẫn nhìn ra đường rất nhanh. Khác ở chỗ cậu biết dừng trước ranh giới của người khác. Ý nghĩ đến đó, Dư An chuyển sang mục tiếp theo.
“Còn một việc. Comment trong workflow cũ có free text. Trước khi archive, cần scan xem có dữ liệu nhạy cảm vượt mục đích nghiệp vụ không.”
Mai nói: “Phần đó bên tôi nhận.”
“Deadline?” Quang hỏi.
Mai nhìn lịch. “Một ngày cho rule scan, thêm một ngày nếu phải review thủ công sample.”
Quang gõ vào plan. “Vậy thứ năm.”
Hoài Cẩn lên tiếng: “Ghi thứ năm là checkpoint, không phải completion date.”
Quang dừng tay rồi sửa lại. Dư An không nhìn sang, nhưng vẫn nghe rất rõ.
Cuộc họp kết thúc lúc chín giờ ba mươi tám. Không ai bị giữ thêm chỉ để nghe một bản tóm tắt những gì vừa nói. Dư An gửi action list ngay trong phòng, mỗi mục có owner và điều kiện hoàn thành. Khi mọi người bắt đầu đứng dậy, Tuấn ghé lại gần cậu.
“Anh An, em tưởng sáng nay căng hơn.”
“Em muốn căng à?”
“Không. Nhưng bên tập đoàn thường vào là hỏi sao hệ thống mình lắm ngoại lệ thế.”
Dư An gập laptop. “Hệ thống nào sống ba năm mà không có ngoại lệ thì hoặc là rất tốt, hoặc là chưa ai nhìn kỹ.”
Tuấn cười. “Em chọn phương án hai.”
“Đi làm đi.”
Tuấn rời phòng cùng Mai. Dư An đang xóa bảng trắng thì Quang gọi cậu từ cửa. “An, mười một giờ bọn tôi có review governance với chị Hà. Cậu tham gia được mười lăm phút không? Chỉ phần systems risk.”
Dư An mở lịch. “Mười một giờ tôi có refinement với Product.”
“Khó đổi à?”
“Không cần đổi.” Hoài Cẩn đứng cạnh Quang, giọng bình thường. “Systems risk đã có trong biên bản. Nếu cần hỏi thêm thì gửi trước, Dư An trả lời async.”
Quang gật đầu ngay. “Được.”
Hoài Cẩn quay sang Dư An. “Nếu có câu nào cần cậu quyết, tôi để lại.”
“Ừ.”
Cậu nói xong mới nhận ra mình vừa đáp bằng một tiếng rất cũ. Hoài Cẩn cũng không có phản ứng gì, chỉ cầm laptop rời phòng cùng Quang. Dư An đứng lại vài giây để chắc bảng đã được lưu rồi đi về phía khu làm việc của đội mình.
Mười một giờ bốn mươi bảy, Dư An đang giải thích cho Product vì sao một business rule không nên được nhét vào migration script thì chị Hà đặt một hộp cơm xuống cạnh bàn cậu.
“Ăn.”
Dư An nhìn hộp cơm rồi nhìn chị. “Em có đặt rồi.”
“Đơn của em bị hủy. App gọi chị vì số bàn này đứng tên công ty.”
“Em có thể đặt lại.”
“Được. Nhưng trước khi em làm thế, xuống pantry. Bên PMI đặt dư đồ ăn cho cuộc họp governance.”
Dư An định từ chối theo phản xạ, nhưng Hà đã quay đi. “Đừng làm chị phải quản cả bữa trưa.”
Pantry đông hơn bình thường. Quang đang đứng cạnh bàn cao kể gì đó với hai người Finance, chị Hà đã lấy một hộp salad, còn Hoài Cẩn ngồi ở đầu bàn dài với một cốc nước và phần ăn gần như chưa động tới. Dư An dừng ở cửa một nhịp.
Ở tuổi mười tám, nếu bị đặt vào một bữa trưa đông người mà không có lý do công việc rõ ràng, Hoài Cẩn thường chọn một chỗ ít người nhất và có thể ngồi hết bữa mà chỉ nói vài câu cần thiết. Người bây giờ không hề trở thành kiểu hoạt náo. Cậu vẫn nghe nhiều hơn nói. Nhưng khi Finance hỏi về timeline, Hoài Cẩn trả lời đủ để người ta hiểu. Khi Quang trêu việc cậu sửa chữ “deadline” thành “checkpoint” ba lần trong một sáng, Hoài Cẩn đáp một câu khô đến mức cả bàn cười. Khi một đồng nghiệp mới đến muộn không biết chỗ ngồi, cậu tự dịch laptop sang bên cạnh để nhường chỗ mà không làm câu chuyện dừng lại.
Không phải thay đổi lớn nếu chỉ nhìn từng việc riêng, nhưng Dư An từng biết một Tống Hoài Cẩn không thấy lý do phải học cách làm cho người lạ dễ chịu.
“An, ở đây.” Chị Hà chỉ chiếc ghế trống đối diện mình.
Dư An lấy một hộp cơm và ngồi xuống. Quang nhìn qua. “Cứ tưởng ông không xuống.”
“Đơn bị hủy.”
“May quá. Không thì đồ ăn này lại thành sunk cost.”
“Đừng dùng thuật ngữ tài chính cho cơm trưa.”
Người bên Finance cười. “Hai người phía target lúc nào cũng nói chuyện vậy à?”
Hà đáp thay: “Nó còn lịch sự với các anh đấy.”
Dư An mở hộp cơm. “Chị Hà.”
“Chị đang xây hình ảnh cho em.”
“Em tự xây được.”
“Chị thấy.”
Câu nói kéo theo vài tiếng cười nữa. Dư An cũng cười, không cần cố. Cậu quen những bữa trưa kiểu này, quen việc đồng nghiệp hỏi cuối tuần có đi đâu không, quen trả lời đủ thân thiện để câu chuyện tiếp tục mà không ai thật sự biết tối qua cậu ăn gì, cuối tuần thường gặp ai hay căn hộ của cậu trông thế nào.
Một người từ Finance quay sang Hoài Cẩn. “Anh Cẩn mới về nước hẳn à? Hay vẫn bay đi bay lại?”
“Về hẳn.”
“Trước anh ở đâu?”
Hoài Cẩn nói tên thành phố, rồi khi người kia hỏi thêm về công việc cũ, cậu trả lời ngắn gọn rằng mình làm tư vấn chiến lược và M&A. Không nhắc gia đình, không kể thành tích, cũng không làm câu hỏi trở nên khó xử. Cách cậu đưa cuộc trò chuyện trở lại vấn đề chung tự nhiên đến mức Dư An phải thừa nhận đây không phải kỹ năng một người mười tám tuổi chỉ cần lớn thêm vài năm là tự nhiên có.
Bảy năm đã thật sự xảy ra với Hoài Cẩn. Ý nghĩ ấy đơn giản, nhưng từ hôm qua tới giờ Dư An mới cảm thấy rõ lần đầu.
Quang chợt hỏi: “À, sáng hôm qua An nói hai người là bạn học cũ đúng không? Cùng lớp à?”
Dư An chưa kịp trả lời thì Hoài Cẩn nói: “Cùng trường.”
Chính xác. Không hơn, không kém.
Quang gật đầu. “Thế hồi đó có làm chung không? Tôi thấy hai người bắt nhịp nhanh kinh.”
Dư An lấy thìa. “Có một dự án cuối cấp.”
“À, bảo sao.”
Chị Hà nhìn cậu một cái nhưng không hỏi. Hoài Cẩn cũng không nói thêm rằng dự án đó từng kéo dài thành những buổi thư viện, những bữa ăn sau giờ học và một quãng thời gian mà hai người đã nghĩ mình biết gần như mọi thói quen của nhau.
Cuộc trò chuyện chuyển sang nơi ăn trưa quanh tòa nhà. Ranh giới được giữ nguyên mà không ai phải thỏa thuận trước.
Dư An ăn hết phần của mình rồi đứng dậy trước. “Tôi có cuộc gọi lúc mười hai rưỡi.”
Quang nói: “Chiều hai giờ có risk review, nhớ nhé.”
“Lịch có rồi.”
Hoài Cẩn không nói gì, Dư An cũng không nhìn cậu khi rời pantry.
Hai giờ, risk review có mười một người. Nửa giờ đầu diễn ra yên ổn cho tới khi Finance phía tập đoàn đề nghị đưa toàn bộ invoice history vào scope Day 1 để phục vụ consolidated reporting. Data Engineering nói làm được. Product nói không ảnh hưởng. Chỉ Dư An phản đối.
“Không phải không làm được.” Cậu đổi slide. “Vấn đề là invoice history hiện có ba version tax schema. Nếu đưa hết vào operational layer ngay, chúng ta phải normalize trước cutover. Làm vậy chỉ để consolidated reporting nhanh hơn hai tuần thì không đáng.”
Người Finance hỏi: “Nếu không đưa, tháng đầu bên tôi báo cáo thế nào?”
“Warehouse.”
“Báo cáo từ hai nguồn?”
“Trong giai đoạn chuyển tiếp, đúng.”
“Không sạch.”
“Nhưng đúng.”
Không khí trong phòng chùng xuống một chút. Dư An không vội lấp khoảng trống. Cậu mở bảng đối chiếu ba schema và chỉ ra các field đã đổi nghĩa qua từng phiên bản, sau đó đưa phương án bridge report trong sáu tuần đầu. Người Finance tiếp tục hỏi khó hơn, lần này về reconciliation và trách nhiệm khi số liệu lệch.
Dư An trả lời từng câu. Có điểm cậu biết, cậu trả lời ngay. Có một điểm liên quan quy tắc kế toán hợp nhất mà cậu không chắc, cậu nói thẳng: “Phần đó tôi không đủ thẩm quyền kết luận. Anh cho tôi owner bên Finance, tôi sẽ map requirement kỹ thuật sau khi có rule.”
Không ai trong đội Dư An chen vào cứu, và cậu cũng không cần.
Đến lúc tranh luận kéo sang phút thứ mười lăm, Hoài Cẩn mới lên tiếng. “Tôi tóm tắt xem có đúng không. Finance cần consolidated view từ tháng đầu. Dư An không phản đối view, chỉ phản đối việc biến nhu cầu reporting thành lý do normalize toàn bộ operational history trước cutover.”
Người Finance gật đầu. “Đúng.”
“Vậy tách hai quyết định. Reporting bridge là requirement bắt buộc. Operational migration scope giữ nguyên cho tới khi systems team đánh giá chi phí normalize ba schema.” Hoài Cẩn nhìn Dư An. “Cậu cần bao lâu?”
“Một ngày để estimate.”
“Mai review.”
“Được.”
Cuộc tranh luận kết thúc ở đó. Hoài Cẩn không nói Dư An đúng. Cậu cũng không dùng vị trí của mình để ép Finance nhận thua. Chỉ tách một mâu thuẫn giả thành hai quyết định thật, rồi trả mỗi quyết định về đúng người phải chịu trách nhiệm.
Dư An thấy mình hiểu vì sao những người phía tập đoàn tự nhiên quay sang Hoài Cẩn mỗi khi cần một quyết định khó. Suy nghĩ ấy đến rất tự nhiên, và cậu không thích việc nó cũng đi kèm một loại tôn trọng tự nhiên không kém.
Risk review kết thúc lúc ba giờ mười hai. Mọi người lần lượt ra ngoài. Dư An đang thu dây sạc thì nghe Hoài Cẩn nói phía sau.
“Cậu điều phối phòng họp tốt.”
Dư An quay lại. “Đấy là công việc của tôi.”
“Ừ.”
“Nghe giống nhận xét cuối kỳ.”
Khóe môi Hoài Cẩn động rất ít. “Không phải.”
Dư An nhét dây sạc vào túi. “Vậy là gì?”
“Nhận xét.”
“Khác nhau nhiều thật.”
“Cậu vẫn thích bắt chữ.”
Câu nói đến quá nhanh, tự nhiên đến mức cả hai cùng im một nhịp. Dư An là người phá khoảng lặng trước. “Cậu cũng khác.”
Hoài Cẩn nhìn cậu. “Ở đâu?”
Cậu có thể nói nhiều thứ. Biết xã giao hơn. Biết hỏi người khác muốn gì. Biết để một người nói hết trước khi chốt. Biết không biến sự chính xác thành quyền quyết định thay tất cả mọi người.
Dư An chỉ chọn một câu an toàn nhất.
“Cậu biết nghe người khác nói hết.”
Hoài Cẩn không cười. “Trước đây tôi không biết à?”
“Biết nghe. Không phải lúc nào cũng chờ.”
Một khoảng im lặng khác rơi xuống, lần này dài hơn. Dư An gần như thấy câu nói của mình đã đi sát một ranh giới không còn thuộc công việc. Cậu kéo quai túi lên vai. “Tôi nói trong họp.”
“Tôi biết.” Hoài Cẩn đáp.
Không giải thích, cũng không hỏi thêm. Đúng lúc ấy Quang ló đầu vào phòng, hỏi Hoài Cẩn về một cuộc gọi với Finance. Cậu quay sang trả lời, nhịp câu chuyện lập tức trở lại công việc. Dư An nói mình đi trước và không ai giữ lại.
Trên đường về bàn, cậu đi ngang lớp kính phản chiếu một phần phòng họp phía sau. Hoài Cẩn đang đứng cạnh Quang, vừa nghe vừa xem một file trên màn hình, dáng vẻ bình tĩnh và quen thuộc đến mức nếu chỉ nhìn từ xa, Dư An vẫn có thể nhận ra cậu giữa rất nhiều người.
Nhưng nhận ra không có nghĩa là hiểu. Bảy năm trước, Dư An từng nghĩ mình biết Tống Hoài Cẩn thích gì, ghét gì, sẽ phản ứng thế nào khi bị làm phiền, sẽ im lặng bao lâu trước một câu hỏi khó. Những ký ức ấy vẫn đúng với một người đã tồn tại. Chỉ là người đó không đứng yên để chờ cậu suốt bảy năm.
Dư An cũng vậy. Cậu về tới bàn, mở laptop và nhìn danh sách việc chưa xong. Trong inbox có một tin nhắn của đồng nghiệp hỏi tối nay có đi ăn cùng nhóm không. Dư An trả lời như mọi khi: Không, hôm nay tôi về sớm. Không ai hỏi cậu về đâu, gặp ai hay làm gì. Cậu đã mất vài năm để biến sự riêng tư thành một thứ tự nhiên đến mức người khác biết khi nào nên dừng.
Ở đầu bên kia tầng làm việc, Hoài Cẩn cũng đang nói chuyện với một nhóm người mà bảy năm trước cậu có lẽ đã không chủ động đứng cùng. Dư An nhìn một giây rồi quay lại màn hình.
Điều đáng ngại nhất không còn là Tống Hoài Cẩn vẫn giống người cũ đến đâu, mà là Dư An bắt đầu nhìn thấy những phần đã thay đổi và nhận ra mình không biết chúng được tạo nên như thế nào.