"Nasusunog ang production" ay isang impormal na paglalarawan ng kritikal na pagkasira kung saan ang mobile app ay bahagyang o ganap na hindi ma-access ng mga user. Karaniwang dahilan ay kinabibilangan ng hindi inaasahang edge case sa bagong release, pagbagsak ng cloud provider, error sa database migration, o DDoS attack. Ayon sa Google SRE Book, 80% ng kritikal na insidente ay dulot ng mga pagbabagong ginawa sa nakaraang 48 oras. Ang on-call na inhinyero ay dapat kumilos ayon sa malinaw na runbook: unang itigil ang pagdurugo, pagkatapos ay i-diagnose ang dahilan.
Mga pangunahing punto
Ang pariralang "nasusunog ang production" (production is on fire, everything is down) ay naglalarawan ng sitwasyon kung saan ang kapaligiran ng production ay hindi gumagana nang tama at ito ay nakaapekto sa mga user. Ang pagkasira ay maaaring magpakita bilang kumpletong hindi pag-access ng app (blank screen, error 502), bahagyang hindi pag-access (hindi gumagana ang module ng pagbabayad ngunit available ang ibang function), o pagbaba ng performance (napakatagal na pag-load). Ang severity ng insidente ay tinutukoy ng porsyento ng mga apektadong user at tagal ng pagkasira.
Ayon sa Atlassian Statuspage (2025), ang average downtime para sa mga mobile app noong 2024 ay 27 minuto bawat insidente. Ang pinakakaraniwang dahilan: regression ng code pagkatapos ng deploy (34%), pagbagsak ng cloud provider (22%), problema sa database (18%), error sa configuration (15%) at DDoS attack (11%). Pangunahing konklusyon: karamihan sa mga pagkasira ay nauugnay sa mga pagbabagong ginawa mismo ng team, hindi sa panlabas na mga salik.
Mahalagang pag-iba-ibahin ang crash (pagbagsak ng app sa panig ng kliyente) at backend outage (hindi accessible ang server). Ang crash ay karaniwang naaayos sa pamamagitan ng hotfix ng client code, habang ang backend outage sa pamamagitan ng pagbabago sa imprastraktura o redeploy ng serbisyo. Mga sukatan ng pagsubaybay: para sa kliyente — crash-free rate, para sa server — error rate 5xx at p95 latency. APM (Application Performance Monitoring) — Sentry, New Relic, Datadog — tumutulong upang mabilis na matukoy ang uri ng pagkasira.
Ang pare-parehong pag-uuri ng severity ay pundasyon ng mabilis na pagtugon. Kung wala ito, ang team ay nag-aaksaya ng oras sa pagtalakay kung gaano ito ka-apura sa halip na kumilos. Ang klasikong antas: P0 (critical) — ganap na hindi accessible ang app o tumutulo ang data ng user, oras ng pagtugon — kaagad; P1 (high) — hindi gumagana ang kritikal na functionality para sa 50%+ ng mga user, oras ng pagtugon — 15 minuto; P2 (medium) — hindi accessible ang hindi kritikal na functionality para sa ilang user, oras ng pagtugon — 1 oras.
Ang P0 ay nangangailangan ng agarang pag-eskalada: ang naka-duty na inhinyero ay humihinto sa anumang kasalukuyang trabaho at lumipat sa insidente. Kung pagkatapos ng 10 minuto ay hindi pa nalulutas ang problema — sasama ang tech lead. Kung pagkatapos ng 30 minuto — pag-eskalada sa engineering manager. Para sa mga insidenteng P0, pinapayagan ang paglabag sa anumang proseso: hotfix nang walang kumpletong code review, direct deploy sa production, pagbalewala sa mga patakaran ng branch protection. Emergency override ay dapat na napagkasunduan nang maaga sa antas ng team.
| Severity | Paglalarawan | Halimbawa | Oras ng pagtugon |
|---|---|---|---|
| P0 | Ganap na hindi accessible ang app o pagtagas ng data | Blank screen sa pagsisimula, SQL injection | Kaagad |
| P1 | Hindi gumagana ang pangunahing functionality para sa 50%+ | Hindi napoproseso ang pagbabayad, hindi gumagana ang login | 15 minuto |
| P2 | Hindi accessible ang hindi kritikal na functionality | Hindi naglo-load ang mga avatar, mabagal na paghahanap | 1 oras |
| P3 | Mga cosmetic bug na walang epekto sa mga user | Lumipat ang layout, typo sa text | Susunod na release |
Napakahalaga na huwag magkamali sa severity pababa. Ang P0 + P1 na nauuri bilang P2 ay humahantong sa naantalang pagtugon at pagtaas ng downtime. Panuntunan: kung may pagdududa — itakda ang P0. Ang Over-classification ay mas mabuti kaysa under-classification: mas mabuting magpatawag ng dagdag na meeting kaysa mawalan ng isang oras na oras ng pagbawi.
Timer starts: mula sa sandaling dumating ang alert o mensahe mula sa user. Ang unang 10 minuto — ang pinakamahalaga. Algorithm: 1) confirm the issue — tiyaking totoo ang problema (hindi maling alarma); 2) stop the bleeding — agad na bawasan ang epekto (rollback, feature toggle, harangan ang endpoint); 3) communicate — sumulat sa pangkalahatang channel na #incident ng status: ano ang nangyari, severity, ano ang ginagawa. Ang unang 10 minuto ay hindi ginugugol sa pagsusuri ng pangunahing dahilan.
Kasabay ng pagtigil ng pagdurugo, isang inhinyero ang nagsisimula ng diagnosis, ang pangalawa — komunikasyon. Mga channel ng komunikasyon: Slack #incident channel (para sa team), status page (para sa mga user), email/SMS na pag-eskalada (para sa pamamahala). Bawat 15 minuto — update ng status na may impormasyon: ano ang nalalaman, ano ang ginagawa, tinantyang oras ng pagbawi. Status page (StatuPage, Statuspal) ay nagpapakita ng uptime at kasaysayan ng insidente para sa panlabas na mga user.
Ang una at pinakamahalagang panuntunan: huwag subukang ayusin ang problema sa production. Kung ang bagong release ay naging sanhi ng pagkasira — rollback sa nakaraang matatag na bersyon. Kung ang pagkasira ay sanhi ng isang partikular na feature na hindi pinagana sa pamamagitan ng feature toggle — patayin lang ang toggle. Kung hindi available ang rollback o toggle — hotfix na may pinakamaliit na diff. Rollback — ang pinakaligtas na opsyon, dahil babalik tayo sa isang estado na gumana na.
Feature toggle (aka feature flag) — isang makapangyarihang tool para sa stop-the-bleeding nang walang deploy. Kung ang module ng pagbabayad ay bumagsak ngunit hindi pinagana sa pamamagitan ng toggle — hindi lang nakikita ng mga user ang button ng pagbabayad, hindi sila nakakakuha ng error screen. Ang toggle ay hindi nangangailangan ng paggawa ng build, hindi nangangailangan ng review ng tindahan, gumagana sa ilang segundo. Ang bawat kritikal na feature ay dapat nasa ilalim ng feature toggle na may kakayahang i-disable sa antas ng server (remote config). Feature flag — unang linya ng depensa.
Kung hindi posible ang rollback (halimbawa dahil sa hindi maibabalik na migration ng BD) at hindi available ang toggle — huling paraan: hotfix na may pinakamababang pag-aayos. Ang hotfix ay ginawa mula sa huling release tag, naglalaman lamang ng mga linyang kailangan upang alisin ang pagkasira at sumasailalim sa fast-track deploy (tingnan ang artikulong "Hotfix — agarang pag-aayos"). Golden rule: pagkatapos ng pagpapatatag, palaging gumawa ng root cause analysis, kahit na tila halata ang dahilan.
Pagkatapos ihinto ang pagdurugo (o parallel, kung pinapayagan ng bilang ng mga inhinyero) magsisimula ang diagnosis. Unang source — mga log. Ang sentralisadong pag-log (ELK, Grafana Loki, Datadog Logs) ay nagpapahintulot na mahanap ang error sa pamamagitan ng timestamp, ID ng user, o ID ng request. Mahalaga: ang mga log ay dapat naka-istruktura (JSON) upang mabilis na gumana ang grep. Structured logging — sapilitang kinakailangan para sa lahat ng serbisyo.
Ikalawang source — metrics. Ipinapakita ng Grafana, Datadog, New Relic kung kailan naganap ang spike ng mga error, sa anong mga endpoint, na may anong mga status code. Ang paghahambing ng metrics bago at pagkatapos ng deploy ay tumutulong upang i-localize ang problema sa isang partikular na serbisyo o endpoint. RED metrics (Rate, Errors, Duration) — pamantayan sa pagsubaybay ng mga microservice.
Ikatlong source — distributed tracing. Ipinapakita ng Jaeger, Zipkin, Datadog APM ang landas ng request sa pamamagitan ng mga microservice at tinutukoy kung saan eksaktong naganap ang pagkaantala o error. Ang tracing ay lalong kapaki-pakinabang sa mga cascade failure, kapag ang error sa isang serbisyo ay nagdudulot ng mga error sa lahat ng umaasang serbisyo. Trace ID ay dapat ipasa mula sa kliyente patungo sa lahat ng backend na serbisyo.
# Mabilis na halimbawa ng diagnostic gamit ang kubectl at log
# Ilista ang mga pod na may error
kubectl get pods --field-selector=status.phase!=Running
# Suriin ang log ng crash na pod
kubectl logs --previous pod/auth-service-7f4b9c5d6-abc12
# Maghanap ng mga error sa serbisyo sa nakaraang 30 minuto
kubectl logs deployment/api-gateway --since=30m
| grep "5[0-9][0-9]" | head -50
Mahalaga: huwag subukang i-diagnose ang dahilan bago ihinto ang pagdurugo. Kung 50% ng mga user ay nakakakita ng crash — rollback muna, pagkatapos ay analysis. Maliban kung: kung ang rollback ay mas tatagal kaysa sa direktang hotfix (halimbawa sa kaso ng hindi pagkakatugma ng data). Sa kasong ito, ang hotfix ay inilapat kaagad, at ang post-mortem ay isinasagawa pagkatapos ng pagpapatatag. Diagnosis before fix — mapanganib na pattern na nagpapataas ng downtime.
Post-mortem (tinatawag ding incident review) — isang nakabalangkas na pagsusuri ng insidente na isinasagawa 24-72 oras pagkatapos ng paglutas nito. Layunin: maunawaan kung bakit naganap ang pagkasira, bakit hindi ito nahuli ng pagsubaybay at mga pagsubok bago ang production, at kung ano ang babaguhin sa mga proseso upang maiwasan ang pag-ulit. Blameless culture — pangunahing prinsipyo: tinatalakay ng post-mortem ang mga proseso, tool at komunikasyon, hindi ang mga pagkakamali ng mga partikular na tao.
Istruktura ng dokumento ng post-mortem: timeline (kronolohiya ng mga pangyayari na may timestamp), impact (mga apektadong user, tagal, pagkalugi sa pananalapi), root cause (teknikal na pangunahing dahilan), detection (paano natuklasan, bakit hindi nahuli nang mas maaga), response (ano ang ginawa, ano ang maaaring nagawa nang mas mabilis), action items (mga kongkretong gawain na may responsableng tao at deadline). Action items ay dapat S.M.A.R.T.: specific, measurable, assignable, realistic, time-bound.
Mga tipikal na action items pagkatapos ng pagkasira ng production: magdagdag ng pagsubaybay at alert para sa metrik na tahimik; palawakin ang coverage ng pagsubok para sa hindi nakuha na kaso; magdagdag ng pahina sa runbook na may step-by-step na algorithm para sa katulad na sitwasyon; magsagawa ng training ng team para sa tool na ginamit nang hindi tama. Ang bawat action item ay isang konkretong pagbabago na nagbabawas ng posibilidad ng pag-ulit ng insidente.
Mga madalas itanong
Kung ang migration ay hindi maibabalik (drop column, rename table), hindi makakatulong ang rollback sa pamamagitan ng code. Sa kasong ito — feature toggle para sa bagong feature, pagkatapos hotfix na may pag-aayos sa bagong schema. Database migration ay dapat na maibabalik: bawat migration forward + backward.
P0 — hindi accessible ang app o tumutulo ang data. P1 — gumagana ang app, ngunit ang pangunahing function (pagbabayad, login, pag-load ng content) ay hindi gumagana sa karamihan ng mga user. Test: kung hindi mailunsad ng user ang app — P0. Kung kaya, ngunit may hindi gumagana — P1.
Oo, para sa bawat P0/P1 insidente ay gumawa ng hiwalay na Slack channel #incident-YYYY-MM-DD-paglalarawan. Ito ay naghihiwalay ng talakayan mula sa pangkalahatang channel at nagpapanatili ng kasaysayan para sa post-mortem. Incident channel ay awtomatikong nai-archive 7 araw pagkatapos ng pagsasara ng insidente.
Ang post-mortem ay sapilitan para sa lahat ng P0 insidente. Para sa P1 — sa pagpapasya ng tech lead, kung ang insidente ay maikli (wala pang 5 minuto) at ang dahilan ay trivial. Para sa P2 at pababa — hindi kinakailangan ang post-mortem, sapat na ang tala sa ticket. Bawat P0 ay sinusuri, kahit na ang dahilan ay alam na — ang pagsasanay sa proseso ay mas mahalaga kaysa sa pagsusuri mismo.
Ang naka-duty na inhinyero (responder), tech lead, product manager (para sa pagtatasa ng epekto), mga inhinyero na nagtrabaho sa mga katabing sistema. Facilitator — isang hiwalay na tao na hindi lumahok sa insidente — namumuno sa pulong at nagpapanatili ng blameless na tono.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din