Why Programs Fail: A Guide to Systematic Debugging