Talk about why UI development is hard, where the complexities come from and how we can overcome these by adopting an up-bottom approach using statecharts and state machines.