- We write code that does one thing at a time
- If we get stuck (e.g. awaiting user input) everything stops
- In modern systems, lots going on at once
- User input
- Network communication
- Often need to start something now and finish it later
- How do we express that in code?
- Start this, and while waiting start that, and while waiting...