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.
75
94%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
A real browser matrix tiers browsers by traffic share, regulatory requirement, and team budget, then runs each tier at its own cadence - not "test on everything".
This skill is a pure reference consumed by the cloud-grid
skills
(browserstack-automate,
saucelabs-automate,
lambdatest-automate)
selenium-grid-4-runnerbrowser-matrix-runner
(bundled engines).Cadence per tier; exact traffic thresholds are defined once in the Tier-membership heuristic section below.
| Tier | Cadence | Coverage criterion | Example |
|---|---|---|---|
| T1 - Must pass every PR | Per-PR + main | Highest-traffic, must-not-break combos | Chrome current + Chrome-1 |
| T2 - Pre-release / nightly | Nightly + pre-release | Mid-traffic OR statutory (regulated industries) | Firefox / Safari / Edge current |
| T3 - Quarterly / on-demand | Quarterly | Long-tail with customer demand | Safari iOS 16 / IE11 / niche Android |
| Source | Use for |
|---|---|
| Your product's own analytics (GA / Plausible / etc.) | Definitive ground truth for your users |
| StatCounter (gs.statcounter.com) | Global / regional baseline when own data thin |
| MDN browser-compat-data (github.com/mdn/browser-compat-data) | Per-feature compatibility map - which versions support a given Web API |
| caniuse.com | Same purpose as MDN, easier UI |
| web-platform.org browser support (webstatus.dev) | Web Platform features cross-browser readiness |
| GitHub Actions browser-default versions (github.com/actions/runner-images) | What CI runners ship with by default |
Use your own analytics for traffic-share decisions; supplement with StatCounter when slicing geographies you don't have own data for.
A hypothetical SaaS B2B web app builds its first matrix from its own analytics:
Result: a 3-combo T1, 5-combo T2, 4-combo T3 matrix with a documented reason per row. The filled-in artifact is references/matrix-template.md.
The single authoritative traffic thresholds, referenced by the three-tier model and worked example above. A browser belongs in:
T1 if any of:
T2 if any of:
T3 if any of:
Out of scope if all of:
Where to test each tier:
| Tier | Recommended infrastructure | Reason |
|---|---|---|
| T1 | Bundled engines (Playwright + Chromium / Firefox / WebKit) on CI runner | Free; fast; sufficient for engine-level coverage |
| T2 | Cloud grid (BrowserStack / Sauce / LambdaTest) | Real devices + real OS; manageable cost at nightly cadence |
| T3 | Cloud grid on-demand | Real device + low-frequency; budget-friendly |
| Internal apps | Self-hosted Selenium Grid 4 + tunnels | Data residency or cost-control |
For very high-volume + cost-sensitive teams, self-hosted Selenium Grid 4 for T1 + cloud grid for T2 / T3 is the optimum mix.
A T1 entry "Chrome latest" can mean:
For T1 the bundled-engine path is usually sufficient; for T2 / T3, real-browser via cloud grid is the choice when the difference matters (some bugs are real-Chrome-only).
| Anti-pattern | Why it fails | Fix |
|---|---|---|
| "Test on all browsers" without tiering | Wastes resources; nothing actually gates the release | Tier explicitly |
| Tier membership never reviewed | Drift: T3 browsers stay in T3 long after traffic dies | Quarterly review |
| Same tests across all tiers | Some tests are environment-specific; running all everywhere is wasteful | Smoke at T1 / T2 / T3; full regression at T1 only |
| Counting Chromium-engine browsers separately (Chrome, Brave, Vivaldi, Opera) | Same engine; one test covers them | Group by engine; test the dominant browser only |
| IE11 in 2026 | Trivial traffic in nearly all contexts | Audit own analytics before committing |
| Mobile and desktop in same tier | Different breakage surfaces | Treat mobile as its own dimension |
| No tier-change log | "Why is Safari 14 in T2?" - nobody remembers | Always log tier changes |
browser-matrix-runner
(existing - bundled engines),
selenium-grid-4-runner,
browserstack-automate,
saucelabs-automate,
lambdatest-automate.