The (new) Software Architecture Foundation Curriculum
Tags: isaqb, architecture, education
Published: 2021-07-18 17:42:26

(this post was originally published on the [iSAQB blog](https://www.isaqb.org/blog/the-new-software-architecture-foundation-curriculum/)).
  
 
Want to learn Software Architecture? Look no further – the recently released [iSAQB Foundation Curriculum](https://isaqb-org.github.io/curriculum-foundation/) covers all your needs!

A group of international software architecture experts has been working on optimizing and streamlining this systematic education path, resulting in the most systematic and practical curriculum ever.

The 2021 update is the result of nearly 12 months of work by more than a dozen experienced practitioners and researchers, who collected, curated and incorporated more than 190 change requests and proposals. You can find more details on the update and release process in the appendix.

This article provides an overview of the curriculum. Its sources are maintained and published via [GitHub](https://github.com/isaqb-org/curriculum-foundation).

## Goals
The iSAQB Foundation Level Curriculum aims to be the authoritative and leading source for all accredited software architecture education. If you are attending a training course and aim for the CPSA-F certification, knowledge of this curriculum is essential(CPSA-F: Certified Professional for Software Architecture, Foundation Level). More than 20.000 professional software developers have already been certified.
 
iSAQB software architecture education will provide you with the necessary knowledge to design and communicate a software architecture. Based upon your individual practical experience and existing skills, you will learn to derive architecture decisions from system goals and requirements.
CPSA-F trainings teach methods and principles for creating, designing, communicating, analyzing and evaluating software architectures.
 
Prior to a training course, an overview of the curriculum will give you a good idea of what to expect of such a training.

## Overall Structure

The curriculum consists of five strongly interrelated parts – based upon solid and proven terminology.  A (free!) glossary, published at Leanpub ([glossary]) provides definitions of key terms and concepts for your convenience and reference.
About 40 different learning objectives structure the required skills and knowledge of software architecture in a practical and pragmatic way.


![Overall Curriculum Structure](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o38an7wfm6lsy79308a6.png)
Fig. 1: Curriculum Structure

## Part 1: The Fundamentals

This part of the curriculum facilitates a common understanding of our subject by defining and explaining basic concepts – the what and why of software architecture. You will learn agreed-upon definitions of software architecture, its goals and benefits. 
My personal take on this fundamental part: There is no silver bullet or one single approach that solves all kinds of problems - as decisions will always depend on various influencing factors.
 
Furthermore, this part explains the role of architects and architecture within the complete lifecycle of software systems. It focuses on the major tasks and responsibilities of software architects, in cooperation and collaboration with other stakeholders, such as management, business, development teams and others.  

![Architects Role - the Spectrum](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/prawgcqncnopcs6s5sqx.png)
Fig. 2: Architects' Role - the Spectrum

When discussing the role, you need to consider the size and complexity of the system, organizational factors, team composition, and other constraints. Knowing the pros and cons of these options will help you find an appropriate setup for your teams and projects.

![Architecture Activities](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ci066q31jqd46y4vi7p8.jpg)
Fig. 3: Architecture Activities

Personally, I like the focus on communication and feedback that the curriculum proposes for the architecture role: explicit communication and feedback are essential ingredients of successful system development. Communication helps to identify risks and agree trade-offs with the stakeholders involved.

## Part 2 -- Architecture design approaches

Architecture work should always start with an appropriately clear understanding of both functional and quality requirements -- and the curriculum addresses these alongside with constraints and other influencing factors.

Designing systems is a highly creative (and sometimes difficult) endeavour -- supported by several architectural approaches, methods, patterns, and principles. In this part of your architecture education, you will learn about several of these approaches, such as view-based, incremental development, bottom-up and top-down approaches, domain-driven design and evolutionary architecture. 
Most of the approaches require intensive feedback and therefore are a perfect fit for modern and iterative development and management approaches.

Architecture patterns should be part of your personal toolbox when deciding on system structures, so the most important and established patterns will be covered in foundation courses: from layers and tiers to pipes-and-filters, microservices and self-contained systems, the clean-architecture patterns (also called hexagonal- or onion architecture) to interfacing and integration patterns.

![Approaches to Design Architectures](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dnkj6napljzi0xqca9sg.png)
Fig. 4: Some approaches to systematically design software architectures

Architects must pay particular attention to system qualities, such as performance, flexibility, maintainability, and security. The curriculum addresses these qualities from different angles (see also Part-4 below). Proven architectural tactics will help you to achieve the desired or required qualities -- related to both externally visible and internal properties of systems..

To assess the consequences of your design decisions, you need to be aware of the timeless underlying principles of software design -- such as abstraction, modularization, black-/white-box, coupling, cohesion, conceptual integrity, and a few others.  Even the architectural relevance of the SOLID principles will be covered. Learning to apply them in practice will definitely improve your decisions.

Special attention will be paid to dependencies between architectural building blocks: You will analyze the challenges of relationships and dependencies between elements of your architecture, and systematically design and define interfaces that are easy to learn, use and extend.

## Part 3 -- Architecture communication

Since you need to interact with a variety of different stakeholders (see Fig 5 for some examples), it is therefore crucial to learn how to communicate your architecture, its structures, concepts and decisions effectively and efficiently.

![Architects communicate](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ufy6ag49cl9up9rxz2gs.png)
Fig. 5: Architects communicate with many stakeholders

You will learn how to use architectural views (like context- or building-block view) to verbally communicate structural decisions and justify them. 
Additionally, you will learn how to apply these skills to
(written) documentation too -- balancing accuracy, attention to detail and the time required to keep documentation up to date.

A (very) small part of the curriculum is devoted to architecture modeling notations, like UML. Expect an iSAQB foundation training course to include a highly condensed summary of practically useful modeling constructs -- and pragmatic advice on how to create useful architecture
diagrams.

Although I am one of the core committers of the [arc42](https://arc42.org) template, I personally favor a lean and relaxed style of documentation. 
In case your systems require strict and detailed documentation, the curriculum has you covered too!

## Part 4 -- Architecture and quality

Achieving quality characteristics and quality attributes belongs to the core tasks of software architects. This part of the curriculum dives deeper into the intricacies of the term *quality* and explains its characteristics. 

You will learn about quality models, such as the well-known ISO 25010 standard, from a practical viewpoint.

Specifically, clarifying quality requirements is addressed, e.g. by using quality scenarios. In addition, the analysis of quality is covered -- together with its methodical brethren, the quantitative approaches to analyzing and evaluating software architectures.

## Part 5 -- Practical examples

Examples are the best learning tool: Only through examples does architectural knowledge become tangible and visible. Experienced iSAQB trainers are able to complement the conceptual background from the learning objectives with real life situations and experiences.

Using examples, you will be able to understand the relationship between requirements and the technical and architectural solution. 
In addition, you will be able to understand the rationale behind specific architectural decisions (aka *design rationale*).

Please note -- every trainer is free to select their own examples that fit a particular training situation. Think about what kind of examples you want to see and experience prior to attending a training!

## Education needs practice

iSAQB training courses always include intensive practice sessions, where you will tackle specific architectural challenges in small and focused groups. Such exercises help impart knowledge and skills.

Similar to the practical architecture examples from part-5 of the curriculum, the contents of these exercises is up to your trainers. Hands-on exercises are mandatory for parts 1 to 4 of the curriculum and ensure that the key learning objectives are covered.

## Supporting material

Due to the complex nature of software architecture, it is recommended that you attend accredited training classes in case you aim for the iSAQB CPSA-Foundation certification. Such courses have a minimum duration of 3 days, which makes them efficient educational events. In case you want to supplement your training, there are several (free) publications that complement the curriculum:

* A comprehensive glossary of terms. A free ebook, defining the terms used in iSAQB curricula. It's available both as eBook from Leanpub and as an [online reference](https://leanpub.com/isaqbglossary) 
* An annotated collection of software architecture books and references. Compiled by iSAQB contributors, freely available on [Leanpub](https://leanpub.com/isaqbreferences).
* A [mock (_sample_) examination](https://isaqb-org.github.io/), containing approx 40 sample questions plus answers, for optimum preparation for the CPSA-F examination.
* A companion study guidebook, perfect to prepare for the CPSA-F certification is the exam preparation guide: "Software Architecture Foundation -- CPSA-F Exam Preparation". [VanHaren International](https://www.vanharen.store/software-architecture-foundation), 2021. This book explains all 40 learning goals in details, helping you to prepare for the CPSA-F certification. Disclaimer: I am co-author of this book.


## Credits
Cover image:  Photo by <a href="https://unsplash.com/@timmossholder?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Tim Mossholder</a> on <a href="https://unsplash.com/s/photos/education?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>