I feel that abstractions in programming are not powerful enough. What we really want to program with is metaphors. So I imagine complicated systems visualised a network of pipes like a circuit board. And I can introduce the metaphor of cars driving around a network. A loop is a depot that produces cars around a circuit. You can have visibility and observability of a system by rendering dataflow visually.
I could do the following experiments with my code:
A) increase the number of cars on the road at any one point. Multithreading.
B) increase the width of roads
C) increase the number of crossings (semphores)
D) motorways - algorithm fast path
E) lanes - slow path, when the fast path cannot be used
F) for multithreaded software there would be multiple cars around the roads as each car represents part of a request
G) traffic jams are blocking synchronous calls
H) asynchronous programming is represented as a delivery from a depot and a return journey