One of our jobs as programmers is to see into the future. We have to be able to see the logical path our code will follow to its end and make sure it will go where we want. The easiest way to do this is by keeping things super simple, but that generally isn’t the best way to solve the problem.
Instead we must do our best and have people test the things we build. Even the simplest projects create a huge number of possible test scenarios so we test what we can and cross our fingers.