Mã Nguồn Ngược Dòng Chương 186 / 209

Chương 186

Năm giờ rưỡi sáng, sương mù trên kênh Nhiêu Lộc mỏng như một dải lụa xám nhạt, lững lờ trôi trên mặt nước phẳng lặng. Tiếng chổi tre của người công nhân vệ sinh quét rột roạt trên vỉa hè đường Hoàng Sa, đều đặn như một nhịp gõ nhịp điệu của ngày mới.

Hoàng chạy bộ qua cầu Kiệu. Những bước chạy của anh đều đặn, gót chân chạm đất rồi nảy lên nhẹ nhàng. Khí lạnh buổi sớm ẩm ướt tràn vào lồng ngực, mang theo mùi của bùn đất, của nước kênh đang hồi sinh và cả mùi bánh mì nướng thơm phức từ một lò bánh đầu hẻm sắp mở cửa.

Hoàng dừng lại bên lan can sắt bảo vệ bờ kênh, hai tay vịn vào thanh sắt còn đẫm sương đêm. Theo thói quen tích lũy suốt sáu năm, góc mắt phải của anh giật nhẹ. Anh đứng yên, chờ đợi một chuyển động quen thuộc. Một giao diện bạc trong suốt. Một vài dòng chữ nhấp nháy báo hiệu thuộc tính thể chất hay tiến độ phục hồi cơ bắp sau khi vận động.

Nhưng trước mắt anh chỉ có dòng nước xám sẫm trôi xuôi dòng và dải sương mù đang loãng dần dưới ánh bình minh đỏ nhạt phía xa.

Không có màn hình ảo. Không có tiếng báo hiệu điện tử. Không có một cảnh báo nào hiện lên để nhắc nhở anh về bất kỳ giới hạn hay phần thưởng nào đang chờ đợi ở phía cuối con đường chạy bộ.

Hoàng thở ra một hơi dài, luồng hơi ấm áp ngưng tụ lại thành một làn khói mỏng rồi nhanh chóng tan biến vào không khí. Lồng ngực anh phập phồng. Nhịp tim đập mạnh mẽ bên dưới lớp áo thun thể thao mỏng ướt đẫm mồ hôi. Đó là một nhịp đập thực sự, thuộc về cơ thể của một chàng trai mười tám tuổi đang sống trong một buổi sáng bình thường của năm 2017. Anh không cần một thanh trạng thái nào để biết mình đang mệt, hay để biết cơ thể mình đang khỏe mạnh.

Anh tự biết.

Hoàng quay người đi bộ trở về phía căn phòng trọ nhỏ nằm trong hẻm Tô Hiến Thành. Anh đi chậm, bước chân không còn vội vã như những ngày phải chạy đua với chiếc đồng hồ đếm ngược của các nhiệm vụ phụ. Con hẻm Sài Gòn thức dậy bằng những âm thanh quen thuộc: tiếng kéo cửa sắt loảng xoảng, tiếng còi xe máy của người đi chợ sớm, tiếng rao của xe bánh mì dạo. Tất cả hiện lên chân thực, không có một lớp kính lọc nào của Hệ thống đặt giữa anh và thế giới này.


Văn phòng Tô Hiến Thành lúc sáu giờ rưỡi sáng còn yên ắng. Ánh nắng ban mai xiên qua tấm kính lớn, vẽ lên sàn nhà những vệt sáng hình chữ nhật màu vàng nhạt đầy bụi phấn li ti đang nhảy múa.

Hoàng đẩy cửa bước vào. Anh không bật đèn ngay mà để không gian tràn ngập ánh sáng tự nhiên. Anh đi thẳng vào gian bếp nhỏ ở góc phòng, cắm phích nước điện. Trong lúc chờ nước sôi, anh đong cà phê vào phin. Tiếng những hạt cà phê Robusta rơi lách cách vào lòng phin nhôm vang lên giòn giã trong không gian vắng lặng.

Hương cà phê nồng nàn bắt đầu tỏa ra khi nước sôi ngấm qua lớp bột, từng giọt đen đặc nhỏ chậm rãi xuống chiếc ly thủy tinh.

“Đến sớm vậy anh?”

Tiếng Minh vang lên từ phía cửa. Cậu kỹ sư nền tảng bước vào, vai đeo chiếc ba lô vải dù sờn góc, tay kia vẫn cầm một ổ bánh mì kẹp thịt mua vội ở đầu đường. Gương mặt Minh vẫn còn nguyên vẻ ngái ngủ của một người vừa trải qua một đêm thức muộn để debug, nhưng đôi mắt sau gọng kính cận thì hoàn toàn tỉnh táo.

“Mới chạy bộ về tiện đường ghé qua.” Hoàng đặt một chiếc ly sứ khác lên bàn, bắt đầu pha ly thứ hai cho Minh. “Uống không?”

Minh nhìn chiếc ly sứ, rồi nhìn Hoàng. Khoảng cách giữa hai người từ sau những cuộc tranh luận nảy lửa và quyết định deploy kiến trúc lớn ở chương trước đã giãn ra rất nhiều. Minh đặt ba lô xuống ghế, kéo ghế ngồi vào bàn.

“Cho em xin. Đêm qua chạy cái script migration database đến bốn giờ sáng. Dữ liệu chạy thử trên sandbox ổn, nhưng phải kiểm tra kỹ lại đống log xem có lỗi đồng bộ tiềm ẩn nào không.”

Hoàng đặt ly cà phê nóng trước mặt Minh, tự cầm ly của mình rồi ngồi xuống đối diện. “Cứ ăn bánh mì đi đã. Ăn xong rồi cùng xem.”

Hai người ngồi ăn trong im lặng. Tiếng Minh nhai bánh mì rôm rả xen lẫn tiếng hớp cà phê nóng. Hoàng nhìn ra cửa sổ. Trước đây, khi ngồi với Minh hay bất kỳ ai trong nhóm, anh luôn phải mở Hệ thống để quan sát chỉ số “Tin cậy nội bộ” hay “Rủi ro đạo đức” nhằm tính toán xem mình nên nói câu gì tiếp theo để giữ ranh giới an toàn.

Bây giờ, anh chỉ thấy một Minh đang mệt mỏi nhưng tận tụy, một người đồng nghiệp thực sự đang chia sẻ gánh nặng với anh trên cùng một chiến tuyến. Sự tin tưởng không còn là một con số để tối ưu hóa trên màn hình bạc. Nó là việc anh ngồi đây, pha cho cậu ta một ly cà phê và để cậu ta tự quyết định tốc độ làm việc của mình.

Ăn xong ổ bánh mì, Minh lau tay vào tờ khăn giấy rồi mở laptop. Cậu xoay màn hình về phía Hoàng, chỉ vào dòng git commit mới nhất trên nhánh migration-v3.

“Em đã chẻ xong phần bảng ghi nợ cũ của NỢ SỔ monolith ra thành một database schema riêng cho NỢ SỔ Core. Đây là codebase mới cho phần quản lý giao dịch. Em viết bằng Node.js và TypeScript đúng như kế hoạch. Anh xem thử đi.”

Hoàng kéo chiếc laptop về phía mình. Màn hình hiển thị cửa sổ Visual Studio Code với hàng trăm dòng mã nguồn.

Nếu là một năm trước, Hoàng sẽ mở Hệ thống, dùng kỹ năng “Quản lý sản phẩm” hoặc “Kiến thức kỹ thuật” được cấp từ tương lai để quét qua toàn bộ cấu trúc, tìm ra ngay những điểm bất hợp lý trong vòng ba giây nhờ các gợi ý hiển thị màu đỏ của giao diện ảo.

Còn bây giờ, anh phải làm việc đó theo cách của một kỹ sư bình thường.

Hoàng nheo mắt, tay lăn con chuột dọc theo codebase. Anh đọc kỹ cấu trúc của các module, kiểm tra cách Minh thiết lập các hàm Async/Await, cách cậu xử lý lỗi khi kết nối database bị gián đoạn, và cách viết các truy vấn SQL để tránh tình trạng khóa bảng khi lượng người dùng tăng đột biến.

Anh đọc chậm. Có những đoạn pattern mới sử dụng decorator trong TypeScript khiến anh phải dừng lại suy nghĩ. Không còn một thanh trạng thái nào nhắc nhở anh rằng “Kiến thức kỹ thuật đang lệch khỏi codebase”. Anh biết mình đang tụt lại phía sau so với sự phát triển nhanh chóng của các công nghệ mới mà Minh đang áp dụng.

Nhưng cảm giác đó không còn gây ra sự bất an hay tự ái nữa.

“Chỗ này,” Hoàng chỉ tay vào màn hình, đoạn mã xử lý hàng đợi retry khi ghi dữ liệu xuống database chính bị lỗi. “Nếu network giữa microservices của NỢ SỔ Core và NỢ SỔ Management bị nghẽn đúng lúc transaction đang thực hiện, cơ chế retry này có thể tạo ra các transaction trùng lặp (duplicate transactions) nếu backend bên kia nhận được yêu cầu nhưng timeout không kịp trả về kết quả thành công đúng hạn.”

Minh dừng ly cà phê sát miệng, nghiêng đầu nhìn vào đoạn mã Hoàng vừa chỉ. Cậu im lặng suy nghĩ vài giây, ngón tay gõ nhịp nhẹ lên mặt bàn gỗ.

“Đúng. Nếu phía nhận xử lý chậm hơn thời gian timeout của phía gửi, phía gửi sẽ đẩy lại một request mới. Nếu không có cơ chế idempotency key ở đầu nhận, dữ liệu ghi nợ của khách hàng sẽ bị cộng dồn hai lần.” Minh gật đầu, ánh mắt ánh lên vẻ thừa nhận thực sự đối với logic phản biện của Hoàng. “Em sót trường hợp này. Để em thêm một filter check request ID ở API gateway để chặn các yêu cầu trùng lặp trong vòng năm phút.”

“Ừ, thêm cái đó là an toàn.” Hoàng đẩy trả chiếc laptop lại cho Minh. “Cơ bản là cấu trúc rất sạch. Rõ ràng hơn nhiều so với cái đống PHP monolith cũ mà tao viết vội hồi đầu.”

Minh cười, đóng tab code lại để bắt đầu viết đoạn logic filter mới. “Cái đống cũ của anh tuy không đẹp nhưng nó đã gánh hệ thống qua giai đoạn khó nhất để có tiền nuôi tụi em viết đống code sạch này. Kỹ sư tụi em biết ơn nó mà.”

Lời nói đùa của Minh khiến không khí văn phòng buổi sáng trở nên nhẹ nhàng lạ thường. Hoàng uống một ngụm cà phê cuối cùng, cảm nhận vị đắng đậm đà lưu lại trên đầu lưỡi. Anh đứng dậy mang ly đi rửa. Khi dòng nước lạnh từ vòi chảy qua các kẽ ngón tay, anh nhận ra một điều: khi anh buông bỏ quyền lực tuyệt đối của một người biết trước mọi lỗi sai, anh lại có được sự tôn trọng thực sự từ những người giỏi hơn mình trong từng lĩnh vực cụ thể.


Hoàng trở lại bàn làm việc của mình. Trên mặt bàn gỗ phẳng phiu, bên cạnh chiếc laptop làm việc là một cuốn sổ tay mới mua.

Đó là một cuốn sổ tay nhỏ, bìa da màu xanh đen giản dị, không có dòng kẻ, không có bất kỳ ký hiệu hay thanh tiến độ nào in sẵn trên các trang giấy trắng tinh.

Hoàng mở trang đầu tiên. Trang giấy trống trơn, phẳng phiu và thơm mùi giấy mới.

Anh cầm chiếc bút bi Thiên Long màu xanh, ngòi bút lơ lửng trên mặt giấy trong vài giây. Suốt sáu năm qua, mọi việc anh làm đều được lập lịch trình dựa trên các thông báo nhiệm vụ của Hệ thống: 90 ngày cho Hạt giống, 60 ngày cho Bước ra, 120 ngày cho Trụ cột văn hóa. Mọi ngày làm việc của anh đều được lấp đầy bởi các cột mốc thời gian, các thanh phần trăm tiến độ nhấp nháy cần được làm đầy để tránh hình phạt.

Giờ đây, trang giấy trắng này đại diện cho sự tự do hoàn toàn. Nhưng sự tự do đó cũng đi kèm với một gánh nặng mới: không có ai chỉ cho anh biết việc gì cần làm trước, không có ai đo lường xem quyết định của anh là đúng hay sai trong vòng sáu năm tới.

Mỗi phút trôi qua từ bây giờ đều là một lựa chọn của riêng anh, và anh phải tự chịu trách nhiệm cho từng lựa chọn đó.

Hoàng hạ ngòi bút xuống, viết những dòng chữ đầu tiên bằng nét chữ đều đặn, rõ ràng:

Ngày 25 tháng 4 năm 2017.

1. Duyệt kế hoạch tài chính quý II với Phương Anh. Tập trung vào dòng tiền độc lập cho Cổng Việt. 2. Gọi điện cho ba hỏi về tình hình lắp đặt camera giám sát mới ở kho Bình Thạnh. 3. Viết tài liệu định hướng sản phẩm cho NỢ SỔ Management — định nghĩa rõ các tính năng hỗ trợ tiểu thương tự động hóa báo cáo kho.

Hoàng viết xong, đặt bút xuống. Anh nhìn dòng chữ mực xanh nổi bật trên trang giấy trắng không có dòng kẻ. Nét chữ hơi lệch lên trên một chút vì không có đường kẻ dẫn hướng, nhưng nó ngay ngắn và thuộc về bàn tay thực tế của anh.

Không có thanh tiến độ nào hiện lên ở góc trang giấy để xác nhận nhiệm vụ đã được khởi tạo. Không có điểm Tín nhiệm hay Thực chiến nào được cộng thêm vào góc mắt.

Chỉ có tiếng quạt thông gió của máy tính chạy đều đều bên cạnh, và ánh nắng sáng đã ngập tràn khắp văn phòng, xua tan hoàn toàn những dải sương mù cuối cùng trên con kênh ngoài kia.

Hoàng tựa lưng vào ghế, thở ra một hơi nhẹ nhõm. Lần đầu tiên trong đời, anh cảm thấy mặt đất dưới chân mình thật sự vững chãi. Anh mở laptop lên, bắt đầu gõ những dòng đầu tiên của tài liệu định hướng sản phẩm mới, hoàn toàn tự do và hoàn toàn tự quyết.