1. Está compuesto de agentes independientes (por ejemplo, empresas en una economí a o cé lulas nerviosas en un cerebro). Estos agentes interactúan entre sí de manera no linear, es decir, el entero es má s que la suma de sus partes. El control tiende a ser muy disperso y el orden no se impone de arriba hacia abajo, pero de alguna manera surge de las interacciones de sus agentes, a pesar de que cada uno tiene sus propios objetivos.
2. Existen varios niveles de organizació n dentro de un CAS y cada nivel provee los bloques para construir el siguiente nivel. Por ejemplo, las personas forman departamentos, los departamentos empresas y las empresas la economí a. Ademá s, las agregaciones actú an como agentes tambié n.
3. Los agentes anticipan el futuro, tomando acciones basadas en un conjunto de reglas internas. Estas pueden ser modelos internos simples o complejos que han sido autoimpuestos por el agente (por ejemplo, una regla relativa al estado de mercado que hace que se abran o cierren las contrataciones de personal en una empresa).
4. Cada CAS tiene muchos nichos y cada uno es capaz de ser explotado por unos pocos agentes particulares. Esto diversifica los agentes, ya que se adaptarán para sobrevivir y prosperar, lo cual a su vez hace que los nichos sean cada vez má s diversos. Un ejemplo de algo que se mueve rá pidamente es el mercado del Internet
Un concepto muy revelante de nuestro análisis es aquel del orden emergente, el orden que aparece por la cooperación / competencia (conocido como "coopetencia") de los agentes del CAS. El siguiente relato demuestra este concepto de manera clara (esta historia, al igual que la mayor a de esta secció n ha sido extra do de un libro que considero como lectura obligatoria: "El Desarrollo de Software Adaptable" de Jim Highsmith.) A mediados de los añ os 1980, Craig Reynolds estaba interesado en simular el comportamiento de una bandada de pá jaros. En vez de intentar descubrir y programar reglas para toda la bandada, Reynolds decidió programar el comportamiento de cada "boid" (que fue el nombre con el que denominó a sus pá jaros simulados). Las reglas que siguieron sus "boids" fueron:
1. Intentan mantener una separació n mí nima con otros "boids".
2. Intentan lograr que su velocidad se asemeje a la de los "boids" cercanos.
3. Intentan moverse hacia el centro de la masa de "boids" cercanos para alcanzar la coherencia conéstos.
Por sorprendente que parezca, las bandadas de "boids" simulaban bastante bien a una bandada real de pá jaros. El orden surgí a del comportamiento individual sin que haya ninguna regla sobre el grupo.
Es interesante tomar en cuenta que en la mayoría de CAS, la complejidad en sí nos impide comprender cómo funciona todo el sistema. Pero, al comprender cómo los agentes relevantes se comportan, podemos generalmente simular el todo, y a sí volverlo predecible.
Entonces, para regresar a la pregunta que se plan teó al inicio de esta secció n, có mo podemos controlar un sistema no predecible (en nuestro caso un proyecto de software)? Una respuesta simplificada se aproxima a lo siguiente:
1. Identificar los agentes relevantes: clientes, programadores, usuarios, etc.
2. Identificar patrones de comportamiento de estos agentes en proyectos exitosos.
3. Sumergir a los agentes en este comportamiento y luego soltarlos. Se espera que se auto-organizarán, haciendo que el proyecto no solo sobreviva sino que prospere con energí a al filo del caos.
Le parece esto algo intrigante pero poco profundo para intentarlo? Espere porque vamos a analizar no só lo uno sino dos enfoques desarrollados de manera independiente (pero que en todo caso tienen algunas semejanzas sorprendentes) que se basan en estas ideas y que han sido usados ya en proyectos exitosos de desarrollo de software (aquellos en que todo el mundo termina feliz al final del dí a).