"Software Architecture as a Set of Architectural Design Decisions": "Software architectures have high costs for change, are complex, and erode during evolution. We believe these problems are partially due to knowledge vaporization. Currently, almost all the knowledge and information about the design decisions the architecture is based on are implicitly embedded in the architecture, but lack a first-class representation. Consequently, knowledge about these design decisions disappears into the architecture, which leads to the aforementioned problems. In this paper, a new perspective on software architecture is presented, which views software architecture as a composition of a set of explicit design decisions. This perspective makes architectural design decisions an explicit part of a software architecture. Consequently, knowledge vaporization is reduced, thereby alleviating some of the fundamental problems of software architecture."
Tomas Petricek's writings on the subject:
Architecture of Open-Source Applications (books)
"Don't Call It a Platform": "Habitability, in the broadest sense, describes how nice (or not) the experience is for the people who have to live in a system. ... I make the argument that we ignore habitability at our peril. Those of us in a place to shape the lived experiences of our colleagues have a duty of care to ensure that we take their needs to heart."
"DDD, Hexagonal, Onion, Clean, CQRS, ... How I put it all together"
"The cloudy layers of modern-day programming"
Platform Engineering Teams Done Right...
The 12-Factor App:
- I. Codebase: One codebase tracked in revision control, many deploys
- II. Dependencies: Explicitly declare and isolate dependencies
- III. Config: Store config in the environment
- IV. Backing services: Treat backing services as attached resources
- V. Build, release, run: Strictly separate build and run stages
- VI. Processes: Execute the app as one or more stateless processes
- VII. Port binding: Export services via port binding
- VIII. Concurrency: Scale out via the process model
- IX. Disposability: Maximize robustness with fast startup and graceful shutdown
- X. Dev/prod parity: Keep development, staging, and production as similar as possible
- XI. Logs: Treat logs as event streams
- XII. Admin processes: Run admin/management tasks as one-off processes
Don't Start with Microservices--Monoliths are your friend
The Nature of Software
Reading
- "You're Slicing your Architecture Wrong!"
- The Architect's Guide to Open Table Formats and Object Storage
- "Architecture vs Model": "One of the biggest problems with business software is that architecture gets promoted more than the domain model. Further, most domain models are ordinary, and could be implemented by school students for a lot less cost than the 7-9 figures often spent. Yet, often the software architecture supporting a model—almost certainly anemic—is generally over engineered."
- Best Kept Secrets of Peer Code Review
- Building Secure & Reliable Systems - Heather Adkins, Betsy Beyer, Paul Blankinship, Piotr Lewandowski, Ana Oprea & Adam Stubblefield (PDF)
- Documents: The architect’s programming language: "Senior developers know how to deploy code to systems made of code. Architects know how to deploy ideas to systems made of people."
- Guide to the Software Engineering Body of Knowledge (email adddress requested)
- How to Design Programs
- How to Write Unmaintainable Code
- Migrating to Cloud-Native Application Architectures (email address requested) (PDF)
- Shape Up - Stop Running in Circles and Ship Work that Matters - Ryan Singer (PDF)
- Sharding vs Partitioning
- Site Reliability Engineering
- Software Engineering for Internet Applications
- Test Driven Development, Extensive Tutorial - Grzegorz Gałęzowski
- The Site Reliability Workbook - Betsy Beyer, Niall Richard Murphy, David K. Rensin, Kent Kawahara and Stephen Thorne
- Why a programmer might actually be a good urban planner
- WSO2 Reference Architecture:
Patterns/Styles
Interesting exemplars/templates/links
Interesting challenges
Detail Pages:
- "Grow Your Own BaaS" In this paper, the concepts of growing your own Backend-as-a-Service (BaaS) platform using vendor agnostic concepts are explored. The proposal is to define, architect, and design a heterogeneous micro-applications based platform.
- "Serverless" The serverless architecture, usually implying smaller atoms of functionality executing on cloud servers.
- Able (or ABLE) An architecture approach research group and assorted artifacts.
- AIAC (Artificial Intelligence Infrastructure-as-Code generator) A library and command line tool to generate IaC (Infrastructure as Code) templates, configurations, utilities, queries and more via LLM providers such as OpenAI, Amazon Bedrock and Ollama.
- AML (Architecture Meta Language) Used to specify the semantics of architecture description languages, ADLs; it is a very primitive language, having declarations for only three constructs: elements, kinds, and relationships.
- Archi Modeling toolkit for creating ArchiMate models and sketches.
- Archimate An open and independent (graphical) modeling language for Enterprise Architecture that is supported by different tool vendors and consulting firms.
- Archimate DSL A DSL for generating Archimate diagrams from source.
- Architectural Decision Records (ADR) An Architectural Decision Record captures a single Architectural Decision, such as often done when writing personal notes or meeting minutes; the collection of ADRs created and maintained in a project constitute its decision log. All of these are within the topic of Architectural Knowledge Management.
- ArchUnit Start enforcing your architecture within 30 minutes using the test setup you already have.
- Building Evolutionary Architectures (2nd Ed) Notes from the book
- C4 A model of representing architecture diagrammatically.
- Cellular Architecture Utilizing cellular principles in an architecture.
- Clean Architecture Bob Martin's screed on architecture. Captured for pedagogical analysis.
- Cloud Adoption Patterns Collection of patterns for adopting cloud.
- Crap4j A Java implementation of the CRAP (Change Risk Anti-Patterns) software metric.
- D2 A modern diagram scripting language that turns text to diagrams.
- Data, context, and interaction (DCI) A paradigm used in architecture to program systems of communicating objects; it separates the domain model (data) from use cases (context) and roles that objects play (interaction).
- Data-Oriented Design A data-centric design approach, typically guided by low-level performance concerns in game development scenarios.
- Design Docs (Google) How Google does design docs
- Diagrams Build architectural diagrams.
- Diagrams As Code Generate valid diagrams from source code.
- Distributed Application Specification Language (DASL) A language for formalizing distributed applications.
- Domain-Driven Design Links and notes on the subject.
- Effective Enterprise Java A collection of topics for effective enterprise systems.
- Entity Component Systems (ECS) A common architecture/design pattern for building games.
- Event-Driven/Event-Sourcing Architecture An approach to building systems via events.
- Event-Driven .NET An Event Driven Microservices Platform for .NET.
- EXPRESS Concerned with the storing and transmitting information in computer systems, in particular, information about engineering data and processes.
- Fallacies of Distributed Computing The set of mistakes that everybody makes when thinking about distributed systems.
- Fallacies of Enterprise Computing My own collection of mistakes that everybody makes when building enterprise systems.
- FIDO Authentication "The answer to the world's password problem."
- Flow-based Programming (fbp) A programming paradigm, discovered/invented by J. Paul Rodker Morrison in the late '60s, that uses a "data processing factory" metaphor for designing and building applications.
- Free Programming Books A collection of free learning resources (books).
- Fundamentals of Software Architecture (2nd Ed) Notes from the book
- Gaphor Python-based diagramming tool.
- Global Software Architecture Summit (GSAS) Barcelona, Architecture, October.
- Handbook of Software Architecture Grady Booch's "thoughts" site.
- Hexagonal architecture Divides work inside and outside of an app instead of into layers.
- High Scalability (Website) notes Collection of notes from the blog http://highscalability.com/
- Icepanel Bridge the gap between design and reality with collaborative modelling; designed for agile teams.
- Ilograph Diagramming Language (IDL) Ilograph diagrams are defined using a the Ilograph Diagramming Language (IDL). IDL is a powerful, declarative, YAML-based language. Each Ilograph diagram defines its resources and perspectives in IDL.
- JAMStack Javascript, APIs, and Markdown presentation layer
- Kansas City Developer's Conference One of the Midwest's best tech-agnostic conferences.
- Kiota a command line tool for generating an API client to call any OpenAPI-described API you're interested in.
- Lawrence Livermore National Labs (LLNL) Software portal for projects built at LLNL.
- Local-first A set of principles for software that enables both collaboration and ownership for users.
- Mermaid Generation of diagram and flowchart from text in a similar manner as markdown.
- Microservices Reading on microservices architecture.
- Model-Driven Engineering (MDE) A style of architecture and development that stresses models as source artifacts (rather than diagrams extracted from source).
- Modelum The Modelum Group has been working on Model-Driven Software Engineering (MDE) since 2005.
- OMG Business Processing and Modeling Notation (BPMN) A graphical notation for specifying business processes in a Business Process Diagram.
- OMG Decision Model and Notation (DMN) A modeling language and notation for the precise specification of business decisions and business rules.
- Onion Architecture Layers presented as circles, each wrapping around a previous one, forming an "onion".
- Oredev Tech conference in Malmo, Sweden.
- Package by Feature Architecture Capitalizes on cohesion and coupling by moving the layering a level down — to the class level — and focusing on coupling and cohesion at a higher level by keeping all classes related to the same feature in the same package/module.
- Platform Revolution How networked markets are transforming the economy and how to make them work for you.
- Polylith A software architecture that applies functional thinking at the system scale. It helps us build simple, maintainable, testable, and scalable backend systems.
- Project Tye An experimental developer tool that makes developing, testing, and deploying microservices and distributed applications easier.
- QCon InfoQ's conferences
- Reading in software A collection of links and articles on software and development.
- Representational State Transfer (REST) Collection of links and reading and notes on Fielding's dissertation.
- RFCs/RFD (Request For Discussion) A means by which architectural (and other) decisions can be made collaboratively.
- Semantic Web A model of the web based more around its founder's original intent (hyperlinks and full-state "documents").
- Service Design Patterns Collection of patterns specific to services.
- SOA Design Patterns A collection of patterns specific to service-orientation.
- Software Architecture: The Hard Parts Notes from the book
- Software Architecture Metrics Notes from the book
- SonarGraph Architect A general purpose static analysis tool and can be best described as the swiss army knife for architects, quality analysts and developers.
- Steve Yegge Rants Some links/excerpts from Yegge's various rants.
- Structurizr Builds upon "diagrams as code", allowing you to create multiple diagrams from a single model, using a number of tools and programming languages.
- Teach Yourself Computer Science A collection of links for learning CS for those who didn't study it at school.
- VSLive 1105 Media's conference about Microsoft.
- Wright (or WRIGHT) A practical formal basis for the description of both architectural configurations and of architectural styles.
- WWW-Architecture Architecture thoughts about the Web itself
- yUML Create and share simple UML diagrams in your wikis, forums and issue trackers.
Last modified 22 September 2025