Testland
Browse all skills & agents

compatibility-budget

Pure-reference for deciding how large a compatibility matrix a team can afford and for publishing that commitment - defines tier-1 (must work; per-PR) vs tier-2 (must work; nightly) vs tier-3 (should work; pre-release) vs unsupported, with example budgets per product type (web / desktop / mobile / library), the matrix-size cost / coverage trade-off, and 'what we support' external templates. Use when a team must cap how many browser / OS / runtime combos it commits to, or must publish a support policy. This is the BUDGET and support-statement gate - for the traffic-share analysis that picks WHICH specific browsers belong in each tier use browser-matrix-strategy-reference; to execute the resulting matrix use the runners browser-matrix-runner (bundled engines) or selenium-grid-4-runner (self-hosted).

Install with skills.sh (any agent)

npx skills add testland/qa --skill compatibility-budget
View source

compatibility-budget

Overview

Without an explicit budget, "compatibility" creeps:

  • An engineer adds a Firefox-only fix; the team commits to Firefox forever.
  • A user complains about Internet Explorer; an engineer checks for IE; tests now must run on IE.
  • A new Chrome version breaks something; the team scrambles reactively.

A compatibility budget is a deliberate decision: which configurations the team commits to support, at what tier, with what consequences for unsupported configurations.

When to use

  • A new product launches; team needs to decide initial support.
  • An existing product's compatibility statement needs auditing.
  • A bug report comes in for an unsupported configuration; the team needs the documented stance.
  • A contractual obligation requires a compatibility statement.

How to use

  1. Pick the product type and copy the closest example budget from references/compatibility-budget-tiers.md.
  2. Assign each candidate browser / OS / runtime combo a tier - Tier 1, 2, 3, or unsupported (§1).
  3. Count combos per tier against the cost / coverage trade-off (§3); if CI cost exceeds budget, demote the lowest-value combos.
  4. Reconcile the Tier 1 list with user-agent telemetry (§6) so it matches real traffic.
  5. Publish the external "what we support" statement (§4).
  6. Schedule a quarterly review (§5) to promote or retire combos as versions evolve.

§1 - Tier model

Four tiers signal engineering investment, not user importance - a low-traffic configuration under contractual obligation may still be Tier 1:

  • Tier 1 - must work; per-PR smoke.
  • Tier 2 - must work; nightly full suite.
  • Tier 3 - should work; pre-release manual / weekly.
  • Unsupported - out of scope; bugs closed as "not supported."

Full definitions and CI cadence: references/compatibility-budget-tiers.md.

§2 - Example budget per product type

Worked starting budgets for a modern web app, an internal SaaS, an open-source library, and a mobile native app are tabulated in references/compatibility-budget-tiers.md. Copy the closest template and adjust each combo's tier against your telemetry (§6).

§3 - Cost / coverage trade-off

The budget directly affects CI cost:

CI cost = N_tier1 × per_PR_cost + N_tier2 × nightly_cost + N_tier3 × manual_review_cost

For a typical web product (5 Tier 1 configs + 2 Tier 2 + 4 Tier 3):

  • Tier 1: 5 × ~30 PRs/day × ~3 min = ~7.5 hours/day of CI runner time per PR-set.
  • Tier 2: 2 × 1 nightly × ~30 min = ~1 hour/day.
  • Tier 3: 4 × ~weekly × ~4 hours of manual time = manual budget.

A team's CI budget caps the total; the budget shapes the matrix.

§4 - "What we support" template

Publish externally (docs, marketing, README):

# Browser / OS support

We officially support:

## Tier 1 (per-release tested)
- Chrome (current + 1 prior major version)
- Edge (current)
- Safari (current + 1 prior major version)
- iOS Safari (current + 1 prior major version)
- Chrome on Android (current)

## Tier 2 (nightly tested; bugs fixed within 1 release)
- Firefox (current)

## Tier 3 (best-effort; bugs may take longer to fix)
- Firefox on Android
- Samsung Internet

## Unsupported
- Internet Explorer 11 - last supported v1.4.0 (EOL 2025-12-31).
- Chrome < version 100 - security vulnerabilities; not supported.
- Older mobile OSes - see mobile platform support table.

If you experience an issue on a Tier 3 or unsupported configuration,
please open an issue but understand the priority is lower.

The external statement sets user expectations; the internal tiers guide engineering.

§5 - Quarterly review

Browsers / OS / runtime versions evolve; the budget needs review:

TriggerAction
New major OS / browser releaseAdd to Tier 1; re-evaluate older.
Tier 3 configuration generates >5 issuesPromote to Tier 2 OR retire to unsupported.
Tier 1 configuration generates 0 issues / quarterConsider demoting (controversial - get team consensus).
Vendor announces EOLMove to unsupported on EOL date.

§6 - User-agent telemetry → budget

If the team has analytics on browser / OS distribution, use it:

Browser% of users (last 30d)Recommended tier
Chrome 13042%Tier 1
Chrome 12918%Tier 1
Safari 1815%Tier 1
iOS Safari 1810%Tier 1
Edge 1305%Tier 1 / 2
Firefox 1324%Tier 2
Chrome 128 and older3%Tier 3
Other (long tail)3%Tier 3

The 80/20 rule: if a configuration has <1% usage, Tier 3 or unsupported. If <0.1%, unsupported.

Worked example

A mid-size web app team caps its browser scope:

  • Tier 1 - 6 combos, per-PR smoke: Chrome current + prior, Edge current, Safari current + prior, iOS Safari current, Chrome on Android current. Telemetry (§6) shows these cover ~90% of traffic.
  • Tier 2 - 4 combos, nightly: Firefox current, Safari prior, iOS Safari prior, Samsung Internet.
  • Tier 3 - best-effort: Firefox on Android; anything below Chrome 100.
  • Unsupported: Internet Explorer; Chrome < 100.

Cost check (§3): 6 Tier 1 combos on per-PR smoke stay inside the CI budget while 4 Tier 2 combos run once nightly. The team publishes the §4 support statement listing the three tiers plus the unsupported set, then calendars the §5 quarterly review. Result: cross-browser scope is capped at 10 committed combos behind a documented, defensible support policy.

§7 - Compatibility statement vs accessibility commitment

These are different:

  • Compatibility: which configurations the product runs on.
  • Accessibility: which assistive technologies the product supports (per WCAG conformance - see wcag-compliance-reporter in the qa-accessibility plugin).

A user with a screen reader on Tier 1 Chrome should have Tier 1 accessibility experience. The two budgets compose.

Anti-patterns

Anti-patternWhy it failsFix
No documented budgetCompatibility creeps; surprise costs.Author per §2 + publish per §4.
Tier 1 = "everything we can test"CI cost explodes.Tier 1 should be the minimum-viable; promote consciously.
Unsupported = "we don't talk about it"Users assume support exists; complaints surprise.Explicit unsupported list (§4).
Quarterly review missedBudget stale; supports end-of-life software.Calendar invite (§5).
User-agent telemetry ignoredTier 1 list doesn't match reality.Use telemetry (§6).
Same budget across product variantsA B2B SaaS doesn't need the same browser support as a consumer site.Per-product budget (§2 examples).

Limitations

  • Telemetry availability. Without analytics, the budget is guesswork.
  • Vendor lifecycle visibility. Browser / OS EOL dates aren't always announced far in advance.
  • User population may differ from telemetry. Users hitting bug reports may use older browsers than the active user base.
  • "Best-effort" Tier 3 is squishy. Define the SLO explicitly (e.g., "Tier 3 bugs reviewed monthly; no SLA on fix").

References

  • references/compatibility-budget-tiers.md - detailed tier definitions and per-product-type example budgets.
  • browser-matrix-runner - the runner this budget configures.
  • os-matrix-runner - sibling for OS matrix.
  • mobile-device-matrix-toolkit (in the qa-mobile plugin) - mobile-specific equivalent.
  • wcag-compliance-reporter - accessibility compliance complement to the compatibility budget.

Compatibility budget - tier definitions and example budgets

View source (opens in new window)

Compatibility budget - tier definitions and example budgets

Detailed reference for compatibility-budget. The tier model below defines the four commitment levels; the per-product-type tables are starting templates to copy and adjust against your own telemetry.

Tier model

TierDefinitionCI cadence
Tier 1Must work; failure blocks releases.Per-PR smoke.
Tier 2Must work; failure blocks releases on detection.Nightly full suite.
Tier 3Should work; broken-here is a known issue.Pre-release manual / weekly.
UnsupportedExplicitly out of scope; bugs closed as "not supported."None.

The tier signals engineering investment, not user importance - a configuration with low traffic but contractual obligation may be Tier 1.

Example budget per product type

Modern web app

ConfigurationTier
Chrome (current + 1 prior)1
Edge (current)1
Safari (current + 1 prior)1
Firefox (current)2
iOS Safari (current + 1 prior)1
Chrome on Android (current)1
Firefox Android3
Samsung Internet3
Internet Explorerunsupported
< Chrome 100unsupported

Internal SaaS (controlled audience)

ConfigurationTier
Chrome (latest stable)1
Chrome (current - 1 stable)1
Edge (latest)2
Firefox3
Safari3
All othersunsupported

Open-source library

ConfigurationTier
Node 18, 20, 22 on Linux1
Node 18, 20, 22 on macOS2
Node 18, 20, 22 on Windows2
Bun (current)3
Deno (current)3
Older Node EOL versionsunsupported

Mobile native app

ConfigurationTier
iOS 17, 16 (current + 1 prior)1
iOS 152
iOS 143
< iOS 14unsupported
Android 14, 131
Android 122
Android 113
< Android 11unsupported

Related skills

browser-matrix-runner

Configures a CI matrix that runs the smoke / regression suite across multiple browsers per Playwright's three-engine support (Chromium, Firefox, WebKit / Safari) plus branded variants (chrome, msedge channels). Wires GitHub Actions / GitLab CI matrix syntax, captures per-browser screenshots, and aggregates per-browser pass/fail. Use when the product targets multiple browsers and the team wants automated cross-browser testing or browser-compatibility regression - e.g. a 'works in Chrome, broken in Safari' bug that needs Chrome / Firefox / Safari coverage.

browser-matrix-strategy-reference

Pure-reference for designing and reviewing a browser / OS / device test matrix from traffic data - the T1/T2/T3 tier-membership heuristics (T1 >=5% traffic, T2 1-5% or statutory, T3 <1% with customer demand), the traffic-share sources (own analytics, StatCounter, MDN browser-compat-data), a worked matrix template with tier-change log, and how to justify dropping a legacy browser (IE11, old iOS Safari). Use when designing an initial matrix, running a quarterly re-tier review, or making the case to drop a browser. This is the WHAT-to-test strategy reference - to execute the matrix use the runners browser-matrix-runner (bundled engines) or selenium-grid-4-runner (self-hosted); to cap and publish committed support tiers use compatibility-budget.

os-matrix-runner

Configures a CI matrix that runs tests across operating systems (Linux / macOS / Windows) and runtime versions (Node 18/20/22; Python 3.10/3.11/3.12; Java 17/21; .NET 6/8). Wires GitHub Actions matrix syntax, addresses OS-specific quirks (path separators, line endings, file permissions). Use when the product ships across OS / runtime combinations and the team needs continuous cross-platform coverage.

selenium-grid-4-runner

Author and operate Selenium Grid 4 - self-hosted distributed WebDriver. Covers the six-component architecture (Router / Distributor / Session Map / Event Bus / New Session Queue / Node), standalone vs hub-and-node modes, the Docker-image stack (selenium/standalone-chrome, selenium/hub, selenium/node-chrome), node registration, session-queue tuning, and observability. Use for self-hosted cross-browser testing when data residency or cost-control require an on-prem grid. This is the self-hosted execution RUNNER - for the zero-infra alternative use browser-matrix-runner (Playwright bundled engines); for managed cloud grids use browserstack-automate, saucelabs-automate, or lambdatest-automate; to decide WHICH browsers and tiers to run use browser-matrix-strategy-reference.