Common Problems

The questions QA teams actually search for.

Problem-first practical guides for engineering managers and QA leads.

Pipeline and automation results mockup

Direct answers to the things engineering managers and QA leads run into every week. Each one ends with where to take it next.

Diagnose root causes quickly
Apply fixes in execution order
Know when to escalate for support
Why are my Cypress (or Playwright) tests so flaky?

Flakiness almost never comes from the test runner itself. It comes from tests sharing state with the app: unseeded data, polluted databases, race conditions on async UI, or third-party APIs you don't control. The fix is to make every test fully self-sufficient — own its data, mock the network at the edge, and stop trusting time-based waits.

How I stabilise flaky suites
Why is my CI/CD pipeline so slow?

Most slow pipelines aren't slow because tests are slow. They're slow because nothing runs in parallel, the same artifacts get rebuilt every stage, and the slowest single test blocks the whole deploy. Sharding, caching dependencies properly, and splitting build vs test artefacts usually halves total runtime in the first week.

Pipeline optimisation
How do I run my end-to-end tests in parallel?

Parallelisation only works when your tests are isolated. Step one is making each test create and tear down its own data. Step two is sharding by file or by test-id across multiple runners. Step three is collecting results and merging reports so the team still sees one verdict, not ten.

Parallel test architecture
Why does my "same environment" still produce different test results?

"Same environment" is the biggest lie in QA. Different Node versions, OS-level locales, timezone settings, or one config file edited last sprint will silently change behaviour. Pinning everything declaratively with Docker, Terraform, or Ansible — and verifying it on every run — is the only way to make environments truly reproducible.

Watch the tutorial episode
Why does no one on the team maintain the test framework?

Frameworks die when one person owns them and that person leaves. The fix isn't more documentation — it's reducing the cognitive load. Conventions over configuration, page objects that read like English, and a CI signal so clear that a junior dev can fix a broken test on their first day. Maintainability is a design choice, not a wiki page.

Framework rebuilds
Should I use Playwright, Cypress, or Selenium?

It depends on what you ship and what your team already runs. Playwright is the strongest default in 2025: parallel, multi-browser, fast, and well-maintained. Cypress shines for component-level tests inside a single React/Vue app. Selenium still wins when you need legacy browser coverage or non-JS stacks. The wrong tool isn't the bottleneck — the wrong architecture is.

Talk through your stack
How many end-to-end tests should I have?

Far fewer than you think. End-to-end tests are slow, brittle, and expensive to maintain. They should cover critical user journeys only — the flows that, if broken, cost real money. Everything else belongs in faster, cheaper layers: integration tests against the API, unit tests for logic, contract tests for service boundaries.

Test pyramid review
How do I keep test data clean between runs?

The two reliable patterns are: a per-test database transaction that rolls back at teardown, or a per-test isolated tenant/account created via API. Shared seed data is a trap — it works on day one and silently corrupts results six months later when one team mutates a record another team relies on.

How I architect test data
How do I get test results into Slack or Jira?

Make the pipeline post directly. A Jenkinsfile or GitHub Actions step that calls Slack's incoming webhook on failure, with a one-line verdict, the failing test name, and links to artefacts and the JIRA ticket. The goal is that nobody has to open the CI tool to know what broke. The tutorial series shows the exact pattern.

Watch the tutorial
When should I mock external services vs use the real thing?

Mock at the edges of your system (third-party APIs, email providers, payment gateways), use the real thing for everything you own and control. Mocks lie when the real API changes. Real services are slow and unreliable in CI. The best rule of thumb: contract-test the boundary, then mock it confidently below.

Service architecture review
How do I handle authentication in automated tests?

Don't log in through the UI for every test — that's the slowest, flakiest possible path. Authenticate once via API, store the session token, and inject it into the browser before each test. Reserve actual UI login flow tests for the auth feature itself.

Setup that scales
How long should a CI pipeline take?

Under 10 minutes for the feedback loop developers care about (lint, unit, integration). Under 30 minutes for the full deploy-blocking suite, including E2E. If yours runs longer, the problem is rarely the tests — it's everything around them: cold caches, sequential stages, oversized Docker images, or a single bottleneck test no one wants to fix.

Pipeline audit

Stuck on something not listed here? Send your question.

Want one of these solved in your codebase?

Most of these problems get fixed faster in a 30-minute call than in three months of internal debate.

Book a 30-min call
QA by Rody

Quality is built into the pipeline.

© 2026 QA by Rody. All rights reserved.