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 - 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. - Review them regularly and don't hesitate to throw the ones which don't add value anymore. ([Sunk Cost Theory][1] ) [1]: https://en.m.wikipedia.org/wiki/Sunk_cost