At Sendwave, we wanted to rebuild our data syncing mechanism on Android. That's when we came up with the idea of using a State Machine which helped the team build a much more solid and scalable data syncing system. State Machines are a very good solution for making sense of things that can be quite complex. So many companies are using State Machines as part of their architecture (like Tinder, GoDaddy, Square and more). Some popular architecture patterns like MVI or Redux were inspired by the concept of State Machines. And it has even made some language features possible (Kotlin Coroutines). We will start by understanding State Machines from the ground up and then we will go through all the examples above and will finish by showing how we used a State Machine at Sendwave