IN4315: Software Architecture

Software Architecture

Arie van Deursen and Diomidis Spinellis, 2022

Course Content

This TU Delft graduate (master level, see current 2022 edition) course is concerned with the software architecture of software-intensive systems. This relates to:

  1. What the software should do, now and in the future, and how it is to interact with its environment. Here we look at the problem domain, natural ways to decompose and understand the problem domain, the desired capabilities of the system, required properties (such as privacy, usability, scalability, security, or maintainability) of the system, the context in which the system operates, and the stakeholders that have an interest in the system.

  2. How the software is designed so that it can reliably meet its objectives. Here we look at design principles, system decomposition and assembly, quality assurance procedures, architectural styles and patterns, and architectural perspectives on, e.g., configurability, energy consumption, or scalability.

  3. Who is involved in the use, operation, creation, and evolution of the software. Here we look at all people aspects of software architecting, relating to leadership, team work, trust, bias, collaboration, effective communication, work distribution and Conway’s law, ethics, and people development.

Our aim is to study reliable knowledge in these areas. To that end, we work with three knowledge sources:

  1. Practice: Where possible, we try to learn from actual software systems. To that end, students engage with the architecture of an open source system. Furthermore, the course involves 3-4 guest lectures by architects responsible for complex commercial software systems. We also often invite 3-4 international architects for a 15 minute Ask Me Anything session over skype, in which they offer answers to questions asked by students of the course.

  2. Theory: Little is as applicable as good theory, which is codified practice. We study various books and online resources on software architecture. We particularly rely on Pautasso’s Software Architecture1, offering a broad perspective on software arechitecture including software services, deployment, and scalability, and availability.

  3. Research: There is a lot that we do not know about software architecture. In research we explore theories that may be true, or may turn out to be false. As part of the course we investigate a number of new research findings, to establish whether they apply to systems under study in this course.

There are typically 3-4 lectures for each of the three components (theory, practice, research).

Course Assignments

Since architecture is team work, students work in teams in this course as well. The team size is four.

Each team selects an open source system (from GitHub or other forges). Teams conduct an in depth study of the architecture of the system they picked, looking at it from different (theoretical) perspectives. The student findings are collected in various essays (blog posts). The specific essays vary per year, but relate to what, how, and who of the system and to various quality attributes relevant for the systems under study.

Students are encouraged to share their essays publicly: To that end, the course offers an on line “book” where student essays are collected and made available, under the overarching title Delft Students on Software Architecture (DESOSA). This book series was inspired by Brown and Wilson’s Architecture of Open Source Applications (AOSA) 2, in which architects themselves explain the history and roadmaps of software applications, and the architecctural decisions made to realize these.

Furthermore, teams make actual changes to the systems under study, for example by offering pull requests that resolve currently open issues, or issues that they have discovered themselves. While the changes themselves are typically fairly small, the process of making these changes offers the students an opportunity to engage with (“feel”) the current architecture of the system.

Course Editions and History

Earlier editions were co-taught with and inspired by a range of people, including Maurício Aniche, Andy Zaidman, Alex Nederlof, Michael de Jong, Eric Bouwers, Rogier Slag, Valentine Mairet, and Sander van den Oever.


  1. Cesare Pautasso. Software Architecture: Visual Lecture Notes. Leanpub, 2020.

  2. Amy Brown and Greg Wilson (editors). The Architecture of Open Source Applications. Volumes 1-2, 2012.

  3. Arie van Deursen and Rogier Slag (editors). Delft Students on Software Architecture: DESOSA 2015. TU Delft. Available via

  4. Arie van Deursen, Maurício Aniche, Joop Aué (editors). Delft Students on Software Architecture: DESOSA 2016. TU Delft. Available via,, pdf, epub, and doi

  5. Arie van Deursen, Andy Zaidman, Maurício Aniche, Valentine Mairet, Sander van den Oever (editors). Delft Students on Software Architecture: DESOSA 2017. TU Delft. Available via,, pdf

  6. Arie van Deursen, Andy Zaidman, Maurício Aniche, Liam Clark, Gijs Weterings, and Romi Kharisnawan (editors). Delft Students on Software Architecture: DESOSA 2018. TU Delft. Available via,, pdf, and epub 

  7. Arie van Deursen, Maurício Aniche, Andy Zaidman (editors). Delft Students on Software Architecture: DESOSA 2019. TU Delft. Available via (html),, pdf, and epub 

  8. Arie van Deursen and Casper Boone (editors). Delft Students on Software Architecture: DESOSA 2020. TU Delft. Available via,, pdf, and epub 

  9. Arie van Deursen, Casper Boone, and Shipra Sharma (editors). Delft Students on Software Architecture: DESOSA 2021. TU Delft. Available via

  10. Arie van Deursen, Maurício Aniche, Joop Aué, Rogier Slag, Michael de Jong, Alex Nederlof, Eric Bouwers. A Collaborative Approach to Teach Software Architecture. 48th ACM Technical Symposium on Computer Science Education (SIGCSE), 2017 (preprint. doi). 

  11. Arie van Deursen, Alex Nederlof, and Eric Bouwers. Teaching Software Architecture: with GitHub!, December 2013.