How do we change causality without breaking things? There are a lot of problems we solve with accidentally synchronous solutions: functions and procedures that do the work when called. These are great for simplicity and debuggability. However, they can present problems with testability and responsiveness. But changing this choice is hard. Execution model is effectively an architectural concern. In this talk we will refactor between synchronous and asynchronous approaches to common problems: UI, data processing, and assembling components into bigger components. We will do this with true refactoring: incremental, able to stop at any time, and proving that no step ever introduces our fixes a bug - even in untested code. As a side effect, we will turn some difficult to test code into a much easier to test design. Safely.
Watch the talk