3) Be a testing masochist, i.e., I ruthlessly try to break my own code.
4) Have other programmers inspect my code.
The author goes on to explain how he approached fixing a broken program: to stop catching errors and letting it crash. Which meant getting stack traces and fixing them on the spot. Combined with his aggressive use of assertions, no wonder he fixed it.