You're partly right regarding giving more fine grained control. Kotlin strives to be explicit. That's why you need to be specific about where a coroutine is launched, where you want to switch execution context (which is not just about dispatcher BTW), and that's why we have structured concurrency in kotlinx.coroutines.