The Germans have a saying that roughly translates to 'the torture of choice'. As much fun as it sounds, independently designing a piece of software from the ground up is a series of small choices. Each choice can either allow progress to continue, or it can destroy any hope of productivity. There is never a single correct permutation of choice, and often times it is impossible to see the forest through the trees.
Ask any developer, and you will be told the waterfall development pattern is synonymous with torture. The waterfall pattern's intent is to specify all design decisions ahead of time, so that development teams are freed from choice during the implementation phase. More simply, it aims to reduce the amount of liberty a single developer can take on a day-to-day basis. We now know that things don't necessarily work that way. Design choice is deferred to the whims of management, which in turn almost guarantees a terribly inadequate end product. I have seen, and been a member of highly motivated teams that were able to make this work, but in my experience that really is an exception to the rule.
I have been struggling with finalizing the 1.0 feature set of the iOS application I have been working on since June. Occasionally, I will think back to how simple it was to walk down the feature list and check things off for a waterfall release. Agile development on a team of just yourself, all while working a real nine to five job, is more like feature triage. Things are addressed as time allows, but more importantly, as the product requires. Now that I finally have a finish in sight, I begin to think about squeezing one more feature into my product. I have weighed the consequences to shipping this thing with the market differentiator I want to implement and have concluded that I would be hurting myself if it were to not be included. I suppose that is the torture of choice.