What makes automated tests/checks flakey?

Often very basically: Using mostly GUIs for automation.

GraphicalUserIntefaces, as they are made for humans, can be very unreliable for automation.
2 technically different (under the hood) versions of a GUI can look the same for humans. No problem for a human, but a machine.

I created this picture to show that:

I find “End 2 End” being done by GUI very wasteful. I know that is often a escape path for check automaters without much support for testability of the product.
Welcome to automation hell if you lack time to adapt the automation to the changes in the UI … I have been there.

In my current project we check most business logic via API. And the GUI part is more about “Does the UI works at all”, which includes the connection to the server.
The API parts needs around 1,5 hours and is quite stable in terms of check code calling the application. The GUI parts runs in around 10 minutes.

What makes automated checks flakey?
Often the lack of testability of the product and problematic approaches to automation.
Which finally also relates to a lack of support by the organisation.

insert here a rant about letting one progam interact with another in the role of simulated users unsupervised for hours

insert here a plea for “semi-automation”, using it as tool to support exploration