- Form a mental model of the process taking place. Write it down in words or draw a diagram. Validate that each step in your model is accurate, not just the one you think is failing.
- Another way to approach the above point - think of all the things that affect the running code, and work out which are the most likely to have an effect. Don't rule out the unexpected ones though. Think how you could test your understanding of, or rule out a problem with, each of the aspects.
- your code (and different versions thereof)
- other libraries (and different versions thereof)
- application server (and different versions thereof)
- language interpreter, compiler and/or virtual machine (and different versions thereof)
- properties files
- environment variables