As we all know, we should write testable code, and automated tests. But as we also know, no test plan survives contact with the real world. Complex, distributed systems fail in complex, distributed ways, and even the simplest web app today is a complex distributed system. So, as our code accrues little fixes to bugs that only show up in production, our test suites eventually either become slow integration testing monstrosities that are "realistic" but flaky and unreliable, or useless piles of mocks which are fast and deterministic but don't give you confidence.
In this talk, we'll explore how to leverage event-driven programming, or "async I/O", to structure code in such a way that its tests are fast, realistic, and reliable, even in the face of horrible race-conditions you only discover in production.