Yes, it still is the most popular square peg round hole on the block. The most interesting element is that – yes agile programming is both evolutionary and emergent. Evolution and emergence are processes and properties where the results are arrived at in a way that straight foresight never could have anticipated. But ironically the most adept agile developers are those who were “forced” to learn non-agile product development techniques. This should make sense at the end of the day, evolution and emergence only produce good results when they are building on other good practices. Unless you carefully analyze what those practices are you will never realize them.How many agile/extreme programmers have you come in contact with that have absolutely no concept about their problem domain. I’m not talking about the problem domain realized by “domain experts” in other fields. I mean the problem domain they are supposed to be experts in. We’ve all encountered it. People who are truly bright but have a little understanding of programming technique. Abstraction and simplification are lost on them. But convenient extreme mantras are held close to their heart. They love the built-in protection of extreme tenements.
Without access to a customer 24-7 how could they know what a customer wants? Anticipating needs is unimportant – code for todays needs. Long term scheduling is unimportant and a waste of time. All of these concepts work if you’re an experienced developer. Not because they are correct, but because they have become automatic to an almost sub-conscious degree. Their code auto magically is written to the tune of design patterns, simplicity, flexibility, and automatic recognition of common long-term needs. But the new-comers fail miserably. They end up building for today and generating a spaghetti mass that is impossible to maintain.