Cooperative processing can yield a nice benefit: the whole can be greater in utility than the sum of its parts, as the synergistic relationships between the parts can add to the value of the system. The critical task, of course, is designing the "right" architecture of the system in terms of cooperating agents (software, hardware and people) and the mechanisms through which they interact and coordinate. The "right" architectural design is central as there can be possibly infinitely large design space (e.g., client-/server-centric, neither or both; transaction-oriented, groupware-oriented or both; direct communication-based, middleware-based or both; etc.). Dr. Chung's approach to the "right" architectural design has been to use non-functional requirements in narrowing down the design space during the process of distributing information stores and system processes among cooperating agents.