Incident Response
Hva gjoer du kl 02:00 naar noe er nede? Denne guiden er skrevet for ett-persons drift.
Generell respons-prosedyre
heading.anchorLabel1. PUST — Ikke panikk. Brukerne overlever 10 minutter.2. DIAGNOSE — Hvilken komponent? (Railway/Supabase/Anthropic/Redis/iOS)3. SJEKK STATUS — Er det leverandoeren? (statussider)4. TILTAK — Foelg scenariet under5. VERIFISER — Test at fix fungerer (curl, app-test)6. KOMMUNISER — Hvis >30 min nedetid: post i support-kanalAlvorlighetsnivaaer
heading.anchorLabel| Nivaa | Beskrivelse | Eksempler | Responstid |
|---|---|---|---|
| P1 — Kritisk | Hele appen er nede eller data tapes | API nede, Supabase nede, alle brukere krasjer | Umiddelbart |
| P2 — Hoey | Kjernefunksjonalitet er brutt | AI stopper, sessions feiler, IAP feil | < 1 time |
| P3 — Medium | Degradert ytelse eller delfunksjon nede | Redis nede (treg, men fungerer), insights feiler | < 4 timer |
| P4 — Lav | Kosmetisk eller ikke-kritisk feil | UI-bug for faa brukere, logging-feil | Neste arbeidsdag |
Oppdagelseskanaler
heading.anchorLabel| Kanal | Hva den fanger | Responstid |
|---|---|---|
| Sentry e-post | App-crash, 5xx errors, queue failures | Minutter |
| Brukerklage | Alt Sentry ikke fanger (UX-bugs, tomme skjermer) | Timer/dager |
| Railway dashboard | Deploy failures, OOM, container restart | Sjekk manuelt |
| Supabase dashboard | DB-nedetid, connection pool full | Sjekk manuelt |
Scenario 1: API nede (Railway)
heading.anchorLabelSymptomer: iOS-app viser nettverksfeil. Ingen data laster.
Diagnose:
# Test health endpointcurl https://api.impulseai.app/api/v1/health
# Sjekk Railway dashboard# https://railway.app → im-api → Deployments → LogsTiltak:
| Aarsak | Handling |
|---|---|
| Siste deploy feilet | Rollback til forrige deploy i Railway (1 klikk) |
| OOM (out of memory) | Skaler opp RAM midlertidig i Railway settings |
| Henger (ingen respons) | Restart service i Railway dashboard |
| Railway selv nede | Vent. Sjekk status.railway.app |
Bruker-impact: Appen viser “Noe gikk galt”. Ingen datatap — alt er i Supabase.
Scenario 2: Supabase nede
heading.anchorLabelSymptomer: API returnerer 500. iOS-app viser feil. Auth fungerer ikke.
Diagnose:
# Sjekk Supabase status# https://status.supabase.com
# Sjekk dashboard# https://supabase.com/dashboard → Project → HealthTiltak:
| Aarsak | Handling |
|---|---|
| Supabase har nedetid | Vent. Sjekk statusside. De har 99.9% SLA. |
| Connection pool full | Restart API i Railway (frigjor connections) |
| Migrering feilet | pnpm db:reset lokalt for aa verifisere. Fiks SQL, deploy ny migrering. |
Bruker-impact: Alt stopper — auth, data, AI. Appen er ubrukelig til Supabase er tilbake.
Scenario 3: Anthropic API nede
heading.anchorLabelSymptomer: Impulser fanges OK, men klassifisering henger. Sessions faar ikke guidance. Check-ins har ingen assessment.
Diagnose:
# Sjekk Anthropic status# https://status.anthropic.com
# Sjekk Sentry for 529/503 errors# sentry.io → im-api → Issues → tag: queue
# Sjekk Railway logs for retries# Railway dashboard → Logs → soek "retryable"Tiltak:
| Aarsak | Handling |
|---|---|
| Anthropic har nedetid | Vent. BullMQ retrier automatisk (3 forsoek, 30s/60s/120s backoff) |
| Rate limited (429) | Vent. Retries haandterer det. Vedvarende: reduser concurrency i queue-config |
| API key ugyldig | Sjekk ANTHROPIC_API_KEY i Doppler (prd config) |
Bruker-impact: Graceful degradation innebygd. Brukere ser “AI midlertidig utilgjengelig”. Impulser lagres, klassifiseres naar AI er tilbake.
Scenario 4: Redis nede
heading.anchorLabelSymptomer: API fungerer men er treg (ingen cache). Nye impulser klassifiseres ikke (queue ned).
Diagnose:
# Sjekk Railway logs for Redis-feil# Railway dashboard → Logs → soek "Redis" eller "ECONNREFUSED"Tiltak:
| Aarsak | Handling |
|---|---|
| Redis container krasjet | Restart i Railway dashboard |
| Redis full (memory) | redis-cli FLUSHALL (toemmer cache + queues). Eller skaler opp. |
| API logger “Redis cache: UNAVAILABLE” | API degraderer til no-cache modus automatisk. Queues stopper. |
Bruker-impact: App fungerer men tregere. Nye AI-operasjoner henger til Redis er tilbake. Ingen datatap.
Scenario 5: iOS-app krasjer
heading.anchorLabelSymptomer: Sentry-alert med crash report.
Diagnose:
- Sentry:
sentry.io→ im-ios → Issues → nyeste crash - Les stack trace, breadcrumbs (siste tab-navigasjon), user context
Tiltak:
- Identifiser crash-type fra stack trace (fil + linje)
- Reproduser lokalt med samme bruker-kontekst (tier, datamengde)
- Fiks → TestFlight → verifiser
- Hasteoppdatering? → App Store “Expedited Review” (1-2 dager vs 1 uke)
Bruker-impact: Appen krasjer for beroerte brukere. Andre brukere er upavirket (med mindre universell crash).
Scenario 6: Subscription/IAP-feil
heading.anchorLabelSymptomer: Brukere betaler men faar ikke tilgang. Eller: gratisbrukere har Mastery-tilgang.
Diagnose:
# Sjekk App Store Connect → Subscriptions# Sjekk Supabase → profiles-tabell → subscription_tier for beroert bruker# Railway logs → soek "webhook" eller "subscription"Tiltak:
| Aarsak | Handling |
|---|---|
| Webhook ikke mottatt | Sjekk App Store Server Notifications URL i App Store Connect |
| Feil tier i DB | Manuell fix: UPDATE profiles SET subscription_tier = 'foundation' WHERE id = 'user-id' |
| StoreKit-feil | Sjekk Sentry for purchase.failed events |
Kommunikasjonsplan
heading.anchorLabel| Nedetid | Handling |
|---|---|
| < 10 min | Ingen ekstern kommunikasjon noedvendig |
| 10-30 min | Forbered melding, men vent |
| 30 min - 2 timer | Post oppdatering i support-kanal |
| > 2 timer | E-post til aktive brukere med status + forventet loesning |
Post-mortem prosess
heading.anchorLabelEtter enhver P1 eller P2 hendelse:
# Post-mortem: [Kort beskrivelse]
**Dato:** YYYY-MM-DD**Varighet:** HH:MM - HH:MM (X minutter)**Alvorlighet:** P1/P2**Beroerte brukere:** Antall / alle
## Tidslinje- HH:MM — Foerste symptom oppdaget- HH:MM — Diagnose startet- HH:MM — Rotaarsak identifisert- HH:MM — Fix deployet- HH:MM — Verifisert OK
## Rotaarsak[Hva gikk galt og hvorfor]
## Tiltak- [ ] Kortsiktig fix (det du gjorde)- [ ] Langsiktig fix (forhindre gjentakelse)- [ ] Monitorering-forbedring (fange det raskere)
## Laerdom[Hva laerte vi?]Regler
heading.anchorLabel- Ingen skyld — fokuser paa systemer, ikke personer
- Skriv innen 48 timer mens detaljene er ferske
- Lagre i repo —
docs/post-mortems/YYYY-MM-DD-kort-beskrivelse.md - Implementer tiltak — post-mortem uten tiltak er bortkastet tid
Nyttige lenker
heading.anchorLabel| Tjeneste | Dashboard | Statusside |
|---|---|---|
| Railway | railway.app | status.railway.app |
| Supabase | supabase.com/dashboard | status.supabase.com |
| Anthropic | console.anthropic.com | status.anthropic.com |
| Sentry | sentry.io | status.sentry.io |
| App Store Connect | appstoreconnect.apple.com | developer.apple.com/system-status |
| TelemetryDeck | dashboard.telemetrydeck.com | — |