One detail from the <i>Antipatterns</i> book:<p>They claim that only about 1 out of 5 programmers "get" abstraction.  To the extent this is true (and it agrees with my experience in the field starting in 1977 including a dozen years in and around MIT) you can't have "democratic" design processes, for the "software architects" who <i>do</i> get abstraction will be voted down and you'll end up with the usual mess of spaghetti (or whatever they're calling it nowadays).<p>Hmmm ... another problem I ran into was understanding scaling, O(whatever) issues.  At least one project I declined to join died horribly because the people in it couldn't grok that their design wouldn't scale to the level needed for basic customers, let alone big ones (in this case the lead had only done CD-ROM based applications, so his library code for the DB didn't even work when they tested 2 clients, but the bottom line was equivalent to trying to use e.g. the biggest baddest version of Oracle to implement a Google scale internet search engine).