Software Architecture

Architecture-Centric Practices

The increasing scale and complexity of long-lived systems highlights the role of architecture in balancing the need to prepare a system for future modifications with the need to provide immediate capability. There has been a shift in recent years toward adopting software development processes that claim to accelerate delivery of technical capabilities in the face of an uncertain future.

While Agile software development techniques provide some guidance for quick capability delivery, they do not account for unanticipated interactions within complex unprecedented systems, either during their initial development or as they evolve over their lifespan. On the other hand, too much upfront architecting can compromise the rapid delivery of capabilities. Techniques for determining the right balance of architecture and agility do not currently exist, but are vital to the ongoing debate about the utility of Agile methods.

Specific tasks under investigation this year are

System of systems (SoS) architecture patterns—exploring SoS architecture design patterns with an emphasis on defining and achieving SoS quality attributes