To solve complex problems, agents work cooperatively with other agents in heterogeneous environments. We are interested in
coordinating the local behavior of individual agents to provide an appropriate system-level behavior. The use of intelligent
agents provides an even greater amount of flexibility to the ability and configuration of the system itself. With these new
intricacies, software development is becoming increasingly difficult. Therefore, it is critical that our processes for building
the inherently complex distributed software that must run in this environment be adequate for the task. This paper introduces
a methodology for designing these systems of interacting agents.