While I agree in principle, a lot of the bloat is due to trying to have one codebase for a lot of different platforms.
This is generally a good ideas as it increases the speed you can ship & reduces the size of the org.
But there’s a big trade off: complexity & abstraction.
The higher level your abstractions the worse it gets too.
So it’s not without reason.