Blog

Intermediate.

For working testers comfortable with the fundamentals who want to go deeper.

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 · 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 · 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
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
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 · 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
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
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
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
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
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
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
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
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
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·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·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
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