// BLOG — 2026-09-15

Mỗi mắt xích tự động hoá là một khoản nợ: chuyện giữ hệ trông bé gọn trong một nhu cầu

Mình dựng một hệ tự động hoá nhỏ để canh bé ngủ đêm, rồi suýt để nó quyết định khi nào mình được ngủ: mỗi mắt xích thêm vào không phải là một mắt xích mà là một hệ số nhân của số lần bị đánh thức vô ích, cộng thêm một chỗ có thể âm thầm chết mà không ai biết, và một thói quen vuốt tắt bằng phản xạ. Bốn câu hỏi mình dùng làm cổng trước khi thêm bất cứ thứ gì - và vì sao mắt xích đáng giữ nhất là mắt xích mình từng cân nhắc bỏ.

# Mỗi mắt xích tự động hoá là một khoản nợ: chuyện giữ hệ trông bé gọn trong một nhu cầu

3 giờ 14 phút sáng. Đồng hồ đeo tay rung. Mình bật dậy, chân trần chạy sang phòng bên, tim đập như trống trận — rồi đứng giữa phòng, nghe tiếng thở đều đều của con và tiếng quạt trần.

Không có gì xảy ra cả. Bé ngủ ngon.

Mình nằm xuống. Mười phút sau mới ngủ lại được. Và cái ý nghĩ đau nhất không phải là "hệ thống báo nhầm" — mà là: mình dựng cái hệ này lên để ngủ ngon hơn, rồi để nó quyết định khi nào mình được ngủ.

Bên trong hệ thống đó không có gì phức tạp. Nó chỉ có quá nhiều thứ.

Nó bắt đầu từ đúng một nhu cầu, và đáng ra chỉ cần dừng ở đó

Nhu cầu thật của mình hồi đó rất hẹp: đêm ngủ ở phòng bên cạnh mà vẫn biết được con có thức hay không. Không phải "xây smart home". Không phải "tối ưu cuộc sống bằng tự động hoá". Chỉ là một câu hỏi duy nhất, lặp lại mỗi đêm: con ổn không?

Giải pháp tối thiểu cho câu hỏi đó cũng rất gọn: một cái camera có nghe được tiếng, ở trong phòng bé; một luồng thông báo; một cái rung trên đồng hồ. Ba mắt xích. Chạy êm gần như tuyệt đối.

Rồi mình bắt đầu trượt dốc — theo đúng cái cách mà ai cũng trượt dốc.

Đọc một bài hay, thấy người ta dùng thêm cảm biến cửa. Thấy hợp lý, mình thêm. Rồi thấy nút bấm không dây tiện quá, thêm một cái. Rồi đèn hành lang, rồi một kịch bản "phòng sáng dịu khi bé động đậy", rồi một cái hub thứ hai để "hệ thống ổn định hơn". Mỗi lần thêm, mình có đúng cái cảm giác đã rất cũ nhưng rất đã: sắp rồi, sắp thông minh thật rồi.

Không ai trong chuỗi quyết định đó là quyết định sai. Sai nằm ở chỗ khác — ở chỗ mỗi lần thêm, mình chỉ nhìn thấy phần được, và không nhìn thấy phần nợ.

Ba khoản nợ ẩn, mà lúc thêm thì không ai tính

Nợ thứ nhất: một nguồn báo giả mới. Cái chuyện camera nghe tiếng quạt, tiếng xe ngoài đường, tiếng con mèo, rồi báo nhầm — mình đã kể ở một bài trước rồi, nên ở đây chỉ nói phần cộng dồn: mỗi mắt xích mới không phải là 1 mắt xích, nó là 1 hệ số nhân của số lần mình bị đánh thức vô ích. Thêm một cảm biến cửa không làm mình ngủ ngon hơn. Nó chỉ làm mình có thêm một đường nữa để bị gọi dậy.

Nợ thứ hai: không ai biết khi nó chết. Đây là khoản đau nhất và cũng ít ai để ý nhất. Một camera bị rớt wifi trông hoàn toàn giống một em bé đang ngủ: im lặng. Một luồng thông báo bị tắt quyền gửi đi trông cũng hoàn toàn giống một đêm yên ổn. Hệ càng nhiều mắt xích, xác suất có một mắt xích đang âm thầm chết càng cao — và tệ hơn, độ tin cậy của cả chuỗi là tích của từng phần, chứ không phải trung bình. Bốn mắt xích mỗi cái chạy đúng 99% thời gian nghe thì rất tốt, nhưng nhân lại thì cả chuỗi chỉ còn khoảng 96%. Mười mắt xích thì dưới 91%. Cái cảm giác "thêm cho chắc" thực ra là "thêm cho mỏng đi", chỉ là nó mỏng ở một chỗ mình không nhìn thấy.

Nợ thứ ba: mình bắt đầu tắt tiếng hệ thống bằng phản xạ. Vài lần báo nhầm, mình không sửa luồng — mình chỉ vuốt tắt. Vài chục lần nữa, mình vuốt tắt trước cả khi đọc nội dung. Đến đoạn đó thì mắt xích tốt nhất trong hệ cũng coi như đã chết, vì người nhận tín hiệu không còn đọc tín hiệu nữa. Cái này trong vận hành có tên riêng, nhưng cảm giác thì ai cũng biết: chai. Và cái thứ đắt tiền mình dựng lên trở thành một cái tab tin nhắn mình bấm "đã đọc" cho xong.

Rồi còn khoản thứ tư ít được nói, vì nó không hỏng cái gì cả: nợ gỡ. Một khi đã cắm vào, bỏ ra rất khó. Không phải vì kỹ thuật, mà vì mình đã trót tin vào nó, đã khoe với người nhà, đã xây thói quen dựa lên nó.

Bốn câu hỏi mình dùng trước khi thêm bất cứ mắt xích nào

Sau đêm 3 giờ 14 phút đó, mình không đi tối ưu độ nhạy cảm. Mình làm chuyện kém hào nhoáng hơn nhiều: gỡ ra, và đặt ra một cái cổng để lần sau không tự lừa mình.

Cổng đó là bốn câu hỏi. Nếu câu nào trả lời không xong thì mắt xích chưa được thêm.

Một — nhu cầu này đã xảy ra thật bao nhiêu lần? Không phải "mình nghĩ nó có thể xảy ra", mà "nó đã làm mình phải đứng dậy, hoặc phải kiểm tra tay, ít nhất hai lần". Dưới hai lần là chưa có nhu cầu. Đó là một câu chuyện mình thấy hay ho khi đọc dạo.

Hai — nó chỉ nói, hay nó làm? Thông báo là read. Bật đèn, mở cửa, gửi mail cho khách, gọi điện — là write. Read sai thì mình khó chịu. Write sai thì mình đã gây ra một việc ngoài đời thật rồi. Nguyên tắc mình dùng: mọi mắt xích phải giải quyết bài toán của nó ở chế độ chỉ-nói trước. Chỉ khi nó đã chứng minh được mình đáng tin ở chế độ nói, mình mới cho nó quyền làm.* Và kể cả lúc đó, mọi hành động tự động vẫn phải có một cái van xả — một nút bấm, một câu trả lời, một cửa sổ vài giây để người thật chặn lại. Van xả không phải là biếng nhác trong thiết kế. Nó là thứ duy nhất khiến mình dám cho hệ thống tự chạy.

Ba — nếu nó chết lúc 3 giờ sáng, ai biết? Mình gọi cái này là "phép thử im lặng". Bất cứ thứ gì quan trọng đều phải có một nhịp tim: một dấu hiệu định kỳ mà sự vắng mặt của nó là tín hiệu báo động. Hệ thống im lặng không phải lúc nào cũng là hệ thống ổn. Đôi khi nó chỉ là hệ thống đã chết, và mình chưa biết.

Bốn — gỡ nó ra trong năm phút được không? Nếu không, mình chưa thêm. Không phải vì mình sẽ gỡ, mà vì một thứ mình không gỡ nổi là một thứ mình không thật sự sở hữu.

Nếu phải viết cái cổng đó ra cho dễ hình dung, nó chỉ là một hàm ngắn thế này — pseudo-code minh hoạ, không phải nguồn triển khai:

# Pseudo-code minh hoạ — KHÔNG phải nguồn triển khai
def có_nên_thêm_mắt_xích(nhu_cầu, hệ_hiện_tại):
    if nhu_cầu.số_lần_xảy_ra_thật < 2:
        return "chưa, quan sát tiếp đã"

    if nhu_cầu.có_viết_ra_thế_giới_thật and not có_van_xả(nhu_cầu):
        return "chưa, phải có nút người thật chặn được"

    if not hệ_hiện_tại.đã_có_nhịp_tim_báo_chết():
        return "vá chỗ này trước — im lặng không có nghĩa là ổn"

    return "được, nhưng ghi lại ngày thêm và việc nó thay thế cái gì"

Cái dòng cuối là dòng mình thích nhất, vì nó buộc mình phải tự nhớ vì sao món đó tồn tại. Thứ không có lý do để tồn tại thì cũng không ai dám bỏ — và đó là cách một hệ thống phình ra mãi cho tới khi không ai còn hiểu nó nữa.

Cái bẫy này không chỉ nằm ở nhà

Mình nhận ra mình đang đọc đúng một câu chuyện ấy ở ngoài kia, chỉ là với áo khoác khác.

Dạo này mở feed lên là thấy mệnh đề đại ý: agentic AI cho doanh nghiệp nhỏ là thứ không thể không có. Mình hiểu vì sao nó bán được — nó biến một quyết định khó thành một việc phải làm. Nhưng nhìn từ góc cái hệ trông bé nhà mình, mệnh đề đó nghe giống hệt câu mình tự nói mỗi lần mở shop thiết bị ra. Thêm một agent vào một doanh nghiệp nhỏ không phải là thêm một nhân viên miễn phí. Nó là thêm một thứ phải cấu hình, phải cập nhật khi thế giới đổi, phải để mắt, và phải chịu trách nhiệm khi nó hành xử kỳ lạ. Đúng câu hỏi cũ, chỉ đổi đơn vị: nhu cầu này đã xảy ra thật chưa, hay chỉ đang được quảng cáo là sẽ xảy ra?

Cùng logic đó, mình thấy một chuyện rất đáng bàn đang nổi lên: câu hỏi "model rẻ hơn vài lần có đủ tốt cho việc này không?". Rất nhiều team đang mặc định đưa con đắt nhất vào mọi việc, rồi kêu chi phí cao. Trong khi câu hỏi thật không phải "cái nào mạnh nhất", mà là "việc này cần bậc nào". Phân bậc đúng cho từng việc là anh em sinh đôi của việc không thêm mắt xích thừa: cả hai đều là chọn đúng mức, không chọn mức tối đa. Mình không nói rẻ là tốt — mình nói cái thói mặc định dùng mức cao nhất cũng chính là cái thói mặc định thêm một cái nữa.

Rồi có một lớp chuyện mà trước đây mình không để ý, giờ thấy dính đúng vào chủ đề này: người ta bắt đầu thiết kế kênh giao tiếp riêng cho agent nói chuyện với agent, và kèm theo đó là các mô hình bảo mật cho kỷ nguyên có agent. Nghe thì xa, nhưng bản chất rất gần cái mình vừa trải: mỗi tuyến giao tiếp thêm vào là một mặt tiếp xúc thêm vào. Một agent trung gian nói chuyện với một agent khác tiện thật — cho tới khi mình nhận ra mình vừa tạo thêm một chỗ mà thông tin có thể đi lạc, hoặc một chỗ mà ai đó có thể nói thay mình.

Và tất nhiên, không thể không nhắc cái bẫy ngọt nhất của năm nay: agent giờ dựng được site và prototype trong một buổi chiều. Tốc độ đó là một món quà — mình dùng nó mỗi tuần. Nhưng nó cũng là thứ khiến việc "thêm một mắt xích nữa" trở nên rẻ đến mức mình không kịp hỏi câu nào cả. Prototype nhanh và hệ chạy bền là hai nghề khác nhau. Cái đầu tiên thưởng cho sự liều, cái thứ hai thưởng cho sự bớt lại.

Cái mình giữ lại sau cùng

Hệ trông bé của mình bây giờ ít hơn lúc cao điểm. Mình giữ đúng ba mắt xích ban đầu — nghe, báo, rung — và thêm đúng một cái nữa: một mắt xích cực nhỏ bật đèn hành lang mờ khi mình thật sự phải dậy. Mình cho nó vào vì nhu cầu đó xảy ra nhiều lần, mình biết chính xác nó sai kiểu gì, và nó không thể gây hậu quả gì ngoài việc đèn sáng hơn một chút. Có van xả. Gỡ ra trong hai phút.

Còn lại, mình bỏ. Và cái cảm giác bỏ được một thứ mình đã cài — nhẹ hơn nhiều so với cảm giác thêm được một thứ mới.

Mình không viết bài này để khuyên anh em dùng ít tự động hoá. Mình vẫn tin tự động hoá là chỗ tiền và chỗ thời gian nằm. Nhưng mình tin mục đích thật của nó không phải là làm giúp mình nhiều việc hơn, mà là làm mình bớt phải để ý. Và muốn bớt phải để ý, hệ phải nhỏ tới mức mình nắm hết trong đầu, và mỗi mắt xích phải đáng tin tới mức mình dám quay lưng lại ngủ tiếp.

Cái hệ báo động lúc 3 giờ sáng mà mình không tin thì đắt hơn một cái hệ tối giản mình tin, cho dù nó có ít tính năng hơn mười lần.

Vậy nên câu hỏi mình để lại cho anh em: trong hệ thống của anh em đang có mắt xích nào chỉ còn tồn tại vì "đã lỡ cài rồi"? Và nếu gỡ nó ra hôm nay, anh em có mất gì thật không — hay chỉ mất cảm giác yên tâm giả?

Mình đang dần tin rằng mắt xích đáng giữ nhất là mắt xích mình đã từng cân nhắc bỏ.

Một phần của chuỗi mổ xẻ kỹ thuật tại zeodavu.com/blog. Nếu thấy hữu ích, theo dõi [zeodavu.com](/blog) — mỗi bài là một thứ mình thật sự dùng, vấp, và sửa lại.