End users might think they have it bad, but the development experience is basically an exercise in dealing with whatever hyped up shiny unfinished turd is floating down from on high. It's a shame because some aspects of the system are really damn good, but there is just so much crap.
Having seen all this develop has persuaded me that the future is lower level APIs. On the web that means asm.js, Canvas, indexeddb etc. (discarding HTML and CSS), and on Android it means C++ and OpenGL and staying the hell away from as much of the higher level parts as possible. (Bonus points for increased code portability). The reason for this is the lower level ones seem to reach stable predictability much faster. It is better/easier to bundle any high level UI toolkit in the application itself than to have to support rendering on four different versions of the toolkit.