In general, strive to make UI tests more horizontal(end to end , not deep) and lower level tests more vertical(in depth).
In my automation journey, I learned few hard lessons in UI tests as below:
- Have fewer UI tests, as straightforward and simple.
- Don't cover same verifications in multiple tests or on multiple test levels.
- Let every test pass and fail for one and only one reason , focused tests.
- Don't try to rebuild complex application logic in tests otherwise they are prone to same bugs as application itself.
- Strive to be broad , not deep.
- If the flakiness is in general for most of the tests , then test code quality is low.
- Review them regularly and don't hesitate to throw the ones which don't add value anymore. (Sunk Cost Theory )
Add a metrics to every test to gain positive points for each time it's found a bug and negative points for each flaky failure.Add new tests for missed bugs at appropriate level.
Calculate the relative points for each test and discard the lowest ones periodically, that should make your test suite lean and sleek over a period of time.
In your situation, I would start with removing the UI tests which add lowest value in the overall stack .
If a UI test has been failing intermittently in every other release for no reason and hardly ever found an actual application issue , that's an good candidate for removal.