You are very close. The problem is that with a 20-stage pipeline, you have 20 instructions in various stages of completion. Let's say that you encounter a conditional branch instruction (branch if some number equal to zero, for example). So that starts moving down the pipeline. What instruction should be executed next? At that point, you do NOT know the results of the branch. It could branch, or it could not branch. The exact result will be determined later. So, the processor has to guess whether to take the branch or not (whic it can do correctly about 90% of the time). If it guesses correctly, the pipeline flows smoothly.
However, if the guess is wrong, the processor has to throw out all instructions after the branch and start over.
Another food analogy: You have to cook dinner for your spouse/significant other. You can cook beef or chicken. They will only eat what they are in the mood for. So you choose to cook one (chicken for example) before they come home. If you guess right, a nice meal ready fast. If you guess wrong (whoops -- they want beef), throw the chicken out and start cooking beef.