Follow a test pyramid: many fast unit tests, fewer integration tests, and a small number of end-to-end tests. For integration, test important seams (DB, messaging) with realistic dependencies (e.g., Testcontainers) and keep them parallelizable and stable. Avoid one giant “tests everything” suite.