story
Once it's working, you know enormously more than when you started, and all you have to do is refactor the mediocre design you happened to build into something better, without breaking the functionality.
With good test suites and solid refactoring skills, that is actually both very doable and often a lot of fun!