Utilizing async operations has always been hard, across platforms and languages. There have been many constructs that simplify working with async operations, e.g., on the JVM you have Threads, Executors, etc. However, they usually come with certain caveats in their usage.
But now Kotlin has come along with its own vision, a different construct called Coroutines. Coroutines have been present in other languages in the past, but Kotlin Coroutines brings their own take to the JVM platform. The best part about Kotlin Coroutines is that they try to simplify code into a sequential form and get rid of callback madness.
For people looking to understand Kotlin Coroutines, check out the infographic below to get started! :]