The thing that helped me out of this, was seeing writing code like forging a sword, where you repeatedly heat up the metal, hammer it into shape and then cool it down again. (note: IANASwordSmith)<p>This works because heating up the metal makes it easier for it to arrange itself into a more optimal configuration and then you hammer it into shape and cool it down again to preserve the awesomeness you already reached. Then you repeat that process a thousand times  until you have a katana that can cut through steel.<p>So, don&#x27;t worry about just implementing a feature very roughly and breaking apart old structures you already put into place, you&#x27;re just &quot;heating up the metal&quot;. To see how everything should work and what it should behave like (i.e. &quot;hammering it into shape&quot;). As long as you then do the clean up&#x2F;refactoring and put everything in the right place and such, i.e. &quot;cooling it down again&quot;, you&#x27;ll end up with awesome code that&#x27;s robust and expresses what should be done very well.<p>So, in a way, imagine you&#x27;re a smith at the forge, forging your code like a Hatori Hanzo sword, which is also a nice methapor, I think (with the difference, that your code&#x27;s purpose is hopefully not cutting peoples heads of!).:)