What patterns are commonly found in large software systems?
I am thinking of things like:
Large systems may be distributed, requiring
DesignPatternsForDistributedObjects.
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