The SEI helps advance software engineering principles and practices and serves as a national resource in software engineering, computer security, and process improvement. The SEI works closely with defense and government organizations, industry, and academia to continually improve software-intensive systems. Its core purpose is to help organizations improve their software engineering capabilities and develop or acquire the right software, defect free, within budget and on time, every time.

Agile Architecting

Today’s software users have come to expect new features as soon as the need for them arises. In response to this challenge, we are working to reduce the footprint of traditional software offerings and move to providing continuous delivery of new or improved capabilities. Agile practices are strengthened through application of architecture principles. Informed anticipation with just enough architecting in the context of agile release planning can provide the tools to balance of agility, innovation, and speed on the one hand, and system governance, flexibility, and planning for future needs on the other.

Agile software development methods focus on delivering observable benefits to the end user, early and often, through working software. In the Agile approach, functional user stories illustrate that particular capabilities are required.Typically these collected stories are prioritized by end-user need, but almost every story has dependencies on other stories. To optimize value to the user, teams must look ahead and anticipate future needs.

Stories also have dependencies upon the architectural elements of the system. We have defined architectural agility as the ability to identify and analyze these dependencies, and incorporate dependency awareness into a responsive development model. These additional considerations add a new dimension to the typical Agile release planning; benefits derived from the execution of architectural activities may now be allocated to either the current release or to future releases. Architectural agility offers tools that enable the software community to

adapt the agile focus on end-user stories to address the broader topic of capabilities, including quality attribute requirements

facilitate a “just-in-time” approach to building out the architectural infrastructure

Architectural agility allows architectural development to follow a “just-in-time” model. There is no completion of exhaustive requirements and design activities and reviews to delay delivery of features. At the same time, architectural agility maintains a steady and consistent focus on continuing architectural evolution in support of emerging features.

Developers first select capabilities to create within each iteration, then identify the architectural elements that must be implemented to support them. The term capabilities replaces user stories, reflecting a need to consider non-functional requirements such as modifiability and security, and to incorporate requirements across a broad range of stakeholders. Such dependency analysis enables the development team to prioritize and schedule work within a release.

A natural extension of a “just-in-time” model of architectural agility and agile architecting is the ability of the architecture and agile processes to enable effective release management and deployment. This requires design and analysis techniques and tools to support not only development practices but also reliable, robust, and secure deployment. For example, a subset of design patterns and tactics improves effectiveness of deployment-related practices such as continuous integration, automated testing, and continuous delivery.