I approach this in 2 steps:
1. understand
2. (re)invent
[Maybe this is a form of first-principles-thinking?]
This is mostly step (1). Drawing diagrams makes me think harder about how to explain what I observe. I'm sharing the diagrams in the hopes that others might be interested and might be inspired and might kibbitz. Maybe the most striking conclusion thus far is that progress and complexification has been one-sided - aimed almost entirely at satisfying developers' needs. The Production Engineering step is missing from our workflow. We go even so far as to think that children need to learn to develop code using this workflow. Another observation is that the great minds of 1950 were faced with new, poorly-understood hardware, then devised ways to use it. We (the royal we) are at this point again: our problem space is quite different from that of 1950. In 1950, thinking of using more than one CPU was too co$t prohibitive. Today, we can have bowls full of the things. How should our workflow and tools be re-invented? Obviously, we want to use what we already have, instead of starting from scratch again. If we take the view that the existing stuff is just "assembler" for something new, what can we come up with? Another observation is that "sequential programming languages" aren't up to the task of solving today's problems (hence, we get a succession of gotchas, like callback-hell, await, package managers, version hell, etc.)
[first principles thinking:
https://guitarvydas.github.io/2022/05/25/Programming-First-Principles-Thinking.html]