On the topic of user experience, another concept is that systems can be designed to measure the user experience and change their approach dynamically. There used to be domains in which this was commonplace, but the practice doesn’t seem to have survived well, as far as I can see. A simple example is OS thrashing. Some user-focused heuristics here could prevent the entire system halt users experience when they try to process more data than they have RAM to hold. —- Another design axiom I tend to hold is that optimization properties are exchangeable. That is, that if something is very heavy cpu-usage-wise, but uses very little memory, then there is some transform that can be applied to it to use a lot of memory, and very little cpu. Practicing finding these various transforms seems like it could be a useful skill-building exercise.