I've always wondered if its possible to write software that will run on computers with arbitrary number of memory heirarchy eg. x amount of l1/l2 cache -> main memory (RAM) -> SSD -> HDD -> Archive storage where you can plug in a new type of memory as it becomes available (eg. 3dxpoint) and it will adapt to run optimally on that hardware without rewrites.