search menu icon-carat-right cmu-wordmark

Software Architecture

For almost two decades, the SEI has been instrumental in the creation and development of the field of software engineering known as software architecture. Software architecture is the conceptual glue that holds every phase of the project together for its many stakeholders.

Why Architecture?

The software architecture of a program or computing system is a depiction of the system that aids in understanding how the system will behave.

Software architecture serves as the blueprint for both the system and the project developing it, defining the work assignments that must be carried out by design and implementation teams. The architecture is the primary carrier of system qualities such as performance, modifiability, and security, none of which can be achieved without a unifying architectural vision. Architecture is an artifact for early analysis to make sure that a design approach will yield an acceptable system. By building an effective architecture, you can identify design risks and mitigate them early in the development process.

Learn how to create an architecture that responds to critical system qualities.

Methods for Software Architecture

We develop and apply architecture tools and methods that can be used during various stages of the development lifecycle:

  • Establish requirements by analyzing the business drivers, system context, and factors that system stakeholders deem critical to success. We developed two methods for establishing requirements: the Quality Attribute Workshop, for identifying important nonfunctional attributes of the system and clarifying system requirements before there is a software architecture to evaluate; and the Mission Thread Workshop, which brings together stakeholders to augment existing mission threads with quality attribute considerations that will shape the architecture and identify architectural challenges.
  • Define an architecture by developing architectural structures and coordination strategies that satisfy requirements.
  • Evaluating the architecture by determining when and what methods of architecture evaluation are appropriate, conducting the evaluations, and applying the results to improve the developing architecture. We developed two methods for evaluating architecture: Active Reviews for Intermediate Design, which blends architecture evaluation with specification review to provide insight in the viability of an architecture; and the Cost Benefit Analysis Method, which helps organizations invest their resources to maximize their gains, meet their schedules, and minimize risk.
  • Document the architecture in sufficient detail and in an easily accessible form for developers and other stakeholders.
  • Analyze the architecture for system performance, security, or safety using the Architecture Analysis and Design Language (AADL) through the Open Source AADL Tool Environment (OSATE).

How do you know if a software architecture is deficient or at risk relative to its target system qualities?

The answer is to conduct an evaluation of it. A formal software architecture evaluation should be a standard part of the architecture-based software development lifecycle. Architecture evaluation is a cost-effective way of mitigating the substantial risks associated with this highly important artifact.

The achievement of a software system's quality attributes depends much more on the software architecture than on code-related issues such as language choice, fine-grained design, algorithms, data structures, testing, and so forth. Most complex software systems are required to be modifiable and have good performance. They may also need to be secure, interoperable, portable, and reliable.

But for any particular system, what precisely do these quality attributes—modifiability, security, performance, reliability—mean? Can a system be analyzed to determine these desired qualities? How soon can such an analysis occur? What happens when these quality attributes are in conflict with each other? How can the tradeoffs be examined, analyzed, and captured?

The tools and methods described here can be used alone or in combination to obtain early and continuous benefits to any software development project.

The SEI Architecture Technology User Network (SATURN) Conference

SATURN is the leading conference for software architecture practitioners who look beyond the details of today’s technologies to the underlying trends, techniques, and principles that underpin lasting success in our fast-moving field. SATURN attracts attendees from many domains and technical communities who share interests in both practice and research. This unique mix makes it the best place to learn, exchange ideas, and find collaborators at the leading edge of modern software architecture practice.

The 14th SATURN Conference will be held in Plano, Texas, near Dallas, on May 7–10, 2018.

Related Courses and Credentials

Based on decades of experience architecting software-reliant systems and supported by four widely acclaimed books, our software architecture training equips software professionals with state-of-the-art practices, so they can efficiently design software-reliant systems that meet their intended business and quality goals.

Learn more about SEI Certificates in software architecture:

We also offer many courses on topics related to software architecture, from big data architectures to microservices, from documenting architectures to analyzing them, and from designing systems to managing their technical debt. Learn more about SEI courses.

Learn More

Automating Design Analysis

Automating Design Analysis

May 01, 2017 Blog Post
Neil Ernst

Software design problems, often the result of optimizing for delivery speed, are a critical part of long-term software costs. Automatically detecting such design problems is a high priority for software practitioners. Software quality tools aim to automatically detect violations of...

read
Three Roles and Three Failure Patterns of Software Architects

Three Roles and Three Failure Patterns of Software Architects

January 26, 2017 Podcast
John Klein

This podcast explores three roles and three failure patterns of software architects that he has observed working with industry and government software projects.

listen
The Future of Managing Technical Debt

The Future of Managing Technical Debt

August 29, 2016 Blog Post
Robert Nord

Software engineers increasingly recognize technical debt as a problem they care about, but they lack methods and tools to help them strategically plan, track, and pay down debt. The concept provides a vocabulary to engage researchers from a practice point...

read
What Makes a Good Software Architect?

What Makes a Good Software Architect?

May 18, 2016 Webinar
Ipek OzkayaAndrew KotovJohn Klein

In this webinar, SEI researchers and an industry colleague discussed in two talks What Makes a Good Software Architect?

watch