Sổ tay xử lý sự cố cho ứng dụng no-code: phát hiện, phân loại, phục hồi
Dùng sổ tay xử lý sự cố cho ứng dụng no-code này để phát hiện nhanh, phân loại tác động, rollback an toàn, truyền thông rõ ràng, và ngăn lỗi lặp lại.

Đây là runbook gì và khi nào dùng nó
Sự cố là bất kỳ vấn đề bất ngờ nào khiến người dùng không thể dùng app, làm app chậm đến mức khó chịu, hoặc đặt dữ liệu vào rủi ro. Với ứng dụng no-code, điều này có thể là lỗi đăng nhập đột ngột, màn hình vỡ sau thay đổi, automation nền ngừng chạy, lỗi API, hoặc các workflow “thành công” nhưng lặng lẽ ghi sai giá trị vào cơ sở dữ liệu.
Một runbook viết sẵn biến khoảnh khắc căng thẳng thành các hành động nhỏ, rõ ràng. Nó giảm bớt đoán mò, đẩy nhanh quyết định (ví dụ khi nào cần rollback), và giúp mọi người chia sẻ cùng thông tin. Hầu hết trì hoãn thời sự sự cố không phải do kỹ thuật mà do sự không chắc chắn: Có phải thật không? Ai đang lãnh đạo? Đã thay gì? Ta nói gì với người dùng?
Playbook này dành cho bất kỳ ai can thiệp vào app khi có sự cố: những người xây dựng thay đổi, chủ vận hành hoặc nền tảng quản lý triển khai và quyền, đội support nhận báo cáo đầu tiên, và chủ sản phẩm/kinh doanh đánh giá tác động và ưu tiên.
Nó được thiết kế nhẹ nhàng, kể cả cho các đội xây trên nền tảng như AppMaster nơi bạn có logic trực quan, service sinh tự động, và nhiều tùy chọn triển khai.
Nội dung bao quát vòng lặp sự cố đầy đủ: phát hiện và xác nhận sự cố thật, phân loại nhanh, ổn định và phục hồi (bao gồm quyết định rollback), truyền thông trong thời gian outage, sau đó làm một bản review ngắn sau sự cố để giảm khả năng tái diễn.
Nó không bao gồm thiết kế lại kiến trúc dài hạn, điều tra pháp chứng bảo mật sâu, hoặc thủ tục tuân thủ phức tạp. Nếu bạn xử lý dữ liệu có quy định hoặc hạ tầng quan trọng, hãy thêm các bước nghiêm ngặt hơn lên trên runbook này.
Trước khi mọi thứ hỏng: xác lập baseline và vai trò
Sự cố cảm giác hỗn độn khi bạn không biết “bình thường” trông như thế nào. Định nghĩa baseline để đội nhận ra vấn đề thật nhanh. Với app no-code, tín hiệu sớm thường đến từ kết hợp sức khỏe nền tảng, chỉ số kinh doanh, và con người.
Ghi lại các tín hiệu bạn sẽ theo dõi hàng ngày, không chỉ khi outage. Những thứ phổ biến gồm uptime, tỷ lệ lỗi, màn hình chậm, đăng nhập thất bại, thanh toán lỗi, và đột biến ticket support hoặc tin nhắn người dùng.
Định nghĩa mức độ (severity) bằng ngôn ngữ đơn giản để ai cũng dùng được:
- SEV1: Hầu hết người dùng không thể dùng app, hoặc tiền/bảo mật nằm trong rủi ro.
- SEV2: Một tính năng then chốt hỏng, nhưng có cách tạm khắc phục.
- SEV3: Lỗi nhỏ, phạm vi ít người, hoặc lỗi giao diện.
Đặt mục tiêu phản hồi để tạo đà. Ví dụ: thừa nhận trong 5 phút, đăng cập nhật đầu tiên trong 15 phút, và cố gắng ổn định trong 60 phút (dù sửa hoàn chỉnh có thể lâu hơn).
Quyết định vai trò trước khi cần. Ghi tên ai có quyền khai báo incident, ai lãnh đạo, và ai là dự phòng nếu người đó offline. Trong các đội AppMaster, thường là chủ phần Business Process, cộng một dự phòng có thể xử lý triển khai hoặc export.
Cuối cùng, giữ một nơi chung để ghi chú sự cố. Dùng timestamp cho mọi hành động (đã thay gì, khi nào, bởi ai) để bạn dựng lại câu chuyện sau này mà không đoán mò.
Phát hiện và xác nhận: có thật không và nặng thế nào
Xác nhận tác động trước khi bạn dán mắt vào dashboard. Hỏi một câu rõ ràng: ai không làm được gì ngay bây giờ? “Đội support không mở được ticket” hữu ích hơn “app chậm.” Nếu được, tái tạo vấn đề dùng cùng vai trò và thiết bị như người dùng bị ảnh hưởng.
Tiếp theo, đánh giá phạm vi. Là một tài khoản, một phân khúc khách, hay mọi người? Làm phân tách nhanh: vùng địa lý, loại tài khoản, web so với mobile, và một tính năng duy nhất so với toàn app. Trong công cụ no-code, cái gì đó có thể trông như global nhưng thực ra là rule permission hoặc một màn hình hỏng.
Rồi kiểm tra đã thay gì. Nhìn lại 1–2 giờ để tìm release, toggle config, chỉnh schema DB, hoặc nhập dữ liệu. Trên nền tảng như AppMaster, thay đổi Business Process, Data Model, hoặc auth có thể ảnh hưởng nhiều luồng cùng lúc, dù UI vẫn trông ổn.
Trước khi đổ lỗi cho app, loại trừ phụ thuộc bên ngoài. Nhà cung cấp email/SMS, thanh toán (ví dụ Stripe), và tích hợp (Telegram, AWS, API AI) có thể lỗi hoặc giới hạn tốc độ. Nếu app chỉ hỏng khi gửi tin nhắn hoặc thu tiền, nguyên nhân gốc có thể ở upstream.
Dùng checklist quyết định đơn giản:
- Monitor nếu tác động thấp và lỗi không tăng.
- Mitigate now nếu người dùng bị chặn tác vụ cốt lõi hoặc dữ liệu có rủi ro.
- Declare an incident nếu vấn đề lan rộng, nhạy thời gian, hoặc không rõ.
- Escalate nếu liên quan thanh toán, xác thực, hoặc dữ liệu production.
- Set a check-in time (ví dụ mỗi 15 phút) để đội không lan man.
Khi bạn phân loại severity và phạm vi, bạn có thể chuyển từ “có thật không?” sang “ta làm gì trước?” mà không đoán mò.
Quy trình phân loại (30 phút đầu)
Mở ngay một bản ghi incident. Đặt tiêu đề rõ ràng nêu tác động người dùng, không nêu nguyên nhân nghi ngờ (ví dụ “Thanh toán thất bại cho khách EU”). Ghi thời gian bắt đầu (alert đầu tiên hoặc báo cáo đầu tiên). Đây sẽ là nơi duy nhất cho quyết định, timestamp, và những gì đã thay.
Phân vai để công việc không chồng chéo. Dù trong đội nhỏ, gọi rõ người chịu trách nhiệm giảm sai sót khi căng thẳng cao. Ít nhất bạn cần:
- Incident lead: giữ trọng tâm, đặt ưu tiên, quyết định chứa hay rollback
- Fixer: điều tra và áp dụng thay đổi
- Comms: đăng cập nhật cho các bên liên quan và support
- Note taker: ghi lại hành động, thời gian và kết quả
Viết hai điều: những gì bạn biết chắc, và giả thuyết hiện tại. “Đã biết” có thể là: tỷ lệ lỗi tăng, một endpoint cụ thể fail, chỉ mobile bị ảnh hưởng. Giả thuyết có thể sai, nhưng nó nên hướng test tiếp theo. Cập nhật cả hai khi bạn biết thêm.
Khi mọi thứ chưa ổn định, đặt chu kỳ cập nhật 15 phút. Nếu không có gì thay đổi, nói vậy. Cập nhật đều đặn ngăn các cuộc thảo luận bên lề và tránh nhắn hỏi trùng lặp.
Chọn hành động containment đầu tiên. Mục tiêu là giảm hại nhanh, dù nguyên nhân gốc chưa rõ. Các bước thường thấy: tạm dừng background job, vô hiệu hóa feature flag rủi ro, giới hạn traffic đến một module, hoặc chuyển về cấu hình an toàn đã biết. Trên AppMaster, thường là tắt một flow trong Business Process Editor hoặc tạm ẩn đường dẫn UI gây lỗi.
Nếu containment không cải thiện chỉ số trong một chu kỳ, bắt đầu lập kế hoạch rollback song song.
Ổn định trước: chứa tác động
Khi xác nhận đây là sự cố thật, chuyển từ “tìm bug” sang “cầm máu.” Ổn định cho bạn thời gian. Nó cũng bảo vệ người dùng, doanh thu và dữ liệu trong khi điều tra.
Bắt đầu bằng thay đổi nhỏ nhất giảm thiệt hại. Containment thường nhanh hơn sửa hoàn chỉnh vì bạn có thể tắt tính năng mới, tạm dừng workflow, hoặc chặn đường vào rủi ro mà không cần build lại.
Nếu nghi ngờ dữ liệu bị hỏng, dừng ghi trước. Điều này có thể là tạm vô hiệu hóa form, tạm dừng automation cập nhật bản ghi, hoặc chặn endpoint API nhận cập nhật. Đọc dữ liệu xấu gây đau, nhưng ghi dữ liệu xấu sẽ nhân bản công việc dọn dẹp.
Nếu người dùng bị khóa, coi đăng nhập là ưu tiên hàng đầu. Kiểm tra cài đặt xác thực và luồng login trước mọi thứ khác. Mọi sửa khác sẽ chậm nếu người dùng (và đội của bạn) không truy cập được app.
Nếu app chậm hoặc timeout, giảm tải và loại bỏ các đường đắt. Tắt màn hình nặng, tạm dừng job nền, và vô hiệu hóa tích hợp mới làm tăng request. Trên AppMaster, containment có thể đơn giản như tắt một business process gây lỗi hoặc tạm bỏ hành động UI kích hoạt chuỗi tốn kém.
Giữ hành động có chủ ý và có ghi chép. Dưới áp lực, đội lặp lại bước hoặc đảo ngược sửa lỗi vô tình. Ghi lại mỗi thay đổi và kết quả.
Một trình tự ổn định đơn giản:
- Dừng ghi dữ liệu nếu có thể có tham nhũng, và xác nhận bản ghi mới không còn thay đổi.
- Vô hiệu hóa feature flag, automation, hoặc tích hợp mới nhất liên quan đến timeline.
- Bảo vệ truy cập: khôi phục đăng nhập và luồng session cho admin trước, rồi cho tất cả người dùng.
- Giảm tải bằng cách tạm dừng batch job và loại bỏ đường dùng chậm nhất.
- Ghi log mọi hành động với timestamp, chủ sở hữu, và hiệu ứng quan sát được.
Mục tiêu là “an toàn và sử dụng được,” không phải “đã giải quyết hoàn toàn.” Khi tác động đã được chứa, bạn có thể chẩn đoán bình tĩnh và chọn rollback hoặc sửa phù hợp.
Lựa chọn rollback và kiểm tra rủi ro
Khi có sự cố, tốc độ quan trọng, nhưng hành động an toàn thắng thế. Thông thường bạn có ba lựa chọn thực tế: rollback, ship một fix tiến lên, hoặc revert một phần (tắt một tính năng trong khi giữ phần còn lại).
Trước tiên, rõ rollback trong môi trường bạn nghĩa là gì. Có thể là deploy phiên bản trước, revert một thay đổi config, hoặc khôi phục trạng thái database. Trên nền tảng như AppMaster, một “version” có thể bao gồm logic backend, UI web, bản build mobile, và các thiết lập môi trường.
Dùng các kiểm tra rủi ro sau để quyết định rollback có an toàn không:
- Thay đổi schema database: rollback có thể fail nếu phiên bản cũ mong đợi bảng hoặc trường khác.
- Các ghi dữ liệu không thể đảo ngược: refund, thay đổi trạng thái, hoặc tin đã gửi không thể hồi lại.
- Job đang chờ và webhook: logic cũ có thể xử lý lại mục hoặc fail trên payload mới.
- Phụ thuộc bên ngoài: thay đổi hành vi payment, email/SMS, hoặc tích hợp Telegram.
Đặt quy tắc go/no-go đơn giản trước khi chạm vào gì. Chọn 2–3 chỉ số phải cải thiện trong 10–15 phút sau hành động, như tỷ lệ lỗi, đăng nhập thành công, hoàn tất thanh toán, hoặc độ trễ API. Nếu chúng không đi theo hướng tốt, dừng và đổi chiến lược.
Lên kế hoạch backout cho cả rollback. Biết cách undo nếu phiên bản cũ gây vấn đề mới: build nào sẽ redeploy, config nào cần áp lại, và ai phê duyệt thay đổi lần hai. Giữ một người chịu trách nhiệm cho quyết định “ship” cuối cùng để không đổi hướng giữa chừng.
Truyền thông trong khi sự cố
Im lặng làm sự cố tệ hơn. Dùng cách đơn giản, lặp lại để giữ mọi người biết thông tin trong khi đội điều tra.
Bắt đầu với cập nhật nội bộ. Nói với những người sẽ nhận câu hỏi trước và những người có thể gỡ nút thắt. Giữ ngắn và thực tế. Thông thường bạn cần:
- Support/CS: người dùng đang thấy gì và nói gì ngay bây giờ
- Sales/account: tài khoản nào bị ảnh hưởng và điều gì không hứa hẹn
- Builders/engineering: đã thay gì, đang rollback gì, ai đang xử lý
- Một contact exec: tác động, rủi ro, thời gian cập nhật tiếp theo
- Một người duyệt nội dung ngoại bộ
Với cập nhật ra bên ngoài, bám vào những gì biết. Tránh đoán nguyên nhân hoặc đổ lỗi nhà cung cấp. Người dùng chủ yếu cần ba thứ: xác nhận, phạm vi tác động, và khi nào có cập nhật tiếp theo.
Mẫu thông điệp đơn giản
Giữ một dòng trạng thái nhất quán qua các kênh:
- Status: Investigating | Identified | Mitigating | Monitoring | Resolved
- Impact: “Một số người dùng không thể đăng nhập” hoặc “Thanh toán thất bại cho đơn hàng mới”
- Workaround: “Thử lại trong 10 phút” hoặc “Dùng app mobile khi web đang lỗi” (chỉ nếu đúng)
- Next update: “Cập nhật tiếp lúc 14:30 UTC”
Nếu người dùng giận dữ, thừa nhận trước rồi cụ thể: “Chúng tôi biết checkout đang thất bại với một số khách. Chúng tôi đang rollback thay đổi vừa triển khai. Cập nhật tiếp trong 30 phút.” Đừng hứa deadline, tín dụng, hoặc sửa vĩnh viễn trong thời gian sự cố.
Resolved vs monitoring
Khai báo resolved chỉ khi triệu chứng chính biến mất và các kiểm tra then chốt sạch (login, luồng cốt lõi, tỷ lệ lỗi). Dùng monitoring khi bạn đã áp fix (ví dụ rollback hoặc khôi phục cấu hình) nhưng cần thời gian quan sát tái diễn. Luôn nêu bạn sẽ giám sát gì, trong bao lâu, và khi nào sẽ có cập nhật cuối.
Chẩn đoán nguyên nhân: kiểm tra nhanh để thu hẹp
Khi mọi thứ ổn định, chuyển từ dập lửa sang thu thập bộ thông tin nhỏ nhất giải thích triệu chứng. Mục tiêu không phải root cause hoàn hảo mà là nguyên nhân khả dĩ để hành động mà không làm tệ thêm sự cố.
Triệu chứng khác nhau chỉ ra các nghi vấn khác nhau. Trang chậm thường do truy vấn DB chậm, đột biến traffic, hoặc dịch vụ ngoài trễ. Timeout có thể do process bị treo, backend quá tải, hoặc tích hợp chờ lâu. Tăng lỗi hoặc retry thường quay về một thay đổi gần đây, input xấu, hoặc outage upstream.
Kiểm tra nhanh (15 phút)
Chạy một hành trình người dùng thật bằng tài khoản test bình thường. Đây thường là tín hiệu nhanh nhất vì chạm đến UI, logic, DB và tích hợp.
Tập trung vào vài kiểm tra:
- Tái tạo một hành trình: đăng nhập, thực hiện hành động chính, xác nhận kết quả.
- Đánh dấu bước chậm/failed: tải trang, gọi API, lưu DB, webhook.
- Kiểm tra dữ liệu gần đây: quét 20–50 bản ghi để tìm trùng, trường thiếu, hoặc tổng không đúng.
- Xác thực tích hợp: các cố gắng thanh toán gần đây (ví dụ Stripe), webhook giao hàng, và tin nhắn (email/SMS hoặc Telegram).
- Xác nhận ngữ cảnh thay đổi: cái gì được release, cấu hình, hoặc migrate ngay trước khi spike?
Nếu bạn dùng AppMaster, điều này thường liên quan rõ ràng tới một bước Business Process, thay đổi Data Designer, hoặc config triển khai.
Quyết định: giữ mitigation hay sửa tiến lên
Nếu kiểm tra nhanh chỉ ra thủ phạm rõ ràng, chọn bước an toàn: giữ mitigation hiện tại, hoặc áp một sửa nhỏ có tính bền vững. Chỉ gỡ giới hạn tốc độ, feature toggle, hoặc thủ thuật thủ công sau khi hành trình chính thành công hai lần và tỷ lệ lỗi ổn định vài phút.
Tình huống mẫu: release lỗi trong giờ hành chính
Lúc 10:15 sáng thứ Ba, đội deploy một thay đổi nhỏ tới portal khách trên AppMaster. Trong vài phút, người dùng thấy trang trắng sau khi đăng nhập và đơn hàng mới ngừng về.
Support nhận ba ticket cùng nội dung: “Đăng nhập được, nhưng portal không tải tiếp.” Đồng thời monitoring cho thấy spike lỗi 500 trên web app và giảm số cuộc gọi API thành công. Bạn coi là incident thật.
Incident lead xác nhận nhanh: thử đăng nhập test trên desktop và mobile, kiểm tra giờ deploy cuối cùng. Thời điểm khớp release, nên coi thay đổi mới là nghi vấn chính đến khi chứng minh ngược lại.
30 phút đầu có thể như sau:
- Contain: đặt portal vào chế độ bảo trì (hoặc tạm tắt feature flag liên quan) để ngăn người dùng tiếp tục chạm vào flow hỏng.
- Decide rollback: nếu sự cố bắt đầu ngay sau release và ảnh hưởng nhiều người, rollback trước.
- Communicate: đăng cập nhật nội bộ ngắn (cái gì hỏng, tác động, hành động hiện tại, thời gian cập nhật tiếp theo). Gửi thông điệp ngắn cho khách hàng rằng bạn biết và đang xử lý.
- Recover: redeploy phiên bản biết là tốt trước đó (hoặc revert module cụ thể). Thử lại đăng nhập, tải dashboard, và một hành động cốt lõi như “tạo ticket” hoặc “đặt hàng.”
- Monitor: theo dõi tỷ lệ lỗi, đăng nhập thành công, và số ticket support 10–15 phút trước khi tuyên bố ổn định.
Đến 10:40 sáng, lỗi về mức bình thường. Bạn tiếp tục quan sát chỉ số trong khi support xác nhận lượng ticket giảm.
Sau đó, đội làm review ngắn: cái gì phát hiện sớm (alert hay support), cái gì làm chậm (không có owner, bước rollback không rõ), và cần thay đổi gì. Cải tiến phổ biến là thêm checklist smoke-test cho ba luồng hàng đầu của portal và làm rollback thành bước một hành động có tài liệu.
Sai lầm thường gặp làm tình hình tệ hơn
Hầu hết sự cố tệ hơn vì một trong hai lý do: mọi người để hệ thống tiếp tục gây hại trong khi điều tra, hoặc họ thay quá nhiều thứ quá nhanh. Runbook này nhằm bảo vệ bạn khỏi cả hai.
Bẫy phổ biến là điều tra trong khi app vẫn ghi dữ liệu xấu. Nếu workflow lặp, tích hợp đăng bài trùng lặp, hoặc bug quyền cho phép người không đúng chỉnh bản ghi, hãy tạm dừng tiến trình gây lỗi trước. Trên AppMaster, có thể tắt một Business Process, vô hiệu hóa tích hợp module, hoặc tạm hạn chế truy cập để dừng sự lây lan.
Bẫy khác là “sửa bằng đoán.” Khi nhiều người click và thay đổi cài đặt, bạn mất timeline. Ngay cả sửa nhỏ cũng quan trọng trong incident. Đồng ý một người điều khiển, giữ change log đơn giản, và tránh chồng chéo chỉnh sửa trên các vấn đề chưa rõ.
Những sai lầm thường khiến outage kéo dài:
- Điều tra trước rồi mới chứa, cho phép ghi dữ liệu xấu hoặc hành động trùng lặp tiếp tục
- Thay nhiều thay đổi cùng lúc không có ghi chú, nên không biết cái nào giúp hay gây hại
- Chờ mới truyền thông, hoặc gửi cập nhật mơ hồ khiến nhiều câu hỏi hơn lòng tin
- Rollback mù quáng mà không kiểm tra trạng thái database và các job/ email/ webhook đang chờ
- Kết thúc incident mà không có bước xác minh rõ ràng
Truyền thông là một phần của phục hồi. Chia sẻ những gì biết, những gì chưa biết, và khi nào có cập nhật tiếp theo. “Chúng tôi đang rollback và sẽ xác nhận các event thanh toán đúng trong 15 phút” tốt hơn “Chúng tôi đang tìm hiểu.”
Đừng đóng incident chỉ vì lỗi dừng. Xác minh bằng checklist ngắn: các màn hình chính load, bản ghi mới lưu đúng, automation thiết yếu chạy một lần, và backlog (queue, retry, job định kỳ) đã được xử lý hoặc tạm dừng an toàn.
Checklist nhanh để chạy khi áp lực
Khi mọi thứ hỏng, đầu bạn sẽ cố làm mười việc cùng lúc. Dùng cái này để bình tĩnh, giữ an toàn cho người và dịch vụ, và khôi phục.
Đánh dấu phần này nơi đội thực sự thấy.
- Xác nhận là thật và đánh phạm vi (5 phút): Kiểm tra alert có khớp báo cáo người dùng không. Ghi cái gì hỏng (login, checkout, admin panel), ai bị ảnh hưởng, và từ khi nào. Nếu được, tái tạo trong session sạch (incognito hoặc tài khoản test).
Dành một phút để đặt tên chủ incident. Một người quyết định, mọi người còn lại hỗ trợ.
-
Ổn định và chứa (10 phút): Dừng chảy máu trước khi tìm root cause. Vô hiệu hóa đường rủi ro (feature toggle, banner tạm, pause queue) và test một hành trình end-to-end. Chọn hành trình quan trọng nhất cho doanh nghiệp, không phải dễ nhất để test.
-
Phục hồi dịch vụ (10–20 phút): Chọn bước an toàn: rollback về phiên bản biết là tốt, hoặc áp sửa tối thiểu. Trên nền tảng như AppMaster, có thể redeploy bản build trước hoặc revert thay đổi cuối, sau đó xác nhận tỷ lệ lỗi và thời gian phản hồi trở lại bình thường.
-
Truyền thông (liên tục): Đăng cập nhật ngắn với phần bị ảnh hưởng, người dùng nên làm gì, và thời gian cập nhật tiếp theo. Tóm tắt cho support một script hai câu để mọi người nói cùng một nội dung.
-
Kết thúc gọn gàng (trước khi quên): Ghi lại chuyện gì đã xảy ra, đã thay gì, và thời gian dịch vụ phục hồi. Giao các bước tiếp theo với chủ sở hữu và hạn chót (tweak monitoring, bổ sung test, dọn dẹp dữ liệu, sửa tiếp theo).
Sau sự cố: học hỏi, sửa, và ngăn tái diễn
Một incident chưa thật sự “xong” khi app chạy lại. Cách nhanh nhất giảm downtime tương lai là ghi lại chuyện đã xảy ra khi còn rõ, rồi biến bài học thành thay đổi nhỏ, thực tế.
Lên lịch review ngắn trong 2–5 ngày. Giữ vô trách nhiệm (blameless) và thực tế. Mục tiêu không phải tìm người chịu trách nhiệm mà là làm cho incident tiếp theo dễ xử lý hơn.
Viết một bản ghi để ai đó đọc vài tháng sau còn hiểu: người dùng thấy gì, khi nào phát hiện, bạn thử gì, cái gì hiệu quả, và khi nào dịch vụ hồi phục. Ghi nguyên nhân gốc nếu biết, và các yếu tố góp phần như thiếu alert, ownership không rõ, hoặc bước rollout gây rối.
Biến bài học thành task có chủ và hạn chót. Tập trung vào thay đổi nhỏ ngăn cùng lỗi:
- Đóng lỗ hổng monitoring (thêm một alert hoặc một check dashboard bắt được sớm hơn)
- Thêm guardrail (rule validate, rate limit, mặc định feature flag, bước phê duyệt)
- Cải thiện test cho vùng rủi ro (login, thanh toán, nhập dữ liệu, quyền)
- Cập nhật runbook với các bước chính xác bạn ước có
- Làm refresh đào tạo ngắn cho on-call hoặc chủ app
Chọn một biện pháp ngăn chặn cho mỗi incident, dù nhỏ. “Mọi thay đổi role cần reviewer thứ hai” hoặc “Migration dữ liệu phải chạy trước trên staging” có thể ngăn nhiều outage lặp lại.
Giữ runbook này cạnh quy trình build và release của bạn. Nếu bạn xây bằng AppMaster, ghi nơi mỗi app được deploy (AppMaster Cloud, AWS, Azure, Google Cloud, hoặc self-hosted), ai có thể redeploy nhanh, và ai có thể rollback. Nếu muốn một nơi duy nhất cho tài liệu đó, giữ nó bên cạnh ghi chú dự án AppMaster (appmaster.io) sẽ dễ tìm khi phút quan trọng.
Câu hỏi thường gặp
Sử dụng khi bất kỳ vấn đề bất ngờ nào chặn các tác vụ cốt lõi, khiến app chậm không dùng được, hoặc gây nguy cơ ghi dữ liệu sai/không an toàn. Nếu người dùng không thể đăng nhập, thanh toán thất bại, tự động hóa ngừng hoạt động, hoặc bản ghi bị ghi sai, coi đó là một incident và làm theo runbook.
Bắt đầu từ tác động với người dùng: ai không làm được gì ngay lúc này và từ khi nào. Sau đó tái tạo bằng cùng vai trò và thiết bị, và kiểm tra đó là một tài khoản, một phân khúc, hay mọi người bị ảnh hưởng — để bạn không đi nhầm hướng.
Khai báo SEV1 khi hầu hết người dùng bị chặn hoặc tiền/bảo mật/dữ liệu có nguy cơ. SEV2 khi một tính năng chính hỏng nhưng có cách tạm khắc phục. SEV3 cho các lỗi nhỏ hoặc phạm vi hẹp; quyết định nhanh quan trọng hơn là chính xác hoàn hảo.
Chọn một người làm incident lead để đưa ra quyết định cuối cùng, sau đó phân công một người sửa, một người chịu trách nhiệm truyền thông, và một người ghi chú để mọi người không chồng chéo hoặc thay đổi nhầm lẫn. Trong đội nhỏ, một người có thể kiêm hai vai, nhưng vai incident lead phải rõ ràng.
Containment là dừng thiệt hại nhanh, ngay cả khi nguyên nhân chưa rõ. Trên AppMaster, thường là tạm tắt một Business Process cụ thể, ẩn tạm một hành động UI gây lỗi, hoặc tạm dừng một automation đang lặp và ghi dữ liệu sai.
Rollback khi sự cố bắt đầu ngay sau một release và bạn có phiên bản biết chắc là hoạt động để khôi phục dịch vụ nhanh. Chọn sửa tiến lên (forward fix) chỉ khi bạn có thể thay đổi nhỏ, rủi ro thấp và xác minh nhanh mà không gây thêm downtime.
Rollback rủi ro nếu có thay đổi schema database, nếu đã có các ghi không thể hoàn tác (refund, thay đổi trạng thái, tin nhắn đã gửi), hoặc nếu các job/ webhook đang chờ xử lý có thể được xử lý lại bởi logic cũ. Nếu có điều đó, ưu tiên ổn định trước và xác nhận trạng thái dữ liệu cũ trước khi redeploy.
Ngừng các thao tác ghi trước nếu nghi có hỏng dữ liệu, vì ghi sai sẽ nhân bản công việc dọn dẹp. Thực tế là tắt form, tạm dừng automation cập nhật, hoặc chặn endpoint cập nhật cho đến khi bạn xác nhận các bản ghi mới không còn bị thay đổi sai lệch.
Gửi các cập nhật ngắn, mang tính sự thật theo lịch cố định: cái gì bị ảnh hưởng, bạn đang làm gì, và khi nào có cập nhật tiếp theo. Tránh đoán nguyên nhân hoặc đổ lỗi cho nhà cung cấp; người dùng và các bên liên quan cần rõ ràng và dự đoán được thông tin.
Gọi là resolved chỉ khi triệu chứng chính đã biến mất và các kiểm tra then chốt sạch (đăng nhập, luồng chính, tỷ lệ lỗi). Nếu bạn vừa sửa nhưng vẫn cần thời gian giám sát để đảm bảo không lặp lại, gọi là monitoring và nói rõ bạn đang theo dõi gì và trong bao lâu.


