Although a powerful tool, coroutines can be hard to understand due to the way data can flow back and forth between sections of the code.