I personally try to follow the method of "make it work, then make it nice". You build something that works, it does what you need it to do. After that, you probably already know where the code rubs you the wrong way, so you know where to look to improve and learn.
I sometimes do that too - but sometimes this leades to another trap:
I have something which works, but not the best. and I won't fix it, since the plan is to now do it "right". so I end up staying with a PoC forever..