Over the last decade, async/await won the concurrency wars because it is exceptionally easy . It allows developers to write asynchronous code that looks virtually identical to synchronous code. But beneath that familiar syntax lies massive structural complexity. It hides control flow, obscures hardware realities, and ultimately pushes the burden of scheduling back onto the developer. Rich Hickey articulated this perfectly in his talk Simple Made Easy : “Easy” is what is familiar and close at hand, while “Simple” is what is structurally untangled 1 . async/await is easy to write, but it is fiercely complex to operate. Rob Pike talked about this architectural shift during his 2023 GopherConAU address: Compared to goroutines, channels and select, async/await is easier and smaller for language implementers to build… But it pushes some of the complexity back on the programmer, often resulting in what Bob Nystrom has called ‘colored functions’.…