Cutting runner cost without cutting test coverage

Where minutes actually go: matrix sprawl, serial jobs that could fan out, and suites that never needed the heaviest runner class.

Runner bills often climb after a year of well-intentioned matrix growth. Every OS and Node version combination felt reasonable alone; together they dominate the invoice.

We map minutes per job family, then ask which combinations protect a real supported matrix versus which exist from habit. Shrink the merge matrix; keep the full matrix on a nightly or weekly lane.

Serial jobs that wait on unrelated work deserve fan-out. Independent lint, unit, and contract stages can run in parallel once artifact hand-offs are explicit.

Heavy runners should be reserved for integration suites that need them. Unit suites on overspecced machines are a quiet tax. Match class to job, not to the loudest request in chat.

Back to field notes