A Software Testing Strategy That Fits a Real Budget
Key takeaway
Automate the tests that run constantly and fail informatively: many fast unit tests, a moderate number of integration tests around your data and external boundaries, and a small set of end-to-end tests covering only the journeys that generate revenue. Everything else is cheaper to test by hand.
Testing debates usually become all-or-nothing — either full TDD or no automation at all. The useful question is narrower: which tests will pay for their own maintenance?
The shape that works
- Unit tests — many, fast, no I/O. They cover business rules, calculations, and edge cases, and they run in seconds on every commit.
- Integration tests — fewer, covering the boundaries: database queries, API contracts, authentication, and third-party clients. These catch the bugs unit tests structurally cannot.
- End-to-end tests — few, slow, covering only critical journeys: sign up, log in, pay, and the one workflow your business runs on.
- Manual and exploratory testing — for usability, visual correctness, and the creative attempts to break things that no script will produce.
Automate first where failure is expensive
- Anything involving money — pricing, discounts, tax, invoicing, refunds.
- Permissions and data isolation between tenants or users.
- Data integrity paths — anything that writes or migrates records.
- The bug you've now fixed twice. A regression test at that moment costs almost nothing.
Don't automate these
- UI that is still changing weekly — the tests will cost more than they catch.
- Genuinely rare administrative flows a human runs twice a year.
- Anything where the assertion is subjective, like visual design quality.
Flaky tests are worse than no tests
A suite that fails randomly trains the team to ignore red builds, which removes the entire value of having it. Quarantine flaky tests immediately, fix or delete them within the sprint, and treat a red main branch as a stop-the-line event. A small, trusted suite beats a large, ignored one every time.
What good looks like in numbers
Aim for a commit-stage suite that runs in under ten minutes, a change failure rate under 15%, and a falling share of defects found by customers rather than by your pipeline. Those three figures tell you more about testing health than any coverage percentage.