Aside from that, it's the incremental refinement that happens after you have a basic architecture, a useful app that puts stuff up on the screen, and a small userbase. Changes are usually pretty easy at that point (if you did the architecture right), and there's the instant gratification of writing a feature and having people immediately use it.
I find that most projects follow a "ski jump" happiness curve. Thinking up the initial idea is a lot of fun, as are the first few planning stages. Then you come up against all the little details that are absolutely necessary to build something useful, yet not really fun to deal with. By the time you're about 2/3 through with building it, it looks hopeless. Then you start cleaning things up and figuring out an architecture that reconciles all the different concerns. If you haven't made too many tradeoffs by then (or skipped the step entirely), the launch and refinement process is kinda fun.
Aside from that, it's the incremental refinement that happens after you have a basic architecture, a useful app that puts stuff up on the screen, and a small userbase. Changes are usually pretty easy at that point (if you did the architecture right), and there's the instant gratification of writing a feature and having people immediately use it.
I find that most projects follow a "ski jump" happiness curve. Thinking up the initial idea is a lot of fun, as are the first few planning stages. Then you come up against all the little details that are absolutely necessary to build something useful, yet not really fun to deal with. By the time you're about 2/3 through with building it, it looks hopeless. Then you start cleaning things up and figuring out an architecture that reconciles all the different concerns. If you haven't made too many tradeoffs by then (or skipped the step entirely), the launch and refinement process is kinda fun.