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

Chương 19 — Tính năng và lời hứa

Đêm đầu tiên, Hoàng bắt đầu lúc mười một giờ kém mười lăm.

Ba đã tắt đèn từ lúc mười giờ — tiếng giường cọ vào tường một lần, rồi im. Mẹ về ca chiều lúc chín rưỡi, ăn cơm nguội, đặt đầu xuống gối được hai mươi phút là ngủ. Căn nhà trong hẻm Bình Thạnh về đêm không hoàn toàn yên — có tiếng TV từ nhà bên vọng qua vách, tiếng xe máy từ đường lớn đi lạc vào, tiếng mèo nhảy lên mái tôn — nhưng những tiếng đó là nền, không phải tiếng động thật.

Hoàng ngồi trước laptop, màn hình đặt thấp để ánh sáng không thoát qua khe cửa. Cái đèn bàn nhỏ mua ở chợ cũ bật ở chế độ yếu nhất — đủ thấy phím bấm, không đủ để sáng cả phòng.

Logic xuất báo cáo không phức tạp, nhưng phải làm cho đúng.

Anh mở một tab trống, viết ra luồng: người dùng bấm nút xuất — hệ thống tổng hợp danh sách nợ — format thành bảng có thể in — cho phép tải xuống hoặc in trực tiếp từ trình duyệt. Không phải Excel thật — browser không làm được Excel dễ dàng ở năm 2014 mà không cần thư viện nặng — nhưng một trang HTML được format đàng hoàng, đủ để in ra giấy A4 trông sạch sẽ, là đủ cho anh Phước và vợ anh.

Anh gõ đầu tiên là đoạn CSS cho trang in. Print stylesheet, thứ mà hầu hết developer không nghĩ đến cho đến khi có người phàn nàn bản in trông như rác.

Tiếng ba ngáy từ phòng bên lọt qua vách mỏng, đều và chậm.


Buổi sáng hôm sau, anh ngủ thêm bốn mươi lăm phút sau khi tắt chuông lần đầu — điều hiếm khi xảy ra. Trong lớp, tiết Lịch Sử, anh ngồi nhìn vào vở ghi nhưng đầu anh đang ở trong cái vòng lặp render data mà tối qua anh để lại dở dang.

Có một chỗ anh chưa xử lý: nếu khách nợ cùng tên thì sao? Chị Bảy có thể có hai người tên Hùng — Hùng hàng xóm và Hùng ở cuối hẻm — và khi in ra, bảng sẽ hiện hai dòng Hùng mà không phân biệt được. Anh cần thêm trường phụ — số điện thoại tùy chọn, hoặc ghi chú ngắn.

Anh viết vào góc trang vở: trường “ghi chú” thêm vào modal thêm khách.

Rồi thầy Khải gọi tên anh đọc bài, và Hoàng đọc đúng trang đang học dù không nhìn vào bảng, vì anh đã đọc qua đủ nhanh để nhớ cấu trúc đoạn đó từ đầu tiết.


Đêm thứ hai, anh làm xong phần backend — logic tổng hợp dữ liệu, sắp xếp theo tên, xử lý trường hợp trùng tên bằng trường ghi chú mới. Phần frontend còn lại: nút xuất, modal xác nhận, trang in.

Mười hai giờ đêm anh push lên server test.

Ngồi thêm mười lăm phút nhìn vào màn hình, kiểm tra lại luồng một lần nữa. Bấm nút xuất. Trang in hiện ra — danh sách nợ xếp theo tên, số tiền căn chỉnh đúng cột, có ngày cập nhật cuối, có tên tiệm ở header. Bấm Ctrl+P, chọn Save as PDF.

File PDF mở ra trên màn hình.

Hoàng nhìn vào tờ PDF đó. Bảng nợ của một cái tiệm tạp hoá giả, với tên khách giả anh điền vào để test. Nhưng nếu là tiệm của anh Phước — dòng chữ đầu tiên sẽ là Tiệm Tạp Hoá Phước — và vợ anh Phước có thể cầm tờ giấy này, đọc xem tháng này ai nợ bao nhiêu, không cần mở điện thoại, không cần biết app là gì.

Anh tắt laptop. Nằm xuống giường.

Bốn phút sau anh bật lại, thêm hai chỗ: font chữ lớn hơn cho người mắt kém, và dòng chú thích nhỏ dưới cùng tờ in — Tạo bởi NỢ SỔ — nợsổ.vn — vì người ta in ra giấy, cho người khác coi, và tên sản phẩm ở đó là kênh quảng cáo không tốn tiền.

Lần này anh tắt thật.


Sáng sớm ngày thứ ba anh ngồi fix một edge case cuối — nếu danh sách nợ trống thì trang in hiện thông báo “Hiện chưa có công nợ” thay vì trang trắng. Rồi viết thêm một đoạn vào file tài liệu của Khoa, phần cuối mục Câu hỏi thường gặp:

Khách hỏi: App có xuất báo cáo ra giấy không? Trả lời: Có. Bấm vào mục “Xuất báo cáo” ở góc trên bên phải, chọn “In danh sách nợ”. App sẽ hiển thị trang có thể in hoặc lưu thành PDF. Máy in kết nối với điện thoại hoặc máy tính đều dùng được.

Hoàng đọc lại đoạn đó một lần. Ngắn gọn, không có thuật ngữ kỹ thuật, trả lời đúng câu người ta hỏi.

Rồi anh copy link server test, mở một cửa sổ chat mới với Khoa, gõ:

Mày vào link này test thử. Tính năng xuất báo cáo đã có.

Gửi đi lúc sáu giờ mười bảy sáng. Khoa chắc chắn chưa dậy.


Khoa nhắn lại lúc bảy giờ bốn mươi lăm:

Tao test rồi. Ngon. Trang in trông sạch lắm.

Rồi sau đó ba phút: Tao gọi cho anh Phước và hai chị nữa báo có tính năng mới.

Hoàng đang ăn sáng — bánh mì mua ở đầu hẻm, ngồi ăn trong phòng vì ba đã đi chạy xe từ sáng sớm, mẹ đang chuẩn bị ca sáng. Anh đọc tin nhắn, tiếp tục ăn.

Oke, anh nhắn lại.


Buổi chiều hôm đó, trong giờ Sinh học — thầy Tùng đang giảng về chu kỳ tế bào, viết sơ đồ dài trên bảng — điện thoại trong túi anh rung một lần.

Anh không lấy ra. Chờ.

Rung lần nữa sau mười phút.

Hết giờ, anh mới nhìn. Khoa:

Anh Phước gọi lại. Ổng nói tốt lắm, vừa thử in ra giấy rồi, đưa vợ xem, bà vợ nói cái này tiện hơn quyển vở nhiều.

Chị Ngọc — cái chị bán vải hẻm Gò Vấp tao kể hồi trước — tao vừa gọi lại, chị nói sẽ thử lại từ đầu. Chị bỏ vì hôm đó tao không trả lời được câu hỏi xuất file.

Hoàng đọc phần về chị Ngọc. Nhớ lại — Khoa có nhắc đến một chị bán vải, nhưng không nói rõ lý do chị bỏ. Hóa ra cũng vì tính năng này.

Và một người nữa tao mới gặp hôm qua — chị Hoa bán thuốc tây gần ngã tư Phú Nhuận — sau khi tao demo tính năng xuất báo cáo, chị đăng ký ngay.

Hoàng gõ vào máy tính bảng Hệ thống — không, anh chỉ nhìn vào góc tầm mắt nơi bảng đếm vẫn hiển thị nhỏ. Số đã cập nhật.

NGƯỜI DÙNG THỰC: 57 — HẠN CHÓT: 40 NGÀY.

Năm mươi bảy. Từ bốn mươi lên năm mươi bảy trong một ngày, chỉ vì Khoa gọi lại những người cũ và có thêm một người mới.\

Anh nhắn cho Khoa: Tốt. Tiếp tục gọi lại những ai mày biết đã bỏ vì thiếu tính năng.

Đang làm. Tao list ra được bốn người nữa.


Bốn ngày sau, bảng cập nhật lên 78/500.

Khoa gửi báo cáo tối thứ Sáu như đã hẹn — một đoạn văn dài bất thường so với thói quen nhắn tin ngắn của anh:

Tuần này: gặp thêm chín tiệm mới, chốt sáu. Gọi lại mười người cũ, ba người quay lại. Hai người trong số đó vì xuất báo cáo — họ thử in ra giấy, thấy được. Một người vì giờ app chạy ổn hơn hồi đầu (hỏi tao biết không, tao nói có cải thiện). Tổng: mười tám người trả tiền, hai trăm bảy chục ngàn một tháng vào tài khoản anh Tuấn. Mày xác nhận số không?

Hoàng nhìn con số: hai trăm bảy chục ngàn. Mười tám tiệm, mỗi tiệm một trăm năm mươi ngàn một tháng. Không phải tiền lớn nhưng đủ để chứng minh người ta sẵn lòng trả.

Đúng số, anh nhắn lại. Tuần sau tiếp tục.

Oke.

Và hết. Không có gì thêm.\


Đó là lúc Hệ thống hiển thị.

Không phải khung thông báo thông thường — không phải thanh tiến độ hay con số cập nhật. Là một bảng nhỏ, góc dưới tầm mắt, chữ vàng nhạt trên nền trong suốt:

THỰC CHIẾN +3

Rồi ngay bên dưới, cách một dòng, chữ đỏ nhạt hơn:

CẢNH BÁO — BẤT BÌNH ĐẲNG THÔNG TIN TRONG NHÓM ĐANG TĂNG

Hoàng ngồi nhìn hai dòng đó.

Bên ngoài, mẹ đang rửa chén — tiếng nước chảy từ bếp vọng lên, tiếng bát đụng nhau lách cách. Ba chưa về. Phòng anh đóng cửa, đèn bàn bật, laptop đang mở stack trace của một bug nhỏ anh định fix tối nay.

Anh đọc lại dòng cảnh báo.

Bất bình đẳng thông tin.

Không phải thuật ngữ mà Hệ thống thường dùng. Thường thì nó nói RỦI RO, NGUY CƠ, CẦN XEM XÉT — những từ nghe như báo cáo kỹ thuật. Dòng này khác. Nó không báo rủi ro từ bên ngoài. Nó đang nói về thứ đang xảy ra bên trong cái gọi là nhóm của họ.

Hoàng biết Hệ thống đang nói gì.

Khoa không biết mục tiêu là 500 người. Không biết hạn chót là 90 ngày, không biết còn 40 ngày. Không biết nếu thất bại thì có gì bị khóa, có gì bị trừ. Không biết sản phẩm đang ở pha nào của nhiệm vụ lớn hơn mà Hoàng đang theo.

Khoa biết: có app cần bán. Có người dùng cần tăng. Thứ Sáu báo số.

Đó là tất cả những gì Hoàng cho anh biết.

Và Khoa đang chạy, đang gọi điện từng người, đang ngồi ăn cơm với người ta trước khi demo — mà không biết mình đang chạy về đâu, đang chạy trong bao lâu, và điều gì xảy ra nếu không đến đích.

Hoàng tắt bảng Hệ thống. Không phải vì không muốn đọc — mà vì anh đã đọc và đã hiểu, và đọc thêm cũng không thêm gì.


Đêm đó anh không fix bug. Anh ngồi nhìn màn hình một lúc rồi gấp laptop lại.

Trong đầu anh, câu đó cứ lặp lại: cảm ơn mày đã chỉ cho tao thiếu gì.

Câu thật nhất anh có thể nói với Khoa lúc này. Bởi vì đó là sự thật — tính năng xuất báo cáo không nằm trong bản thiết kế ban đầu của anh, không được Hệ thống gợi ý, không phải kết quả của bất kỳ mảnh thông tin tương lai nào. Nó có mặt trong NỢ SỔ vì anh Phước hỏi, vì Khoa gọi không ai bắt máy, vì Khoa ngồi trước khách mà không biết trả lời.

Khoa đã chỉ ra một lỗ hổng mà anh không thấy, bằng cách vô tình đứng ở chỗ anh không đứng được.

Mà anh không nói gì về điều đó. Không phải vì không biết — mà vì nói ra nghĩa là thừa nhận anh không thiết kế sản phẩm hoàn hảo. Rằng anh cần phản hồi. Rằng người bán hàng đang dạy người làm sản phẩm điều người dùng thật sự cần.

Anh không nói ra được câu đó. Anh không biết mình không nói được vì tự ái hay vì sợ cái gì khác.

Điện thoại nằm im trên bàn. Không có tin nhắn mới từ Khoa. Hai người đã đóng cuộc hội thoại tối thứ Sáu bằng hai từ: Đúng sốOke.

Hoàng nhìn màn hình điện thoại tắt. Ngón tay cái anh gõ nhẹ vào mặt bàn — một lần, hai lần — rồi dừng.

Anh mở điện thoại, mở chat với Khoa.

Version mới lên rồi. Anh gõ. Mày có thể báo cho mấy người cũ biết.

Câu đó gửi đi lúc mười một giờ ba mươi bảy đêm.

Khoa không online. Chín phút sau — Hoàng đang chuẩn bị tắt điện thoại ngủ — có dấu tích xanh xuất hiện rồi ba chấm nhấp nháy.

Oke.

Một chữ. Cùng một chữ Khoa hay dùng khi anh nhận thông tin và đã hiểu và sẽ làm.

Hoàng nhìn vào chữ đó.

Không phải giận, không phải vui, không phải trách. Chỉ là một chữ để kết thúc thông tin. Đơn giản và hiệu quả, như cách Khoa làm mọi thứ khi không cần dài dòng.

Anh tắt điện thoại, nằm xuống.

Trong bóng tối, cái câu đó vẫn nằm đó — không nói ra, không gửi đi, không biến mất.

Cảm ơn mày đã chỉ cho tao thiếu gì.

Và ở góc tầm mắt, nơi Hệ thống hay hiển thị, chỉ có bóng tối và con số đứng yên: 78/500. 40 ngày.