Test automation & CI
A regression suite a release manager can trust — coverage decided by risk, evidence on every failure, and a green gate that actually means something.
#What I build
E2E test automation
Playwright or Cypress with Page Object Model, fixtures, trace-on-retry, and four reporters.
CI/CD pipeline + wiring
Parallelized runs, artifact retention, required checks — a green badge that means something.
Flake stabilization
Quarantine lane, retry policy, isolation fixes, weekly triage — red becomes a real signal again.
Mobile real-device cert
End-to-end certification on real devices — the flows a simulator lies about.
Performance baselines
k6 load baselines on the critical path, with budgets wired into CI.
Accessibility audits
WCAG 2.2: keyboard, screen-reader semantics, contrast, reduced-motion — with a prioritized fix list.
#The discipline
Coverage follows a risk model, not whoever wrote tests last. Every failure ships with a trace and screenshot, so triage is reading evidence, not a scavenger hunt. And flake is treated as a first-class bug — because when red is noise, the team learns to ignore it, and the real regression sails through.
Trace-on-retry and artifacts are the default, not an afterthought — so a CI failure comes with everything you need to debug it:
export default defineConfig({
retries: process.env.CI ? 2 : 0,
use: { trace: "on-first-retry", screenshot: "only-on-failure" },
reporter: [["html"], ["junit", { outputFile: "results.xml" }], ["list"]],
projects: [ { name: "desktop" }, { name: "mobile" } ],
});