A key area to consider while working on automation frameworks:
Complexity vs configurability.. and their inverse relation
To support more and more features, and make a solution scalable you’d want it to be more configurable
However as you make it configurable, it is bound to become more complex.
Sure using design patterns will ‘reduce’ the complexity, but inevitably will become complex as you make it configurable
There’s a balance you want to maintain between the two.
E.g. using libraries like cypress & robot you’d be able to create tests very quickly, but you loose control on certain configurability aspects, if you can live with them these are great
So it’s going to depend on your situation, But the principle remains..