... poorly understood - <i>and sloppily formulated</i> - ideas
This is my favorite part of programming :)<p>You have an idea and attempt to codify it.
During the process, your code starts to get uglier and uglier.
Refactoring the code leads you to re-examine your conceptualization of the problem, leading to new insights outside the domain of programming.
If your code does not lend well to abstraction, it's a good indicator that perhaps your idea has missed the mark.
See the structure of the code, compare it to the structure of the idea and you have a whole new platform for creativity.
Think. Write. Refactor.
Rinse and repeat.<p>Turning bad ideas into good ideas.<p>Perhaps the reason why so many successful startups are famous for inventions resulting from other than their original ideas.