IN4315: Software Architecture

Software Architecture: Suggested Reading

There is a vast amount of material on software architecture available on the web. Here we list some material that we found most useful. This is a living list – if there is a resource you are particularly enthusiastic about let us know (or file a pull request).

General Books

  1. Cesare Pautasso. Software Architecture: Visual Lecture Notes. Leanpub, 2020. leanpub.com. Rich book based on years of teaching software architecture at the University of Lugano. Highly accessible, also because the book is almost literally a recording of lectures, including slides. Focus on quality attributes and how to realize them.

  2. Amy Brown and Greg Wilson (editors). The Architecture of Open Source Applications. Volumes 1-2, 2012. aosabook.org. Source of inspiration of this course. Great set of articles describing architectures of selected open source applications, written by experts on these systems.

  3. Jim Coplien and Gertrud Bjørnvig. Lean Architecture. Wiley, 2010. A book targeting smaller teams, with a strong focus on delivering (customer) value.

  4. Gregor Hohpe. The Software Architect Elevator. O’Reilly, 2020. Argues that the successful architect should easily navigate between “engine room” (in the basement) and the boardroom (at the top of the sky scraper). Book based on years of experience from the trenches. Don’t miss Hohpe’s 50 min. techtalk summarizing the key points of this book. See also the summary on Martin Fowler’s bliki. Hohpe also has an “architect’s bookshelf with recommendations for almost 20 books.

  5. Sam Newman. Building Microservices, 2nd edition. O’Reilly, 2021. Everything you always wanted to know about micro-services, including a people’s perspective.

  6. Mark Richards and Neal Ford. Fundamentals of Software Architecture. O’Reilly, 2020. Lots of classical software architecture concepts, including metrics, architectural characteristics, and architectural styles, mixed with practical experience from the authors. Rich collection of patterns, each with 1-5 start rating for the various characteristics.

  7. Shaw, Mary, and David Garlan. An Introduction to Software Architecture, in V.Ambriola and G.Tortora (editors) Advances in Software Engineering and Knowledge Engineering, Volume I, World Scientific Publishing Company, New Jersey, 1993. An early book that helped define and popularize software architecture as a discipline. Funded through a DARPA grant, it’s openly available online.

  8. Bass, Len, Paul Clements, and Rick Kazman. Software architecture in practice. Fourth Edition. Upper Saddle River, NJ: Addison-Wesley, 2022. A popular textbook on software architecture, now in its fourth edition. It covers in depth the quality attributes presented in the “Architecting for Quality” lecture.

  9. Diomidis Spinellis and Georgios Gousios, editors. Beautiful Architecture: Leading Software Engineers Explain How They Think. O’Reilly, Sebastopol, CA, 2009. This edited collection presents the views of architects from the perspectives of enterprises, systems, end-users, and languages.

  10. Buschmann, Frank, Regine Meunier, Hans Rohnert, Peter Sommerlad and Michael Stal. Pattern-oriented software architecture Volume 1: A system of patterns. Chichester New York: Wiley, 1996. First of a series of books knowns as POSA (Pattern-Oriented Software Architecture), which catalogue and describe widely-used architectural patterns.

  11. Schmidt, Douglas C., Michael Stal, Hans Rohnert, and Frank Buschmann. Pattern-oriented software architecture Volume 2: Patterns for concurrent and networked objects. John Wiley & Sons, 2013. Second volume of the POSA series. This one deals with patterns that have become important in modern web-based, mobile, and IoT applications.

  12. Buschmann, Frank, Kevlin Henney, and Douglas C. Schmidt. Pattern-oriented software architecture Volume 5: On patterns and pattern languages. John Wiley & Sons, 2007. This fifth volume of the POSA series is introspective in nature, addressing the question of what a pattern language is and comparing pattern paradigms, including pattern compounds, pattern complements, pattern collections, pattern stories, and pattern sequences.

  13. Richard N. Taylor, Nenad Medvidović, and Eric M. Dashofy. Software Architecture: Foundations, Theory, and Practice. Wiley, 2009. Solid 700 page coverage of classical software architecture, including styles, connectors, Architecture Description Languages (ADLs), adaptation, and domain-specific software engineering.

Documenting Software Architectures

  1. Peter Hruschka and Gernot Starke. arc42: Effective, lean and pragmatic architecture documentation and communication. https://docs.arc42.org/home/. Highly practical collection of 143 tips and 33 examples on how to document architectures. Grouped into 12 main categories (‘arc42 templates’), varying from context and stakeholders to runtime and deployment views.

  2. Nick Rozanski and Eoin Woods. Software Systems Architecture: Working with Stakeholders Using Viewpoints and Perspectives. Addison-Wesley, 2012, 2nd edition. A somewhat abstract book, yet based on years of experience of the authors in an enterprise setting. Perhaps more of a reference than a book to study cover to cover, but full of useful views, perspectives, and patterns.

The Role of the Architect

  1. Martin Fowler. Who needs an architect? IEEE Software, 2003 (pdf). Reflections on what architecture is and what an architect does in just 2.5 page.

Technical Debt

  1. Sunny Beatteay. From 15,000 database connections to under 100: DigitalOcean’s tale of tech debt. Digital Ocean engineering blog, January 2020. Wonderful story about Digital Ocean’s step by step replacement of a critical legacy table that served as a queue by a proper event-driven architecture.

Making Open Source Contributions

  1. GitHub (curator). How to Contribute to Open Source. https://opensource.guide/how-to-contribute/.

  2. Vi Tran, 2020. The Beginner’s Guide to Open Source. https://newrelic.com/blog/best-practices/open-source_gettingstarted

  3. Chris Beams, 2014. How to Write a Git Commit Message. https://cbea.ms/git-commit/.