Most software today deals with data that’s available only over time: websites load remote resources and respond to complex user interactions, servers are distributed across multiple physical locations, and people have mobile devices that they expect to work at all times, whether on high-speed Wi-Fi or spotty cellular networks. Any serious application involves many moving asynchronous parts that need to be efficiently coordinated, and that’s very hard with today’s programming techniques. On top of that, we have what’s always been there: servers crashing, slow networks, and software bugs we have to deal with.
We can’t afford to keep programming applications the way we always have. It worked for a while, but now it’s time for a new approach.