Chúng tôi lưu không có hạn và chưa kiểm tra vào cùng một ô trống
October 6, 2026 · Taro — Nhà sáng lập KAZENA
Ngày 1 tháng 10, tôi đếm những giá trị mà phần mềm của chúng tôi lưu để kết nối với các dịch vụ bên ngoài. Có 11 giá trị. Với 8 trong số đó, chúng tôi không trả lời được là chúng được tạo ra khi nào. Thứ khiến tôi bắt đầu đếm là một thông báo đã đến trước đó 2 tuần.
Thông báo đến ngày 16 tháng 9. Một trong những dịch vụ chúng tôi kết nối sẽ ngừng cấp loại token không bao giờ hết hạn, và thay bằng loại hết hạn sau 60 ngày. Khi đọc, tôi tưởng mình đã hiểu phải làm gì. Tạo token mới, rồi dựng một quy trình thay nó mỗi 60 ngày. Việc trông nhỏ, nên tôi đánh dấu để đọc lại sau rồi đóng nó.
Lý do tôi để lại có lẽ nằm ở từ tôi đã dùng. Trong đầu, tôi gọi đây là việc gia hạn. Gia hạn là một quy trình, mà quy trình thì có thể đợi đến lúc rảnh. Thật ra nó không phải quy trình. Nó là tin rằng một giả định chúng tôi để nguyên hơn 2 năm vừa bị phía bên kia rút lại.
Ngày 1 tháng 10 tôi bắt tay vào làm và dừng ngay ở câu hỏi đầu tiên. Token đang dùng được tạo khi nào? Tôi tìm trong ghi chép của chính mình, chỉ thấy 1 dòng trong tài liệu cài đặt: dán giá trị vào đây. Không có ngày tháng. Cuối cùng tôi phải mở trang quản trị của nhà cung cấp để biết. Nó đã hơn 2 năm tuổi. Suốt 2 năm đó, mã của chúng tôi chưa một lần hỏi giá trị ấy bao nhiêu tuổi.
Thế là tôi xem lại những giá trị còn lại theo cách tương tự. 11 giá trị ấy chia ra như sau. Nhà cung cấp đặt hạn cho 4 giá trị và không đặt hạn cho 7 giá trị. Trong 4 cái có hạn, chúng tôi chỉ ghi lại ngày tạo của đúng 1 cái. Những cái còn lại chỉ có thể biết bằng cách mở trang quản trị hoặc hỏi người đã tạo ra chúng.
Giữa lúc đếm, tôi tìm thấy 1 cái đã hết hạn. Không phải giá trị của hệ thống thật, mà của kết nối dùng để kiểm thử. Nó hết hạn từ cuối tháng 7. Chúng tôi không nhận ra vì bước kiểm tra dùng giá trị ấy được viết sao cho thất bại không được gọi là thất bại. Khi xác thực hỏng, bước đó bị bỏ qua và kết quả chung vẫn báo thành công. Hơn 2 tháng, bước kiểm tra ấy liên tục thành công mà không kiểm tra gì cả.
Có một chuyện tôi chợt nhớ lại. Tháng 8, E nhắn rằng thông báo thử nghiệm không đến. Anh ấy đã ở cùng chúng tôi từ những ngày đầu, sống ở một thị trấn nhỏ cách Jakarta khá xa, và luôn là người lo việc kiểm thử trên máy thật cùng việc phát hành tại chỗ. Chúng tôi gửi lại qua đường của hệ thống thật, tin nhắn đến được máy anh, và chúng tôi khép lại chuyện đó ở đấy. Thứ đến nơi đi qua một đường khác. Không ai hỏi vì sao đường còn lại không đến.
Đây là phần quan trọng nhất lần này. Trong dữ liệu của chúng tôi, câu nhà cung cấp không đặt hạn và câu chúng tôi chưa kiểm tra hạn được lưu thành đúng một ô trống giống hệt nhau. Cả hai đều không có giá trị nên không phân biệt được. Một bên là lời của nhà cung cấp, bên kia là thừa nhận rằng chúng tôi không biết. Ý nghĩa trái ngược nhau, mà được lưu dưới cùng một hình dạng.
Dùng được mãi mãi cũng chưa bao giờ là tính chất của riêng chúng tôi. Đó là lời hứa phía bên kia đang giữ, và lời hứa thì họ có thể dừng bất cứ lúc nào. Token không có hạn không có nghĩa là hạn không tồn tại, chỉ là hạn chưa được quyết định. Nhìn như vậy thì thông báo kia không phải tai nạn. Đó là chuyện bình thường vẫn xảy ra.
Chúng tôi sửa 3 điều. Thứ nhất, mỗi giá trị được lưu nay mang theo ngày tạo, ngày hết hạn và nơi nó được tạo. Nếu nhà cung cấp không đặt hạn, chúng tôi ghi là không đặt chứ không để trống. Như vậy, ô trống chỉ còn là những cái chúng tôi chưa xem, và người đọc sau này đếm được còn bao nhiêu.
Thứ hai, số ngày còn lại được hiển thị ở nơi người ta nhìn vào. Khi còn dưới 14 ngày, 1 dòng hiện lên ở đầu màn hình cài đặt. Nhưng màn hình cài đặt không phải thứ mở hằng ngày. Đặt cảnh báo ở nơi không ai nhìn thì cũng như không đặt, nên chúng tôi đưa đúng dòng đó vào cả email kiểm tra gửi đến chúng tôi mỗi sáng.
Thứ ba, chúng tôi thôi coi một lần xác thực hỏng là thứ có thể bỏ qua. Ngay cả với kết nối kiểm thử, không vào được thì nay chúng tôi nói là không vào được. Cách viết để hệ thống lặng lẽ đi qua thứ đã không đi qua, lúc viết chúng tôi nghĩ là tử tế. Chắc chúng tôi muốn không làm phiền người đang chạy nó. Thực tế nó vứt đi 2 tháng kiểm tra mà không nói một lời.
Cùng một lối nghĩ sai ấy nằm trong màn hình khách hàng nhìn thấy. Sau khi kết nối với dịch vụ bên ngoài, chúng tôi chỉ hiện chữ đã kết nối. Chúng tôi viết nó như một báo cáo về việc đã xảy ra, nhưng người đọc hiểu nó như một lời nói về tương lai. Bây giờ chúng tôi hiện kèm ngày xác nhận kết nối gần nhất, và nếu biết hạn thì hiện cả ngày đó. Đọc dài hơn chữ đã kết nối, nhưng người dùng tự quyết định được khi nào nên kiểm tra lại.
Cuối cùng có một điều muốn nhờ. Nếu trên màn hình KAZENA có chỗ nào đọc xong mà không biết nó nói về thời điểm nào, xin cho chúng tôi biết. Chỗ chỉ ghi mỗi chữ xong thường là chỗ chúng tôi đã bỏ mất ngày mình kiểm tra.
Hãy cho chúng tôi biết bạn nghĩ gì
Cảm giác khi dùng các ứng dụng KAZENA, điều gì chúng tôi nên sửa, những tính năng bạn ước có — nếu bạn đang điều hành một doanh nghiệp nhỏ hoặc vừa, hay làm nghề tự do ở Indonesia hoặc Philippines, tiếng nói của bạn chính là điều chúng tôi mong được nghe nhất. Những tin nhắn bằng tiếng Indonesia hoặc tiếng Anh sẽ được trả lời bởi các đồng đội hiểu thị trường của bạn từ bên trong. KAZENA Books đã được ấn định ra mắt tại Philippines và Indonesia — và nếu công ty của bạn muốn đưa nó đến các quốc gia khác với tư cách đối tác, hoặc quan tâm đến việc mua lại hệ thống, chúng tôi cũng rất mong nhận được liên hệ từ bạn. Chúng tôi cũng nhận phát triển hệ thống mới. Chúng tôi là một đội nhỏ, nên không phải lúc nào cũng có thể bắt tay ngay — nhưng những gì chúng tôi xây dựng đều mang chất lượng made-in-Japan và luôn bám sát cách công việc kinh doanh thực sự vận hành ở đây, từng dự án một.
Liên hệ với chúng tôi