Skip to content
cccskills
FreePublished on GitHub

incident-response

Handle production incidents — triage, mitigate, communicate, and write postmortems.

The English summary is being prepared. Showing the original description.

Works withStripe
See how to install

Files included (1)

  • SKILL.md3.6 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Incident Response

Handle production incidents systematically.

Severity Levels

LevelDefinitionResponse TimeExamples
SEV1Service down, all users affectedImmediateDatabase crash, DNS failure, auth broken
SEV2Major feature broken, many users affected< 30 minPayments failing, search not working
SEV3Minor feature broken, workaround exists< 4 hoursExport button broken, slow dashboard
SEV4Cosmetic or low-impact issueNext business dayTypo in UI, minor styling bug

Incident Workflow

1. Detect & Triage (first 5 minutes)

  • Acknowledge the incident — "I'm looking into this"
  • Determine severity level
  • Check monitoring dashboards (error rates, latency, status page)
  • Check recent deployments: git log --oneline -10 — was anything deployed recently?

2. Mitigate (next 15-30 minutes)

The goal is to stop the bleeding, not find the root cause.

Quick mitigations:

  • Rollback: git revert <commit> && deploy — fastest option if a deploy caused it
  • Feature flag: Disable the broken feature
  • Scale up: Add more instances if it's a capacity issue
  • Failover: Switch to backup/secondary if primary is down
  • Block traffic: Rate-limit or block specific abusive traffic

3. Communicate

Internal:

  • Open an incident channel (#incident-2026-04-10)
  • Post status updates every 15-30 minutes
  • Assign roles: Incident Commander, Communicator, Engineers

External:

  • Update status page
  • Send email/notification to affected users if the outage is extended
  • Be honest: "We're experiencing issues with X. We've identified the cause and are working on a fix."

4. Resolve

  • Deploy the fix
  • Verify the fix works in production (check metrics, not just absence of errors)
  • Close the incident channel with a summary

5. Postmortem (within 48 hours)

Write a blameless postmortem:

# Incident: Payments failing for Stripe webhook
**Date:** 2026-04-10
**Duration:** 45 minutes (14:30 — 15:15 UTC)
**Severity:** SEV2
**Impact:** ~200 users unable to complete purchases

## Timeline
- 14:30 — Alert fires: payment success rate drops to 20%
- 14:35 — On-call engineer acknowledges, begins investigation
- 14:40 — Identified: Stripe webhook endpoint returning 500
- 14:45 — Root cause: migration added NOT NULL column without default
- 14:50 — Fix deployed: added default value to migration
- 15:00 — Payment success rate recovering
- 15:15 — Metrics back to normal, incident closed

## Root Cause
Database migration #47 added a `currency` column with NOT NULL 
but no DEFAULT value. Existing rows were fine (backfilled), but 
new webhook events failed because the insert didn't include `currency`.

## What Went Well
- Alert fired within 5 minutes of the issue starting
- Rollback was considered but the fix was faster

## What Went Wrong
- Migration wasn't tested with live webhook payloads
- No staging test for the webhook flow

## Action Items
- [ ] Add webhook integration test to CI (@alice, due 2026-04-17)
- [ ] Require DEFAULT for all new NOT NULL columns in migration review (@bob)
- [ ] Add runbook for payment failures (@charlie, due 2026-04-14)

Tips

  • Rollback first, investigate later — speed matters more than elegance
  • The most recent deploy is the most likely cause
  • Don't assign blame in postmortems — focus on process improvements
  • Maintain a runbook for common failure modes
  • Practice incident response with game days before real incidents happen

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Use Cursor's browser aria snapshots to audit a page for accessibility issues — missing labels, broken tab order, contrast, and ARIA misuse.

The English summary is being prepared. Showing the original description.

0xAidan/polymarket-bot-test4Updated Sep 4, 2026

Add PostHog analytics to a web application, including event tracking, page views, feature flags, and session replay.

The English summary is being prepared. Showing the original description.

0xAidan/polymarket-bot-test4Updated Sep 4, 2026

Generate OpenAPI/Swagger documentation for an API, including endpoint schemas, request/response types, and interactive docs UI.

The English summary is being prepared. Showing the original description.

0xAidan/polymarket-bot-test4Updated Sep 4, 2026

Add authentication to a web application using NextAuth.js (Auth.js), including OAuth providers, session management, and protected routes.

The English summary is being prepared. Showing the original description.

0xAidan/polymarket-bot-test4Updated Sep 4, 2026

Dockerize an application with a production-ready Dockerfile, docker-compose setup, and .dockerignore.

The English summary is being prepared. Showing the original description.

0xAidan/polymarket-bot-test4Updated Sep 4, 2026

Set up Playwright end-to-end testing in a project, including test configuration, example tests, and CI integration.

The English summary is being prepared. Showing the original description.

0xAidan/polymarket-bot-test4Updated Sep 4, 2026

See all skills by 0xAidan

Report a problem with this skill