Notes from shipping software that works.
Testing strategy, tooling and the human side of an always-on release pipeline, written from what we actually ship.
Flaky Playwright Tests: Five Root Causes and Fixes
Five root causes of flaky Playwright tests with code fixes: auto-wait limits, non-retrying assertions, brittle locators, network races, and hard sleeps.
Test Observability: Metrics Beyond Red and Green
Test observability goes beyond pass/fail results. Track flake rates, test duration trends, and retry patterns to identify CI bottlenecks and build trust.
How to Run Automated Tests in GitHub Actions
Run automated tests in GitHub Actions: triggers, caching, matrix builds, sharding, and failure artifacts, with copy-ready pytest, Jest, and Playwright jobs.
Exploratory Testing Charter: Template and Examples
Write exploratory testing charters that scope a session: a copy-ready charter template, worked examples, time-boxing, and the PROOF debrief that closes it.
pytest Fixtures: Scopes, Teardown, and Setup
pytest fixtures explained: scopes, conftest.py, yield teardown, parametrized fixtures, and factory patterns - with complete runnable examples for pytest 9.x.
Chaos Engineering for Testers: Getting Started
Chaos engineering for QA engineers: define steady state, write a hypothesis, and run a fault-injection experiment with Playwright and Toxiproxy.
Playwright vs Cypress vs Selenium: 2026 Edition
Playwright vs Cypress vs Selenium in 2026: browser architecture, parallelism costs, AI test features, and a framework pick by team and language.
How to Organize Regression Testing for Web Apps
Build a regression suite that scales for web apps: scope by change impact, tier by speed, split fast PR runs from nightly soaks, quarantine flaky tests.
Setting Up Playwright with TypeScript from Scratch
Set up Playwright with TypeScript step by step. Covers project creation, configuration, writing your first test, and adding GitHub Actions CI integration.
pytest Markers: Organize and Filter Your Tests
Use pytest markers to organize tests into groups and run specific subsets. Covers built-in markers, custom markers, and CLI filtering options.