AnthonyCg is right, many questions have already been asked and it's just a matter of searching the threads. However, I find this to be the main reason for boolean problems (but not the only reason. Check the threads for more solutions if this doesn't work for you.
Just make sure there's a line intersecting the area you're going to perform a boolean. Look at the pic and you'll see that the only difference is the line going across the box on the right.
Don't be satisfied with what you can do but rather strive to do the things you can't do!