Over the past several decades software researchers and practitioners have proposed various approaches, techniques, and tools for developing ever larger, more complex systems targeted at the traditional workstation environment. The results of these efforts have shared a number of traits: system size and complexity, possible distribution across desktop platforms, focus on modeling and analysis before implementation, accompanying development environments, explicit software architectures, and so forth. The resulting software development paradigm has been referred to as programming-in-the-large (PitL). A new set of challenges has arisen with the proliferation of small, inexpensive, heterogeneous, resource-constrained, possibly embedded, highly-distributed, and highly-mobile computing platforms. While a number of the individual challenges may bear similarity to those addressed by PitL, their combination and overall novelty can be described more appropriately as programming-in-the-small-and-many (Prism). The proposed project intends to address the challenges of Prism. The project's focus is at the level of software application engineering. That is, the project will utilize advances in lower level software technologies (operating systems, optimized compilation, (wireless) networking, and data compression) as it addresses the goal of developing understandings, principles, frameworks, methods, mechanisms, and tools that will support efficient, scalable, reliable, robust, and, above all, highly adaptable software applications in the Prism setting. The project will focus on four key objectives: 1. develop an effective design methodology, accompanying software models, and flexible, incremental software analysis techniques; 2. develop technology to carry the design approach forward to implementation in a heterogeneous, highly distributed, mobile, and resource constrained setting; 3. develop execution-time solutions in support of (continuous) dynamic system evolution, (re)deployment, mobility, and graceful degradation; 4. validate the approach through series of experiments to quantify its key aspects, as well as through applications in three specific problem domains. The project will build upon the emerging body of research on software architectures in providing a comprehensive methodology for software development in-the-small-and-many. In particular, it will investigate the potential role and impact of software architectural styles (recurring structural, behavioral, and interaction patterns across systems) in providing a basis for the design methodology and incremental architectural analysis. Component-based frameworks and software connectors (explicit architectural abstractions embodying component interactions) will form the likely basis of the architecture implementation and execution solutions. Since it is unrealistic to assume that all applications in the Prism setting will have the same modeling and implementation needs, the project will provide configurable architectural style and implementation frameworks, with guidelines for instantiating these frameworks into specific styles and style-based implementation/execution platforms.