Design flexibility spectrum
I'm not sure what title to really use for this post, but "Design flexibility spectrum" is a starting point. The point is to describe one of the dimensions on which software agent technology could be used. The goal is that you start with a conceptual model of your application and then figure out how to decompose the application and implement it using software agent technology. The opportunities and advantages of software agents grow dramatically the further out the spectrum you go.
- Fixed design. Each component of the application is known in advance and designed to work with precisely those predefined components. A fixed set of software agents could be used.
- Configurable design. The application has some mechanism, such as a configuration file which allows an integrator to pick and mix and match application functions, such that there is no fixed, predefined relationship between all components, but at least the universe of components is fixed. A fixed universe of software agents could be used, with only a subset active for a specified configuration.
- Add-on extensible design. The integrator or even the user can actually add components to the application which were not known to the application designers. This begins to enable emergent behavior, within the bounds of the original application. The universe of software agents would be unbounded, but starts with a "base", pre-defined set.
- Open design. All bets are off. Application components stand alone, without assumption of the existence of other components. There is some mechanism for discovery of components and negotiation and facilitation of interaction between components. This enables truly emergent behavior. Literally nothing is known about the initial set of software agents. Actually, precisely one thing is known: the software agent representing each individual application component. The resulting "applications" are emergent and unknown to the component designers. Each such emergent application would be a "swarm application". Nobody would know in advance the "design" of such an application. And, the emergent design can change dynamically.
More thought is needed. I just wanted to put out some food for thought, consistent with "open design" where the final results really are emergent and not pre-defined.