In my experience, all of the complexity comes from feature requests following the initial development of some code. I develop code for our internal automated data analysis systems. My boss doesn't care how it works, it just has to do exactly what he wants. Even if it destroys my abstractions. Suddenly, you have lots of if/elif/else cases and a creeping suspicion that your logic now has holes in it.