Running away from complex projects is something most of us do, this is mostly because of not knowing what you are supposed to do and it involves a lot of trial and error and if you just can't handle that then you just start searching for existing solutions and just settle.
Being interested in the most basic things (in terms of tech) has helped me build things based on assumptions and that helps me look for solutions faster since I kinda know what I'm looking at. It's not a perfect approach but it does help you speed up things.
Also, it's the only way I know that has helped me learn quite a few things, base them on assumptions about the implementation then go in detail to correct myself. The correction part is quite important.
A recent project which deals with creating a middle layer between react native and a pure javascript API to manipulate views has helped me talk to quite a few people I've envied over the years and honestly even if it doesn't end up being a successful project having worked on something so low level made me realise the complexity that has been abstracted from us.
This has significantly helped in improving my thinking process while writing code and I appreciate what lower level implementations have saved us from. If I had to deal with all of that when I first started, I wouldn't be a programmer, I'd be crying in the corner somewhere.
Not that I'm suddenly a guy with a higher IQ but i'm smarter than I was 2 weeks ago with regards to the domain I've been working with.
I guess at some point in your developer life, no matter what you do, (frontend, backend, etc) , getting down to writing implementations of things you've always taken for granted will help you get better at development.