# The pattern language of software architecture

Patterns of software architecture are all interrelated (*no pattern is an island*). You can rarely make a product in a pure architectural style, and the chances for it to survive undistorted over years are negligible. Software grows iteratively and adapts to its environment.

[*Architectural Metapatterns*](https://leanpub.com/metapatterns) is all about patterns and their relations. It generalizes hundreds of individual patterns into several wider classes ([*metapatterns*](https://metapatterns.io/introduction/metapatterns/)) each of which can be applied to a local or distributed system to change its properties in a certain way. *Rinse and repeat.*

The content is lavishly illustrated with [intuitive NoUML diagrams](https://metapatterns.io/introduction/about-this-book/#diagrams). It’s concise and AI-free.

*Have a good time!*

## [Presentations (outdated)](https://speakerdeck.com/denyspoltorak)

[![Patterns of Patterns](https://metapatterns.io/diagrams/Web/slides/Patterns.png)](https://speakerdeck.com/denyspoltorak/patterns-of-patterns-c322149c-fcdd-4df6-8c6c-f273c7ab17dd) [![Basic Architectures](https://metapatterns.io/diagrams/Web/slides/Basic.png)](https://speakerdeck.com/denyspoltorak/basic-architectures) [![Architectural Extensions](https://metapatterns.io/diagrams/Web/slides/Extensions.png)](https://speakerdeck.com/denyspoltorak/architectural-extensions-c3e506c0-6472-4e2c-8113-b3d8ffa20d63) [![Fragmented Architectures](https://metapatterns.io/diagrams/Web/slides/Fragmented.png)](https://speakerdeck.com/denyspoltorak/fragmented-architectures-bf4d129f-4cd1-46bf-9fb0-248879872b25) [![Implementation Patterns](https://metapatterns.io/diagrams/Web/slides/Implementation.png)](https://speakerdeck.com/denyspoltorak/implementation-patterns)

* * *

## [Introduction](https://metapatterns.io/introduction/)

[![There are too many patterns!](https://metapatterns.io/diagrams/Web/About.png)  
\
About this book](https://metapatterns.io/introduction/about-this-book/)

[![Abstraction, subdomain, and sharding axes with the following text between them: your pattern here.](https://metapatterns.io/diagrams/Web/Metapatterns.png)  
\
Metapatterns](https://metapatterns.io/introduction/metapatterns/)

[![A monolith, layers, plugins, a hierarchy, and services in a system of coordinates that shows partitioning into layers and subdomains.](https://metapatterns.io/diagrams/Web/Topologies.png)  
\
System topologies](https://metapatterns.io/introduction/system-topologies/)

## [Foundations of software architecture](https://metapatterns.io/foundations-of-software-architecture/)

[![Three components each encapsulating a graph of nodes.](https://metapatterns.io/diagrams/Web/Complexity.png)  
\
Modules and complexity](https://metapatterns.io/foundations-of-software-architecture/modules-and-complexity/)

[![Messaging in a three-layered system with the lower layer making multiple calls to hardware.](https://metapatterns.io/diagrams/Web/Forces.png)  
\
Forces, asynchronicity, and distribution](https://metapatterns.io/foundations-of-software-architecture/forces--asynchronicity--and-distribution/)

[![Control, interactive, streaming, and computational systems.](https://metapatterns.io/diagrams/Web/4Kinds.png)  
\
Four kinds of software](https://metapatterns.io/foundations-of-software-architecture/four-kinds-of-software/)

[![A client above three services with question marks between the components.](https://metapatterns.io/diagrams/Web/Communication.png)  
\
Arranging communication](https://metapatterns.io/foundations-of-software-architecture/arranging-communication/)

## [Basic metapatterns](https://metapatterns.io/basic-metapatterns/)

[![A monolithic system that blends application, domain rules, generic code, and data in a single component.](https://metapatterns.io/diagrams/Web/Monolith.png)  
\
Monolith](https://metapatterns.io/basic-metapatterns/monolith/)

[![Interconnected shards.](https://metapatterns.io/diagrams/Web/Shards.png)  
\
Shards](https://metapatterns.io/basic-metapatterns/shards/)

[![A system with three layers: application, domain, and database.](https://metapatterns.io/diagrams/Web/Layers.png)  
\
Layers](https://metapatterns.io/basic-metapatterns/layers/)

[![Services Architecture.](https://metapatterns.io/diagrams/Web/Services.png)  
\
Services](https://metapatterns.io/basic-metapatterns/services/)

[![A pipeline made from input, three processing steps, and output.](https://metapatterns.io/diagrams/Web/Pipeline.png)  
\
Pipeline](https://metapatterns.io/basic-metapatterns/pipeline/)

## [Extension metapatterns](https://metapatterns.io/extension-metapatterns/)

[![Services connected through a middleware.](https://metapatterns.io/diagrams/Web/Middleware.png)  
\
Middleware](https://metapatterns.io/extension-metapatterns/middleware/)

[![Services accessing a shared repository.](https://metapatterns.io/diagrams/Web/Shared%20Repository.png)  
\
Shared Repository](https://metapatterns.io/extension-metapatterns/shared-repository/)

[![A proxy between a client and services.](https://metapatterns.io/diagrams/Web/Proxy.png)  
\
Proxy](https://metapatterns.io/extension-metapatterns/proxy/)

[![Orchestrated services.](https://metapatterns.io/diagrams/Web/Orchestrator.png)  
\
Orchestrator](https://metapatterns.io/extension-metapatterns/orchestrator/)

[![Sandwich Architecture.](https://metapatterns.io/diagrams/Web/Sandwich.png)  
\
Sandwich](https://metapatterns.io/extension-metapatterns/sandwich/)

## [Fragmented metapatterns](https://metapatterns.io/fragmented-metapatterns/)

[![Three-layered services.](https://metapatterns.io/diagrams/Web/Layered%20Services.png)  
\
Layered Services](https://metapatterns.io/fragmented-metapatterns/layered-services/)

[![Polyglot Persistence.](https://metapatterns.io/diagrams/Web/Polyglot%20Persistence.png)  
\
Polyglot Persistence](https://metapatterns.io/fragmented-metapatterns/polyglot-persistence/)

[![Backends for Frontends.](https://metapatterns.io/diagrams/Web/Backends%20for%20Frontends.png)  
\
Backends for Frontends](https://metapatterns.io/fragmented-metapatterns/backends-for-frontends--bff-/)

[![Service-Oriented Architecture comprises layers of services.](https://metapatterns.io/diagrams/Web/Service-Oriented%20Architecture.png)  
\
Service-Oriented Architecture](https://metapatterns.io/fragmented-metapatterns/service-oriented-architecture--soa-/)

[![A hierarchy with three layers. There is one component in the top layer, two components below it, and five components in the lowest layer.](https://metapatterns.io/diagrams/Web/Hierarchy.png)  
\
Hierarchy](https://metapatterns.io/fragmented-metapatterns/hierarchy/)

## [Implementation metapatterns](https://metapatterns.io/implementation-metapatterns/)

[![Plugin Architecture.](https://metapatterns.io/diagrams/Web/Plugins.png)  
\
Plugins](https://metapatterns.io/implementation-metapatterns/plugins/)

[![Hexagonal Architecture with adapters between its core and input, output, database, and libraries.](https://metapatterns.io/diagrams/Web/Hexagonal%20Architecture.png)  
\
Hexagonal Architecture](https://metapatterns.io/implementation-metapatterns/hexagonal-architecture/)

[![Applications running over a microkernel.](https://metapatterns.io/diagrams/Web/Microkernel.png)  
\
Microkernel](https://metapatterns.io/implementation-metapatterns/microkernel/)

[![Applications connected through a mesh.](https://metapatterns.io/diagrams/Web/Mesh.png)  
\
Mesh](https://metapatterns.io/implementation-metapatterns/mesh/)

## [Analytics](https://metapatterns.io/analytics/)

[![Services sharing a dataset, a pipeline, dependency inversion in an operating system with device drivers, and an adapter between a client and a service.](https://metapatterns.io/diagrams/Web/Comparison.png)  
\
Comparison of architectural patterns](https://metapatterns.io/analytics/comparison-of-architectural-patterns/)

[![Various systems called monoliths.](https://metapatterns.io/diagrams/Web/Ambiguous.png)  
\
Ambiguous patterns](https://metapatterns.io/analytics/ambiguous-patterns/)

[![A cycle with the following architectures: monolith, layers, layered services, a sandwich cell interacting with orchestrated layered services, and layers with two databases.](https://metapatterns.io/diagrams/Web/Life%20cycle.png)  
\
Architecture and product life cycle](https://metapatterns.io/analytics/architecture-and-product-life-cycle/)

[![Three services with queues of people and luggage above a transport layer with train stations and trains.](https://metapatterns.io/diagrams/Web/Real-world.png)  
\
Real-world inspirations for architectural patterns](https://metapatterns.io/analytics/real-world-inspirations-for-architectural-patterns/)

[![The pain level of maintaining a project depends on the project's size, with different architectures being optimal for different project sizes.](https://metapatterns.io/diagrams/Web/Heart.png)  
\
The heart of software architecture](https://metapatterns.io/analytics/the-heart-of-software-architecture/)

## [Appendices](https://metapatterns.io/appendices/)

[Acknowledgements](https://metapatterns.io/appendices/acknowledgements/)

[Books referenced](https://metapatterns.io/appendices/books-referenced/)

[Copyright](https://metapatterns.io/appendices/copyright/)

[Disclaimer](https://metapatterns.io/appendices/disclaimer/)

[Evolutions of architectures](https://metapatterns.io/appendices/evolutions-of-architectures/)

[Format of a metapattern](https://metapatterns.io/appendices/format-of-a-metapattern/)

[Glossary](https://metapatterns.io/appendices/glossary/)

[History of changes](https://metapatterns.io/appendices/history-of-changes/)

[Index of patterns](https://metapatterns.io/appendices/index-of-patterns/)

* * *

## The map of system topologies

![The map of system topologies. The vertical asix is partitioning into layers, the horizontal axis is partitioning into services](https://metapatterns.io/diagrams/Web/Map.png)

* * *

## The book

![Cover of Architectural Metapatterns](https://metapatterns.io/cover.png)

This website is an online version of my book *Architectural Metapatterns: The Pattern Language of Software Architecture* which can be downloaded from [GitHub](https://github.com/denyspoltorak/metapatterns) or [Leanpub](https://leanpub.com/metapatterns).

It is a compendium of architectural patterns which sorts them out into a tree-like hierarchy based on the pattern’s structure and function. This [allows for grouping](https://metapatterns.io/introduction/metapatterns/) hundreds of patterns into less then 20 classes and exploring the common features, applicability, and performance of each class.

It also includes supplementary topics that range from the [discussion on the nature of complexity](https://metapatterns.io/foundations-of-software-architecture/modules-and-complexity/) to the comparison of [orchestration](https://metapatterns.io/foundations-of-software-architecture/arranging-communication/orchestration/), [choreography](https://metapatterns.io/foundations-of-software-architecture/arranging-communication/choreography/), and [integration through shared data](https://metapatterns.io/foundations-of-software-architecture/arranging-communication/shared-data/). Aside of that, there is a wide range of [evolutions](https://metapatterns.io/appendices/evolutions-of-architectures/) which show how a system may change under different forces.

*Architectural Metapatterns* is AI-free, 440 pages long, and includes hundreds of [box-and-arrow diagrams](https://metapatterns.io/introduction/about-this-book/#diagrams).

If you like the book or website, please tell your friends about them. *Knowledge must be free!*