The summary.
A SUITE NOBODY TRUSTS PROVIDES NOTHING WHILE CONSUMING EFFORT
Which is why flaky tests are more damaging than missing ones, and why suite duration and spurious failure rate are the figures that matter.
Never add retries to hide flakiness — a flaky test is frequently reporting a genuine race condition.
TEST AT THE LOWEST LEVEL THAT GIVES REAL CONFIDENCE
Push tests down. A handful of end-to-end journeys, not hundreds.
ASSERT BEHAVIOUR, NOT IMPLEMENTATION
Tests asserting implementation break on every refactor without finding defects, and over-mocking produces tests that verify the code calls what you wrote it to call.
FIXED DELAYS ARE THE MAIN CAUSE OF FRAGILE END-TO-END TESTS
Wait for the condition the next step needs, use selectors added for testing, and create test data through interfaces rather than the user journey.
USE REAL DATABASES IN INTEGRATION TESTS
Query behaviour, transactions and constraints cannot be verified against a substitute — and migrations run once in production and cannot be retried.
COVERAGE FINDS UNTESTED AREAS; IT IS NOT A TARGET
A suite with no assertions can reach high coverage. Mutation testing measures whether assertions actually verify anything.