~/blogsection live
$ qa open blog --topic all

//Blog

Dated, opinionated, first-person.

Tutorials, deep dives, tool verdicts, and real field notes from working QA engineers — across manual, API, accessibility, security, mobile, performance, AI, and automation.

>search the blog…⌘K
124
Articles
10
Topics
9
Series
8
Categories

Comparisons·14 June 2026 · 7 min read

Scripted vs exploratory testing: when each earns its place

Not a loyalty test — a scheduling one. Scripted proves the behaviour you already know to check; exploratory finds what nobody specified. Here's which to reach for, when, and how to blend them in one cycle.

manual-qaexploratory-testingtest-designcomparison
Comparisons·14 June 2026 · 6 min read

Manual vs automated testing: where the line actually falls

Not rivals fighting over the same budget — different jobs. Automation guards what you already know; manual testing judges what you don't. Draw the line wrong and you get a brittle suite and the important bugs still escaping.

test-managementautomationmanual-qacomparison
Comparisons·14 June 2026 · 6 min read

Regression vs retesting: the difference that bites in practice

Retesting confirms a fix works; regression checks the fix didn't break anything else. Plan them as one task and the 'we fixed it' build ships a brand-new bug. Here's the split, and how they combine after a fix.

manual-qaregressiontest-managementcomparison
Comparisons·14 June 2026 · 5 min read

Smoke vs sanity testing: what each actually buys you

Smoke asks 'is this build worth testing?'; sanity asks 'did this change work?' Both are quick gut-checks at different moments. Use them as gates before the real testing — and stop wasting a full pass on a dead build.

manual-qasmoke-testingtest-managementcomparison
Comparisons·14 June 2026 · 6 min read

Risk-based vs coverage-based test selection

Coverage-based testing tries to touch everything a little; risk-based testing concentrates on what matters a lot. Under a deadline — the normal condition — the default you pick decides whether the bug you miss is the costly one or the trivial one.

test-managementrisk-based-testingstrategycomparison
Comparisons·14 June 2026 · 6 min read

Black-box vs white-box vs grey-box: what testers actually use

The three 'box' terms are interview trivia until you use them right: they describe how much of the code you can see when designing a test, which decides what you'll catch. Most functional QA is quietly grey-box — here's why.

manual-qatest-designfundamentalscomparison
Comparisons·14 June 2026 · 7 min read

Centralized QA team vs embedded testers

Should testers sit in one QA team or inside product squads? An org-design choice, not a tooling one — it shapes when QA gets involved, how consistent the bar is, and whether testers grow as a craft. The trade is proximity vs consistency.

test-managementqa-teamprocesscomparison
Comparisons·14 June 2026 · 6 min read

BDD scenarios vs plain test cases: when Gherkin earns its keep

Given/When/Then isn't automatically better than a plain test case — it buys shared language with non-testers at the cost of ceremony. Whether that pays off depends on who actually reads and co-writes your tests.

test-managementbddtest-designcomparison
Comparisons·14 June 2026 · 6 min read

The test pyramid vs the testing trophy: where to put your effort

The pyramid says most tests should be unit tests; the trophy says integration deserves the bulk. They're really arguing about where bugs hide in modern apps. Let the shape follow your real escapes, not whose diagram you saw first.

automationtest-strategytest-pyramidcomparison
Tutorials·13 June 2026 · 7 min read

How to write test cases developers actually read

Test cases that get read are short, scannable, and written for the person who has to act on them. Here is the format I use.

manual-qatest-casesdocumentation
Tutorials·13 June 2026 · 9 min read

The 12 API bugs I check for first

A high-value checklist: the twelve API bugs that surface most often, from wrong status codes to idempotency failures.

api-testingchecklistbugs
Opinions·13 June 2026 · 7 min read

Why mobile bugs escape web-first QA teams

Web-first teams carry assumptions that quietly break on mobile — permissions, offline state, lifecycle, and updates.

mobile-testingopinion
Deep dives·13 June 2026 · 8 min read

p95 latency explained for QA engineers

What p95 actually means, why averages hide the bugs, and how to read a latency distribution as a tester.

performance-testinglatencymetrics
Tutorials·13 June 2026 · 9 min read

How I evaluate an AI chatbot before release

A practical evaluation pass for AI chat features: hallucinations, refusals, prompt injection, and the cases with no single right answer.

ai-testingllmevaluation
Field notes·13 June 2026 · 7 min read

How to test when requirements are unclear

A field-tested approach for testing a story when the acceptance criteria are vague, missing, or contradictory.

manual-qarequirements
Tutorials·13 June 2026 · 8 min read

API pagination, filtering, and sorting bugs

The specific bugs that hide in paginated, filtered, and sorted endpoints — off-by-one pages, unstable sorts, and filter leaks.

api-testingpaginationbugs
Tutorials·13 June 2026 · 8 min read

The password reset bugs I always test for

Password reset is a deceptively risky flow — token reuse, expiry, enumeration, and session handling all hide here.

security-testingauthbugs
Tutorials·13 June 2026 · 7 min read

My mobile smoke test before every release

A short, device-real smoke pass: permissions, offline, rotation, interruptions, and the update path.

mobile-testingchecklistrelease
Opinions·13 June 2026 · 7 min read

Why average response time lies

The average response time is the metric most likely to make a slow system look fine. Here is what to watch instead.

performance-testingmetricsopinion
Field notes·13 June 2026 · 8 min read

Risk-based testing when everything is urgent

How to prioritise testing when the timeline just got cut in half and everything is labelled critical.

test-managementrisk-basedprioritisation
Tutorials·13 June 2026 · 9 min read

How to review AI-written Playwright tests

AI writes plausible Playwright tests that pass for the wrong reasons. Here is the review checklist that catches them.

ai-testingplaywrightreview
Deep dives·13 June 2026 · 8 min read

IDOR explained for QA engineers

The most common serious web vulnerability is also the easiest for QA to catch: the app serves a record by ID without checking it is yours. Two accounts and a changed number find it.

security-testingauthidorbugs
Tutorials·13 June 2026 · 8 min read

How to test session expiry properly

A session that lives too long is a hole, one that survives logout defeats the point. Here is the session-expiry pass — idle, absolute, logout, reset, remember-me, and fixation.

security-testingauthsessionsbugs
Deep dives·13 June 2026 · 8 min read

API status codes testers should actually care about

Skip the full registry — learn the dozen status codes that carry real meaning, what each promises, and how to spot when the code and the body disagree.

api-testingstatus-codeshttp
Field notes·13 June 2026 · 8 min read

How I test an API before the UI is ready

The API ships weeks before the screen. Test it directly from the contract — the whole bad-input, auth, and edge class is open at the API and invisible once the UI hides it.

api-testingshift-leftprocess
Tutorials·13 June 2026 · 8 min read

Push notification testing: what usually goes wrong

Notifications behave differently foregrounded, backgrounded, and killed — and deep-link to the wrong place when they arrive. The killed-app cold start is where it breaks.

mobile-testingnotificationsbugs
Tutorials·13 June 2026 · 8 min read

Offline mode bugs every mobile tester should check

The interesting offline bugs are in the transitions, not the offline state: double-submits on reconnect, in-flight requests that die, optimistic UI that never rolls back.

mobile-testingofflinebugs
Tutorials·13 June 2026 · 7 min read

How to report bugs developers can fix quickly

A bug report exists to get the bug fixed. Specific title, minimal repro steps, explicit expected-vs-actual, evidence, and environment — the format that prevents "can't reproduce".

manual-qabug-reportsdocumentation
Tutorials·13 June 2026 · 8 min read

Screen reader testing without pretending to be an expert

Catch the blatant screen-reader failures in fifteen minutes with the reader already on your machine — meaningful names, sensible images, labelled fields, announced changes.

accessibilityscreen-readera11y
Tutorials·13 June 2026 · 8 min read

How to test forms for accessibility

Forms break accessibility hardest — labels, required state, announced errors, focus management, and keyboard-operable custom widgets. The form-specific pass.

accessibilityformsa11y
Deep dives·13 June 2026 · 8 min read

Load testing is not the same as performance testing

Load testing is one type of performance test, not the whole thing. A single user can have a performance bug. Match the test (load/stress/spike/soak) to the risk.

performance-testingload-testingconcepts
Tutorials·13 June 2026 · 8 min read

How to write a test strategy people actually use

A test strategy is a short set of project-specific decisions, not a generic thirty-page document. Scope, risk, levels, automation split, data, ownership, and what "done" means.

test-managementstrategyprocess
Opinions·13 June 2026 · 7 min read

Should QA engineers learn to code? A practical answer

Not yes or no — which coding and for what. Reading code and light scripting help every tester; automation is where the roles are. Coding extends testing, doesn't replace the judgement.

careerautomationskills
Deep dives·13 June 2026 · 9 min read

Prompt injection testing for QA engineers

LLMs can't reliably separate instructions from data, so user input can hijack the model. Direct and indirect injection, what to check for, and how to report it QA-safe.

ai-testingsecurity-testingprompt-injectionllm
Tutorials·13 June 2026 · 8 min read

What QA should log when testing AI features

A screenshot isn't a repro when outputs vary. Capture the full assembled prompt, retrieved context, model version, and parameters so an AI bug is actually reproducible.

ai-testingobservabilityllm
Case studies·13 June 2026 · 7 min read

The checkout bug that passed every happy-path test

Every checkout test was green, but combining two discounts and a gift card drove the total negative — and issued credit. A case study in testing invariants, not just features.

case-studytest-designe-commercebugs
Case studies·13 June 2026 · 8 min read

The API pagination bug that looked like a frontend issue

Items vanished and duplicated on scroll; the frontend took the blame for two sprints. The cause was an unstable API sort over a non-unique key. Follow the symptom down the stack.

case-studyapi-testingdebuggingbugs
Case studies·13 June 2026 · 7 min read

How a missing negative test caused a production incident

A negative quantity on a "remove stock" action inflated inventory and caused overselling. The feature worked; the absent negative test did not. Test the negative space at the endpoint.

case-studytest-designnegative-testingbugs
Case studies·13 June 2026 · 7 min read

The accessibility issue nobody noticed with a mouse

A custom dropdown worked for everyone who tested it — because everyone used a mouse. Keyboard users hit a dead end on a required field. The cheapest check would have caught it.

case-studyaccessibilitya11ybugs
Case studies·13 June 2026 · 8 min read

The mobile bug we missed because we only tested on Wi-Fi

On office Wi-Fi the payment flow was flawless; on cellular it double-charged. A client timeout shorter than real latency plus no idempotency, hidden by never testing a slow network.

case-studymobile-testingnetworkbugs
Tutorials·13 June 2026 · 7 min read

A one-hour exploratory test session template

A charter-driven, time-boxed template for exploratory testing: 5 minutes to charter, 35 to test, 10 to debrief — and notes someone can read.

manual-testingexploratory-testingtemplatetest-charter
Deep dives·13 June 2026 · 8 min read

Focus order bugs: small issue, big user impact

Focus order is the route a keyboard user takes through your page. When it's wrong the page looks perfect and becomes unusable — and scans don't catch it.

accessibilitya11ykeyboard-testingfocus-management
Deep dives·13 June 2026 · 10 min read

OWASP Top 10 for testers, not hackers

The OWASP Top 10 translated for QA: what each category means for flows you already test, and the one check you can run without being a pentester.

security-testingowaspchecklistauth
Tutorials·13 June 2026 · 8 min read

MFA testing checklist for QA teams

The full multi-factor auth test surface: bypass, wrong/expired/reused codes, brute-force lockout, recovery, and the usability cases most teams skip.

security-testingmfaauthenticationchecklist
Deep dives·13 June 2026 · 9 min read

Testing app updates without breaking existing users

QA fresh-installs; real users upgrade in place over old data. Test the upgrade path — schema migrations, stored settings, sessions, multi-version jumps.

mobile-testingapp-updatesmigrationregression
Tutorials·13 June 2026 · 8 min read

The performance smoke test I'd run before release

Not a full load test — a fast, fixed, repeatable check on a few critical endpoints, compared to baseline, that catches gross regressions before sign-off.

performance-testingsmoke-testreleasechecklist
Deep dives·13 June 2026 · 8 min read

Release readiness is not just passed test cases

A green suite confirms only what you thought to check. Readiness adds coverage-vs-change, accepted risk, observability, and non-functional signals.

test-managementreleaserisksign-off
Tutorials·13 June 2026 · 9 min read

The hallucination test cases I run on AI features

Concrete test cases for AI hallucination — unanswerable questions, false premises, invented entities, citations — and how to judge answers with no 'correct' value.

ai-testingllmhallucinationtest-cases
Case studies·13 June 2026 · 7 min read

How one flaky test blocked trust in the whole suite

A single intermittent test trained a team to re-run, then ignore, then merge through every red build — until two real regressions slipped through.

case-studyflaky-testsautomationci
Case studies·13 June 2026 · 8 min read

What I learned from a failed regression cycle

Two days of regression, signed off green, and a regression shipped in the most-used feature. The tests weren't wrong — they were testing a stale picture.

case-studyregression-testingtest-managementmanual-testing
Case studies·13 June 2026 · 8 min read

How we reduced release testing from two days to four hours

Cut a dreaded two-day regression to an afternoon — and caught more — by weighting on risk, automating the stable core, and pruning dead cases.

case-studytest-managementregression-testingrelease
Field notes·13 June 2026 · 6 min read

What I check before saying a story is ready for QA

A 30-second readiness check before accepting a ticket into QA — testable criteria, defined edge cases, reachable build, known data — that replaces a day of back-and-forth.

manual-testingprocessdefinition-of-readychecklist
Deep dives·13 June 2026 · 8 min read

Test cases vs scenarios vs charters: the difference

Three different tools on a spectrum from prescribed to open: when to write a scripted case, a coverage scenario, or an exploratory charter.

manual-testingtest-casesexploratory-testingfundamentals
Field notes·13 June 2026 · 6 min read

The QA notes I keep during sprint testing

The working log that isn't a bug report or a test case — coverage, open questions, un-reproducible anomalies, painful setup — that makes a tester faster and more credible.

manual-testingprocessnote-takingsprint
Deep dives·13 June 2026 · 9 min read

The API test data problem nobody plans for

API suites fail on shared, stale, order-dependent data more than on wrong assertions. The own-your-data strategy — independent, unique, cleaned — that keeps them reliable.

api-testingtest-dataautomationfixtures
Tutorials·13 June 2026 · 8 min read

How to test rate limits without annoying everyone

Test the full rate-limit contract — enforcement, 429, Retry-After headers, recovery, scope — with a low configurable limit and a dedicated key, not by flooding shared staging.

api-testingrate-limitinghttptutorial
Tutorials·13 June 2026 · 9 min read

How to review Swagger/OpenAPI as a QA engineer

An OpenAPI spec is a ready-made test plan — every param and status code is a case — and its gaps (missing errors, unbounded fields, drift) predict the bugs.

api-testingopenapiswaggercontract
Comparisons·13 June 2026 · 8 min read

REST Assured vs Postman: how I use both

Not winner-takes-all — Postman for exploring and sharing, REST Assured for the durable automated suite in CI. The dividing line is lifespan and automation.

api-testingrest-assuredpostmancomparison
Tutorials·13 June 2026 · 9 min read

Accessibility test cases for login & checkout flows

Concrete, reusable accessibility cases for the two highest-consequence flows — keyboard completion, labels, announced errors, focus management — where a barrier blocks a core task.

accessibilitya11ytest-casesforms
Opinions·13 June 2026 · 8 min read

Accessibility in pull requests: what's realistic?

Automate the mechanical (axe/lint: alt, labels, contrast) and spot-check the obvious in a PR; route keyboard, focus, and screen-reader testing to QA on a real build.

accessibilitya11ypull-requestsprocess
Tutorials·13 June 2026 · 8 min read

API token bugs that show up in everyday testing

Treat the auth token as an input: test that it expires, dies on logout, can't cross scope or user, doesn't leak, and rejects tampering — all with your normal API client.

security-testingapi-testingtokensauth
Tutorials·13 June 2026 · 7 min read

How to write safe security bug reports

A security report has extra duties: private channel, impact over exploit, test data only, redacted evidence, clear severity — getting it fixed without making it worse.

security-testingbug-reportsprocessdisclosure
Deep dives·13 June 2026 · 9 min read

iOS vs Android testing differences QA should know

Fragmentation, permissions, system-back, lifecycle, hardware layout, and notifications diverge between platforms — so a pass on one isn't evidence for the other.

mobile-testingiosandroidcross-platform
Opinions·13 June 2026 · 8 min read

Real device vs emulator: when each is enough

Not a purity contest — emulators for functional/UI/CI, real devices for performance, sensors, network, and sign-off. Decide per test whether the check needs real hardware.

mobile-testingemulatorreal-devicestrategy
Tutorials·13 June 2026 · 8 min read

How to read a k6 result without guessing

Which k6 metrics matter and which mislead: check the error rate first, read p95/p99 not the average, confirm the load profile, and compare to a baseline.

performance-testingk6metricstutorial
Field notes·13 June 2026 · 7 min read

Performance bugs that look like functional bugs

Dead buttons, random logouts, missing data — often timing problems in disguise. The tell is intermittent and worse under load; check latency before debugging logic.

performance-testingbugsdebuggingfield-note
Deep dives·13 June 2026 · 8 min read

How to set realistic performance thresholds

Derive thresholds from user expectation, today's baseline, and business impact — set on p95/p99 with an error-rate gate, tiered by criticality — not a made-up 'under 2s'.

performance-testingthresholdsslostrategy
Tutorials·13 June 2026 · 6 min read

The QA weekly status report I'd actually send

A short, risk-first status format: lead with a one-line risk verdict, then what's at risk, key findings, light coverage numbers, and explicit asks — built to drive a decision.

test-managementreportingcommunicationtemplate
Field notes·13 June 2026 · 8 min read

How to say 'not ready for release' without drama

Frame it as risk for the owner to decide, not a veto: specific, reproduced, impact-led, with options attached — surfaced early, not as a sign-off-meeting ambush.

test-managementcommunicationreleaserisk
Tutorials·13 June 2026 · 6 min read

What good QA handover notes look like

Write an operating manual for the arriver, not a diary: current state, setup, known issues with status, gotchas, and pointers — so someone can take over without asking you.

test-managementdocumentationhandovertemplate
Career·13 June 2026 · 7 min read

The QA CV mistakes I see again and again

Tool-list-as-skills, duties not achievements, no quantified impact, generic and untailored — and the reframe that fixes them: prove you're good at testing, don't describe the job.

careercvresumejob-search
Career·13 June 2026 · 8 min read

What senior QA interviews really test

Senior interviews assess judgement, prioritisation, and influence — not deeper tool trivia. Prep risk-based reasoning, trade-off thinking, and stories of influencing decisions.

careerinterviewsseniorjob-search
Career·13 June 2026 · 7 min read

How to talk about bugs you found in interviews (STAR)

Use STAR to keep a bug story focused on your judgement: brief Situation and Task, an Action with reasoning, and a Result with impact — and pick a bug that shows thinking, not luck.

careerinterviewsstar-methodcommunication
Deep dives·13 June 2026 · 9 min read

QA career paths: manual, automation, SDET, lead, manager

An honest map of QA's branches — deepening manual, automation, SDET, lead, manager — each rewarding different strengths, none 'up' from the others. Choose by what you like doing.

careercareer-pathssdetqa-lead
Tutorials·13 June 2026 · 8 min read

How to use Claude Code for QA without breaking your repo

Get the speed of an AI agent on your test repo without the mess: work on a branch, review every change like a junior's PR, and make tests fail first to catch assert-nothing tests.

ai-testingclaude-codeai-toolsautomation
Opinions·13 June 2026 · 8 min read

AI test case generation: where it helps and where it fails

AI covers the expected cases fast and misses the suspicion-driven ones that catch bugs. Division of labour: let it handle breadth of the predictable; you handle the unexpected.

ai-testingtest-casesai-toolsopinion
QA trends·13 June 2026 · 7 min read

What actually changed in QA in 2026

A dated June 2026 snapshot: AI became a normal tool and testing-AI a normal job; the fundamentals didn't budge; 'AI replaces QA' is still a slide.

qa-trendsindustryaiopinion
QA trends·13 June 2026 · 8 min read

AI's real impact on QA roles (beyond the hype)

A dated June 2026 take: AI is reshaping QA roles, not eliminating them — eating the mechanical middle, raising the value of judgement, and re-pricing which skills pay.

qa-trendscareeraiopinion
QA trends·13 June 2026 · 8 min read

Where shift-left actually landed

A dated June 2026 retrospective: shift-left landed as a sensible default oversold as a revolution — real early-bug wins, real damage where it meant 'delete QA'.

qa-trendsshift-leftprocessopinion
QA trends·13 June 2026 · 9 min read

The state of test automation tooling in 2026

A dated June 2026 landscape: web E2E consolidated, API stayed code-first+GUI, performance went lightweight, mobile stayed fragmented, and AI became an authoring feature not a category.

qa-trendsautomationtoolingopinion
Tutorials·10 May 2026 · 7 min read

Custom Cypress commands that actually pay off

Most teams over-abstract too early. Four custom commands are worth writing on every Cypress project — login, seed, intercept, visit. The rest can wait.

cypresstypescriptpatterns
Deep dives·2 May 2026 · 10 min read

How Cypress retry-ability really works

Cypress retries commands until they pass or time out — but only some commands, and only some of the time. Understanding which is the difference between solid tests and flaky ones.

cypressinternalsflaky-tests
Opinions·24 April 2026 · 6 min read

You probably don't need a Page Object Model

POM was a Selenium-era solution to a Selenium-era problem. In modern Cypress and Playwright, custom commands and locator helpers cover 90% of what POM was supposed to give you.

patternspage-object-modelcypress
Comparisons·15 April 2026 · 9 min read

Playwright vs Cypress in 2026: an honest comparison

After shipping production suites in both, here's the honest breakdown — where Playwright pulls ahead, where Cypress still wins, and the single factor that should actually decide it.

playwrightcypresscomparison
Tutorials·17 February 2026 · 9 min read

Playwright fixtures, explained without the React metaphors

Most explanations of Playwright fixtures lean on React-hook metaphors that miss the point. Fixtures are scoped factories. Here's what to do with them and the three every project should have.

playwrighttypescriptfixtures
Deep dives·10 February 2026 · 10 min read

How Playwright's auto-waiting actually works

Cypress retries commands; Playwright auto-waits on actionability. Same problem, different solution. Here's what Playwright is actually doing when you call .click().

playwrightinternalsflaky-tests
Opinions·6 February 2026 · 7 min read

Stop writing BDD tests you don't actually need

Cucumber and Gherkin make sense when non-technical stakeholders write tests. They don't make sense when engineers write tests for engineers. Here's the pragmatic test: who actually reads your tests?

bddcucumberpatterns
Opinions·3 February 2026 · 7 min read

data-testid isn't a test smell. Brittle tests are.

There's a take going around that data-testid 'couples tests to implementation.' It's exactly backwards — data-testid is the only selector explicitly decoupled from implementation.

cypressplaywrightselectors
Comparisons·30 January 2026 · 8 min read

Vitest vs Jest in 2026: I'd pick Vitest

The unit-test-runner version of the Playwright vs Cypress post. I've shipped both in production. If I were starting fresh today, Vitest. Here's why, with real numbers.

vitestjestunit-testing
Opinions·27 January 2026 · 8 min read

The flaky-test tax no one talks about

Flaky tests don't cost you in CI minutes. They cost you in developer trust. And the compounding interest on lost trust is the most expensive tax in engineering.

flaky-testsci-cdculture
Comparisons·23 January 2026 · 9 min read

GitHub Actions vs CircleCI for test suites: my pick after running both

I've run production Cypress and Playwright suites in both GitHub Actions and CircleCI for the last year. Here's where each one pulls ahead, where each one tripped me up, and the single factor that should decide it.

github-actionscirclecici-cd
Career·20 January 2026 · 10 min read

The SDET interview loop, decoded

The SDET interview loop is four rounds in a trench coat: live coding, system design, framework selection, behavioural. Each round tests something different. Here's what each one is actually looking for.

careerinterviewssdet
Career·13 January 2026 · 9 min read

From SDET to QA Lead: the shift no one warns you about

The transition from SDET to QA Lead is brutal in a way the title doesn't telegraph. You stop being measured on what you ship and start being measured on what your team ships.

careerleadershipqa-lead
Tutorials·30 December 2025 · 10 min read

Using Claude and Copilot for test writing: a practical playbook

The practical playbook for AI-assisted test writing in 2026. The prompts that work, the prompts that don't, and the human-in-the-loop checkpoints that keep AI from writing tests that pass for the wrong reasons.

aiclaudecopilotworkflow
Tutorials·23 December 2025 · 9 min read

Adding accessibility tests with axe — a practical walkthrough

axe-core is the engine behind most accessibility testing in 2026 — and it's surprisingly approachable. Here's a practical walkthrough of integrating axe with Playwright, what it catches, and what it misses.

accessibilityaxeplaywrighta11y
Opinions·16 December 2025 · 7 min read

Your Lighthouse score isn't an accessibility test

A 100 Lighthouse accessibility score doesn't mean your site is accessible. The score is a smoke alarm — useful, but not a test. Here's what it actually measures, and what you still need to check manually.

accessibilitylighthousea11y
Opinions·12 December 2025 · 8 min read

The test pyramid is a vibe, not a rule

The Cohn test pyramid has been gospel since 2009. It was a useful heuristic for a 2009 monolith Java app. It's been quoted unchanged ever since — and most modern stacks don't fit its shape.

patternstest-pyramidopinionculture
Comparisons·9 December 2025 · 8 min read

Postman vs Insomnia vs Bruno in 2026: my pick for API testing

Three tools, three very different bets on what API testing should feel like. I've been comparing them for teams who want to move off ad-hoc curl scripts, and here's the pick.

api-testingpostmanbrunocomparison
Comparisons·2 December 2025 · 9 min read

Mobile testing in 2026: Appium, Detox, or Maestro?

Mobile test automation is the last frontier where 'just pick the obvious tool' doesn't apply. Three credible options in 2026 — each making a different bet. Here's the comparison.

mobile-testingappiumdetoxmaestro
Comparisons·18 November 2025 · 9 min read

Percy, Chromatic, Argos, Loki: visual regression in 2026

Four contenders for visual regression in 2026. The dollar cost is easy to compare; the review-fatigue cost is the one no one warns you about. Here's the comparison and the pick.

visual-regressionpercychromaticargos
Deep dives·11 November 2025 · 10 min read

Contract testing, explained without the Pact marketing

Contract testing is two things wearing one name: a model and a tool. The model is genuinely useful; the marketing for the tool oversells where it fits. Here's the model, separated from any vendor's pitch.

contract-testingpactapi-testingmicroservices
Opinions·4 November 2025 · 8 min read

Load tests in CI: the honest version

The pitch: 'run load tests on every PR.' The reality: you'll have flaky thresholds in three days and disabled tests in two weeks. Here's the four-tier strategy that actually survives.

performance-testingci-cdk6opinion
Deep dives·28 October 2025 · 9 min read

REST vs GraphQL testing: the actual differences

Most 'REST vs GraphQL' content is about API design. The testing perspective is different — query construction, schema-aware tooling, the N+1-shaped test bug, and why GraphQL flips the test pyramid.

api-testinggraphqlrestcomparison
Opinions·21 October 2025 · 9 min read

Manual exploratory testing isn't dead — it's underused

What automation replaced was regression checks — running the same path repeatedly. What it didn't replace, and can't replace, is human intuition trying to break a product.

manual-qaexploratory-testingopinionculture
Comparisons·14 October 2025 · 9 min read

k6 vs JMeter vs Gatling in 2026: what I'd pick for a modern stack

Three load-testing tools with three radically different ergonomics. JMeter has the 2004 XML/GUI legacy. Gatling stakes everything on Scala. k6 is the JavaScript-first newcomer. Here's the pick.

performance-testingk6jmetergatling