← Home

Blog

None Is Not an Error

Sep 12, 2026

search_player_id used to print a message and return None. Testing that meant checking two different things instead of one.

Flaky Isn't a Diagnosis

Sep 12, 2026

A test that fails once and a test that fails constantly look identical from a single CI run. Only one of them is actually flaky.

When the Mock Is Right and the API Isn't Anymore

Jul 25, 2026

A mocked test suite passed every run for months. The real API's response contract had changed, and nothing caught it.

The Test That Only Failed in CI, Never Locally

Jul 25, 2026

Same code, same test. The only thing different was the timezone the two machines were running in.

Where Exploratory Testing Earns Its Keep

Jul 15, 2026

Happy paths should be automated. Once that's done, here's specifically what's left for a person to do.

Why My AI-Generated Tests Kept Passing for the Wrong Reason

Jul 14, 2026

An AI-generated Playwright test passed every time, but it only checked what the page reported, not what the backend actually did.

When the Fix Works But Isn't the Fix

Jun 28, 2026

I added retry logic to a flaky Playwright suite and the tests went green. I thought I had fixed it. I hadn't.

Testing a LiveView App with Playwright: Fixing Navigation Timeouts

May 27, 2025

Playwright's default navigation behavior assumes a traditional page load. Phoenix LiveView doesn't work that way, and your test suite will tell you.

Don't automate everything

Aug 23, 2025

Breaking Playwright suites taught me to automate less and test smarter. What I actually do now to keep QA stable.