Test Automation
Choosing (or Building) a Test Automation Framework Without Overengineering It
Both mistakes are more common than picking the right tool for boring, unglamorous reasons on the first try, and both cost roughly the same amount of time to recover from, just in different ways. One team ships slower because the tool fights the product. The other ships slower because their own abstraction layer fights everyone who has to learn it.
Start with what you're actually testing
A UI-heavy consumer app, an API-only backend, and a mobile app need genuinely different tools, and the "which framework is best" question only makes sense once that's answered, not before it. We've covered the UI-framework trade-offs directly in Playwright versus Cypress versus Selenium, and the mobile equivalent, simulators versus real devices, is really the same kind of decision wearing a different hat. Neither question has a universal answer. Both have a clear answer once you know what you're actually testing.
The abstraction layer trap
Wrapping every framework call in a custom in-house layer "for flexibility" sounds reasonable in a planning meeting. In practice it means every framework upgrade, every new hire, and every piece of documentation now has to go through your own translation layer instead of the tool's, and your custom layer has exactly the people on your team maintaining it, which is almost never as many people as maintain the underlying open-source tool you wrapped.
The sign I look for that a team over-invested here: a new engineer needs a half-day walkthrough just to write their first test. At that point they're not learning the testing tool anymore. They're learning your abstraction on top of it, which is a real cost with no corresponding benefit if the abstraction isn't solving a problem specific to your product.
What's actually worth building custom
Shared fixtures, a consistent data-seeding pattern, and CI reporting tuned to how your team actually reviews failures. These are worth the investment precisely because they're specific to you, not something an open-source maintainer somewhere else has already solved for the general case. The core test-running and assertion mechanics, the part every framework already does, almost never is.
The actual question
Not "what's the best framework." It's "what are we testing, and does the tool already do that well enough that building around it beats building our own version of it." Most of the time, for most teams, it does. If your team is stuck between tool options or already deep in a custom framework that's slowing new hires down, that's exactly the kind of audit we start with in a test automation engagement.