You optimize software--which means more time/money to write software for a given level of functionality. More co-design of hardware and software, including more use of ASICs/FPGAs/etc. And stuff just doesn't get faster/better as easily so upgrade cycles are longer and potentially less money flows into companies creating hardware and software as a result. Maybe people start upgrading their phones every 10 years like they do their cars.
We probably have a way to go yet but the CMOS process shrink curve was a pretty magical technology advancement that we may not see again soon.
To some extent yes, but there's a lot of low hanging fruit.
Java is only just now getting value types, even though flattened value types are fundamental to getting good performance on modern CPUs. Much software is HTML and JavaScript which is so far from having value types it's not even worth thinking about. Simply recoding UIs from JS -> Java/Kotlin+value types would result in a big win without much productivity loss.
We probably have a way to go yet but the CMOS process shrink curve was a pretty magical technology advancement that we may not see again soon.