I find a blank piece of paper and a pen is the best starting point:
- sketch a few rough diagrams
- jot down some ideas / notes
- write some pseudo-code
- think through main use-cases
- think of potential problems
Don't spend more than half an hour on this, and don't get bogged down in too much documentation or up-front design. Start coding as soon as you have a vague idea of how you want to do it. As you continue developing, you get a feel for whether the code is good enough or not. If you're not happy, think about what you don't like and start over with those lessons in mind. Refactor often and soon, the earlier the better. If something doesn't "feel right", it probably isn't.