What patterns are commonly found in large software systems? I am thinking of things like:
The happiest of the HappyPatterns for large systems I've encountered is a process pattern, ContinuousRoundTrip - that the system starts being fully connected from almost the first day, so that each part grows in function, but all the parts always continue to work together (needs AutomatedRegressionTests?, implies EarlyAndRegularDelivery, but they don't imply ContinuousRoundTrip). Reminds me of EvolutionaryDelivery advice. --AlistairCockburn
One place where it seems to me that Extreme Programming won't work is performance optimization in large systems.
Certainly we start small and grow big (in functionality), but to get from a slow system to a fast system takes design (document pile is one inch thick).
Profiling and optimization kills hot spots, but this only gets you so far. Sometimes you need to think about the whole architecture to get improvement by orders of magnitude.
-- EricUlevik
Why does it take design rather than refactoring? Why doesn't profiling and optimizing the hot spots work? And, since XP has more design than most approaches (just not up front), wouldn't it work better for optimization?
I was thinking that to get from a slow system to a fast system takes optimization with real performance measurements to guide you.
LazyOptimization recommends defining a quality indicator, measuring it objectively and automatically and defining a threshold value. You can then add a UnitTest or FunctionalTest that tests whether the system meets the performance requirements. If performance drops below the threshold, you optimise for runtime speed, if performance exceeds the threshold you optimise for readability and programming speed. It think XP would work very well for performance optimisation. MartijnMeijering