How well do you really understand the problem you are trying to solve?
You must understand the problem you are trying to solve. It sounds kind of simple, but often times programmers jump into solving something they don't understand. What do you think happens if you try to fix a problem you don't understand?
You must understand the problem you are trying to solve really well. You must understand every little part of the problem, including researching similar problems, and how they were solved. You must understand every single word of the problem. Only then can you create a good plan.
When we want to really understand something: