When a tester reports a bug and we execute the steps to reproduce the problem, we usually need a copy of the data in the tester’s database to get the same behavior. We need the program to run in the same context. Sometimes, environment variables and operating system and VM parameters and log configuration must be reproduced in order to reproduce the bug. The context of the running program determines behavior.

Each of our brains is a context. Words and stories have different meanings to each of us, and they have different meanings at different times. Our context – the existing patterns in our brain, and which neurons are active at a given instant – changes continually. 

One superpower of the human brain is simulation. We can evaluate possibly courses of action by simulating them in our heads: What would happen if…? These simulations include the emotions we expect to feel. When we remember an event, we put together pieces and construct a simulation of how it was.

However, these simulations are imperfect because they take place in our current context. We can imagine how it would feel to win the lottery, but not what we would be like as people a year later. We can remember last Christmas, but our memory is colored and modified by what has happened since, by the current context in which we recreate it. This is a limitation: we can simulate events, but not context.

In software we have more power. This is the magic of the VM image: a complete context, so that when we start our program a second time, it will behave the same way as the first. Reproducibility. We can reason and make predictions about software in a way we never can about people, because the context of software is knowable and reproducible.