To put it simple, coroutines are a way to write asynchronous code sequentially. Instead of messing around with callbacks, you can write your lines of code one after the other. Some of them will have the ability to suspend the execution and wait until the result is available.
Antonio Leiva in A first walk into Kotlin coroutines on Android.
In my personal experience, 60% of the transformed code is directly usable, and a bigger percentage for simple classes with no complex functionality.
Enrique López Mañas in On Strategies to apply Kotlin to existing Java code.