While learning to use Coroutines and Flow in several different projects (including my own), I noticed some common anti-patterns that tend to arise while coming to terms with structured concurrency and reactive streams. In this article, I will outline how to recognise and refactor four of the most common cases. — 1. Using Flow instead of a suspend function When designing your methods and functions, start with a suspend function and if you get stuck, change it to a Flow.