1) Refactor and re-design as you gain knowledge and understanding.
2) Refactor whenever and wherever possible.
3) Refactor throughout the entire project life cycle to save time and increase quality.
4) Refactor mercilessly to keep the design simple as you go.
5) Refactor to avoid needless clutter and complexity.
Basically, just let go of your notions of what the system should (or should not) be and try to see the new design as it emerges before you.