There's still a problem I don't know solve well, holistically. When you do something with UI there's inputs from humans (buttons, knobs, etc), the network and timers. I'm completely lost how to coordinate that, especially when I use an LED/OLED display.
How to make sure a single screen is displayed long enough to be readable? But on the other hand how to react to all inputs? And how to deal with some inputs/triggers being more and less important (e.g. "modal" screens over static screens)? Also how to make sure not to get lost in the threading mess that I just created? The cherry on top is, some inputs require "short term memory" -- like patterns of button pressing (double/triple press/long hold) or rotary encoders.
In the end I give up implementing a lot of features.