I was working on an early prototype for my watercolor fish simulation, Guppy, when I started to get really bored with playing the same tiny test level with the same obstacles and hiding places again and again. I could have made a new level, or several, but it seemed this would only postpone the inevitable and I would soon grow tired of those levels as well...
Instead, I chose to randomize the location and number of lily pads and rocks in a level, effectively making the levels, such as they were, random. A primitive form of procedural generation to be sure, but it made the game fresh again and I could happily resume testing mechanics without the tedious feeling of rote memorization.
I gradually expanded on the generation: randomizing angle and scale (within a range), mirroring objects, creating multiple versions of art for smaller parts and randomly selecting between them for extra variety, rock formations that expanded into different shapes and directions, and level gen templates that specified particular combinations of rock and lily density and number of fish, etc.
I tied the complexity of generation to player progression so that early on (when you have a low hi-score) the levels are very simple so as not to overwhelm the player, but as you progress (with hi-scores of 5+ and 10+) the levels become larger and more varied. All this kept development and playtesting interesting and meant I was able to persist over the course of many evenings and weekends of spare time and ultimately ship my game.
Keeping motivation over the course of a longer project is hard enough as it is. Adding some dynamic variety can really help keep development enjoyable, making your game more replayable both for you and for players.