I could follow JavaScript logic. I could trace what a variable held at any point. What I couldn't see was what the engine was physically doing, how the call stack filled, how the heap mutated and what actually happened when await suspended a function...