Just a couple examples where you actually must use supervisor job:
1. Web application, it has application scope, and launch coroutine on each requiest, you don't want cancel other coroutines (request handlers)and of course you don't want to cancel application scope, otherwise you cannot handle new requests
2. Some UI application screen, it's of course make sense to create scope per screen (it has own lifecycle), and all async operation on this screen running on the screen's scope, but some of them may fail, you don't want to cancel all other or prevent from starting new one
In both of those cases you should use supervisor job for scope, in this case one failed coroutine will not cancel others, but it doesn't mean that you don't care about exceptions, unhandled exception in launch or unhandled exception on async.await() may just crash application, but also you can use coroutine exception handler on scope to catch them