ExtremeProgramming is principles to have software organized. Or is it the other way around... SelfOrganizingSoftware is driven by ExtremeRules or ExtremePrinciples.
More commonly and more truthfully, SelfOrganizingSoftware is software systems that dynamically alter their internal structure to adapt and optimize to their input streams.
In other words, the program reorganizes itself when the situation demands it.
This intersects greatly with ArtificialLife, although not completely.
The main advantage of this is efficiency, but there is naturally some overhead to manage the organization. Also, it's one of those solutions like SimulatedAnnealing that require admitting that we have no idea how to solve the problem. Go figure.
Would XpOrganizedSoftware? or XpOrganizedSoftwareDesign? be better naming for software developed using ExtremeProgramming? There is a notion of organic driven but some principles in that term... Shouldn't this be a pattern of some sort? a MegaPattern??
Instead of ExtremeProgramming, why not write OrganicSoftware?!
XP is a HighDisciplineMethodology which means that it isn't organic. In general, though, you can always get better results than organic if you try hard enough.
Software also needs to be self-organizing to avoid the effects of decay. It can't be self-organizing if it relies on external events (like programmers) to keep it adapting. A programming team may be self-organizing, but that's because it serves as a microcosm of society as a whole which is self-organizing.
But XP 'does' downplay BigDesignUpFront. XP teams design each piece as they go, but the overall system appears to grow and evolve from the requirements, rather than be artificially fixed early on. So there 'is' an organic quality to the projects and the systems they build. -- BillBarnett
Yes. HighDisciplineMethodology gets better results than organic? Data anyone? I'd love to see if harmony (See ExtremeHarmony) is a result of an organic (artificially driven or not) way of doing things. ExtremeProgramming by itself are deduced from an number of experiences. Organic systems are experiencing by themselves instead of being driven by external elements. Wow! I guess one of the elements of the solution is: external elements. Thoughts anyone? In SelfOrganizingMethodology?, SelfOrganizingPhilosophy? or SelfOrganizingProcess?.
Bill, you got an interesting thing: Organic Quality. I mean something may be of OrganicQuality? but may be driven artificially...
What I should say is although XP is incremental and adaptive, it isn't organic because it isn't self-organizing. You need someone pushing you and you need to keep pushing yourself. But then again, now I'm thinking I'm completely wrong. The organizing forces are internal to the software team. So it would seem to be self-organizing after all. Maybe. OrganicQuality? would suggest a LowDisciplineMethodology. XP requires coaches and trackers and rules you must follow (as in AlmostExtremeProgramming isn't).
What I meant by artificial systems being potentially better than organic systems is that organic processes only approach local maxima and don't attempt to find the global maximum. In the expected case, an evolutionary system will only find a local maximum. However, an artificial system can use analysis to determine what the global maximum is, or at least a better local maximum. Analysis is better than random interactions because no only does it preserve information, it feeds the information back into the system. -- SunirShah
OrganicQuality? would suggest LowDisciplineMethodology. OrganicQuality? implies evolution isn't it? So if one of the practices is of no use or is counter productive (negative feedback), this practices should be terminated or modified. But by who? By what standard? Am I going back to need the ExternalElement? at that point? I do not know. But here's my point: against a goal or a vision (eventually defined within the SelfOrganizingEntity?), the practice should be tested. If the tests are not passing, then modify the practice, including, eventually, kill it if needed. -- JeanMarcHeneman