Why not call ExtremeProgramming by a more descriptive term, like EvolutionaryProgramming? Inspired by the LOOPS refactoring browser on a Xerox Lisp machine, and the writings of BjarneStroustrup, I've been practicing a variant of ExtremeProgramming for years, without knowing how fringe an activity it was perceived to be by others.
I think of EvolutionaryProgramming as a specialty of object-oriented programming concerned with maximizing software reuse while meeting new requirements. There is still a significant role for design efforts, but they have to take a backseat to the primacy of pre-existing pre-tested software subsystems available for leveraging in new ways in new applications. In my company, we try to keep this in mind with humorous references to JustInTimeDesign, or sayings like "design should never lag too far behind implementation".
It seems to me that XP doesn't meet Scott's definition of "EvolutionaryProgramming" in the second paragraph. XP is not about maximizing software reuse; it is about maximizing development productivity. XP is not about the "primacy of pre-existing pre-tested software subsystems", but about the primacy of Simplicity, Communication, Testing, and Aggressiveness. I'm not sure just what EvolutionaryProgramming might be, but it sounds like it isn't XP and XP shouldn't call itself that.
-- RonJeffries
I see the distinction. Only in certain situations are they the same, where maximizing reuse equates to maximizing productivity. But it seems that will be more often the case as the amount of source code available to a developer continues to grow. -- ScottJohnston
I guess we'd like to hope so. Certainly within ChryslerComprehensiveCompensation there is plenty of reuse in that we follow OnceAndOnlyOnce. I'm not aware of many real projects that are getting any substantial benefit from reuse, however. How about you? -- RonJeffries
Following the techniques of ExtremeProgramming without knowing it, I've been able to develop (or help my customers develop) a handful of editors/browsers/viewers that reuse Vlissides' UnidrawFramework. One is a scientific imaging workstation for NASA. Another is a hierarchical decision tree editor. Another is a geo-spatial event simulator for military analysts. -- ScottJohnston
There is a practice that I follow with third party components: ExtremeReuse. Up to this point, I haven't linked it to ExtremeProgrammingRoadmap because it may be tangential. (Next time, do it. -- rj) -- MichaelFeathers
A few more thoughts on evolution versus extremeness. How do you define "programmer productivity", and how do you measure that a certain methodology is an improvement over another methodology? Is "programmer productivity" the rate of creating well-structured and tested software, or is it the rate of meeting customer requirements? Which programmer is more productive, the one who creates an application from scratch using ExtremeProgramming practice, or the one who (laboriously) generates only a few derived classes on top of an existing framework but gets the same job done? By leveraging existing frameworks, you can point to all the code you didn't have to write as evidence of time and energy saved. With ExtremeProgramming, the time and energy not wasted on poorly focused upfront design is the actual savings, but how do you measure that? -- ScottJohnston
Simple: meeting customer requirements is the only thing that matters. The idea is that ExtremeProgramming will let you continue to meet customer requirements with the same or less effort, while laborious reuse of an existing framework will require more and more effort.
And please note: there's nothing in XP that says you can't create classes on top of an existing framework. But it is against the rules to do anything that's laborious. "Doctor, it hurts when I do this..."
I used the word laborious to convey that reuse by layering on top of an existing framework was not a simple activity, but one that might require a good deal of experimentation and study before that first customer requirement is satisfied. I was trying to make the point that working hard in this manner might still be less effort than starting over from scratch. Which is easier: adding a new drawing tool to HotDraw or writing that drawing tool from scratch?
The surprise is the whole activity can be broken down into a series of iterative incremental experimental extreme-like steps, but if you're goal is meeting a single customer requirement it can look like quite a wall to scale when you first start to reuse someone else's framework. -- ScottJohnston
Hate to say it, but the term Evolutionary Programming already refers to something else, anyway - it's a type of EvolutionaryAlgorithm promulgated by Lawrence Fogel and subsequent workers in the mid 1960s, invented basically in parallel with GeneticAlgorithms and EvolutionStrategies?. In essence, an EP algorithm is a lot like a GeneticAlgorithm, except there is no crossover, and it traditionally has been applied to the evolution of FiniteStateMachines. See [1] for more information from an external FAQ. -- BillTozier
Koza has worked on evolutionary programming with crossover, which he terms Genetic Programming. Genetic programming treats programs as tree-structured genes, and the crossover operation replaces a randomly selected subtree of a program with a tree taken from another program.
Actually, Koza's work with GeneticProgramming is different from Fogel's work with EvolutionaryProgramming. Both of these are variant EvolutionaryAlgorithms. -- BillTozier
Well, this suffices to answer "why not call it EvolutionaryProgramming?" And the ExtremeProgramming moniker seems to be well-known at this time (July 2001) among those interested in programming. Too bad about the namespace collision with WindowsXp. -- ScottJohnston
When combining the concepts of GeneticProgramming and ExtremeProgramming, the term ExtremeGeneticProgramming seems most appropriate. -- JonGroff
See EvolvingSystem
Contrast with EvolutionaryDesignIsWasteful