agentsclimarketplace

Crash rate sla

Skill almasumdev/awesome-mobile-release-agent-skills/.github/skills/monitoring/crash-rate-sla

Agent skills for mobile release engineering: signing, versioning, store submissions, and rollouts.

Install
npx -y skills add almasumdev/awesome-mobile-release-agent-skills --skill crash-rate-sla

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Define a crash-rate SLO, alert on it, and use breaches as automatic rollback triggers. Use this when formalising release health policy.

SKILL.md

5.9 KB, as published. Nobody here has run it

Crash Rate SLA

Instructions

A crash-rate SLA turns "is this release healthy?" from a judgement call into a policy with numeric thresholds. Write it down, alert on it, and let the alert automate rollout decisions.

1. Pick the Right Metric

MetricDefinitionWhen to use
Crash-free sessionsSessions without a fatal crash / total sessionsPrimary SLO — sensitive to short sessions
Crash-free usersUsers with zero crashes in window / total usersSecondary — reflects user experience
ANR rate (Android)ANRs / sessionsMandatory on Android
App hangs (iOS)MetricKit hang rateComplement to crash-free

Choose crash-free sessions as the headline. Crash-free users is more forgiving and lags; sessions catches regressions fastest.

2. Target Numbers

Baseline for consumer apps:

  • Crash-free sessions ≥ 99.5% (7-day rolling, per platform).
  • Crash-free users ≥ 99.0%.
  • ANR rate ≤ 0.47% user-perceived (Google's bad behaviour threshold).

Adjust by app risk profile: payments/banking apps should target 99.8%+; casual games can accept 99.0% for novel features behind flags.

3. SLO Document

One page, checked into the repo at docs/release-slo.md:

# Release Health SLO

## Primary
- Crash-free sessions ≥ 99.5%, 7-day rolling, per platform.

## Secondary
- Crash-free users ≥ 99.0%.
- ANR rate ≤ 0.47% (Android).
- Cold start P95 regression ≤ 20% vs previous version.

## Breach Actions
- Any primary SLO < 99.0% for 30 min → PAGE on-call, halt rollout.
- Primary < 99.5% for 2 h → PAGE on-call.
- Secondary breach for 24 h → Slack #release, issue filed.

## Measurement
- Source: Firebase Crashlytics (cross-platform), Play Vitals (Android ANR).
- Scope: current production version only. Beta tracks tracked separately.

4. Instrument Correctly

  • Capture fatal exceptions only for the crash-free metric; non-fatals (e.g. Sentry breadcrumbs) are noise.
  • Exclude sessions under N seconds that crashed during app init if you separately track launch-crash rate — mixing them obscures trends.
  • Tag every event with app_version, build_number, device_tier, os_version, country.

5. Alert Wiring (Sentry)

Sentry Alerts UI or sentry-cli:

sentry-cli alerts create \
  --project mobile-app \
  --name "Crash-Free Sessions Breach" \
  --dataset sessions \
  --query 'release:1.4.2' \
  --aggregate 'crash_free_rate(session)' \
  --comparison '< 0.995' \
  --time-window 30m \
  --action pagerduty:release-oncall

6. Alert Wiring (Firebase Crashlytics + Cloud Functions)

// functions/index.js
exports.onCrashlyticsVelocity = functions.crashlytics.issue()
  .onVelocityAlert(async (issue) => {
    if (issue.appInfo.latestAppVersion !== currentReleaseVersion) return;
    await pagerduty.trigger({
      summary: `Velocity alert on ${issue.issueTitle}`,
      severity: 'critical',
      component: 'mobile-release',
    });
  });

Firebase's "velocity alert" fires when a single issue rises above a threshold share of sessions in a short window — often earlier than the aggregate SLO.

7. Automated Rollout Halt

Wire the alert action to a webhook that halts the Play rollout:

#!/usr/bin/env bash
# halt-rollout.sh — invoked by PagerDuty webhook on SLO breach
set -euo pipefail

cd "$(dirname "$0")/.."
bundle exec fastlane supply \
  --track production --rollout 0 \
  --skip_upload_aab true --skip_upload_metadata true \
  --json_key_data "$PLAY_SERVICE_ACCOUNT_JSON"

curl -X POST "$SLACK_WEBHOOK" \
  -d "{\"text\":\":rotating_light: Auto-halted Play rollout due to SLO breach\"}"

8. iOS Phased Release Halt

#!/usr/bin/env bash
JWT=$(./scripts/asc-jwt.sh)
ID=$(curl -s "https://api.appstoreconnect.apple.com/v1/appStoreVersions/$VERSION_ID/appStoreVersionPhasedRelease" \
  -H "Authorization: Bearer $JWT" | jq -r .data.id)
curl -X PATCH "https://api.appstoreconnect.apple.com/v1/appStoreVersionPhasedReleases/$ID" \
  -H "Authorization: Bearer $JWT" -H "Content-Type: application/json" \
  -d '{"data":{"type":"appStoreVersionPhasedReleases","id":"'"$ID"'",
       "attributes":{"phasedReleaseState":"PAUSED"}}}'

9. Error Budgets

Compute monthly error budget: budget_minutes = (1 - 0.995) × 30 × 24 × 60 ≈ 216 minutes of sub-SLO time per month. Track burn rate; sustained high burn rate justifies slowing feature velocity to invest in stability.

10. False Positives

Guard against:

  • SDK-side reporting outages (Crashlytics dropped events, Sentry throttling). Cross-verify with a second source before paging.
  • Low-traffic cohorts (new country rollout with 200 sessions a day). A 99.5% threshold on 200 sessions is statistical noise. Alert only when sessions > 10_000 in the window.
  • Known device bugs (a specific OEM-OS combo) that dominate new crashes but are not your code. Filter before alerting.

11. Anti-Patterns

  • Setting SLO based on peer app rumour rather than historical data.
  • Measuring crash-free across all versions — new release regressions get hidden by stable old versions.
  • No automated halt — relying on a human to see the page and act within minutes.
  • Tuning SLO down because alerts are noisy; fix the noise, keep the target.

12. Checklist

  • docs/release-slo.md written, reviewed, and agreed with product.
  • Primary and secondary metrics instrumented on both platforms.
  • Alerts configured with per-version filter and minimum sample size.
  • Automated halt script tested in staging.
  • Error budget tracked monthly; burn rate visible in dashboards.
  • On-call runbook includes the page-to-halt path step-by-step.
  • SLO reviewed quarterly as historical data matures.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.