---
title: "Foundations of software architecture"
created: 2026-07-02
updated: 2026-07-02
type: source-page
status: imported
namespace: software-architecture-metapatterns
source_repository: https://github.com/denyspoltorak/metapatterns
source_wiki: https://github.com/denyspoltorak/metapatterns/wiki
source_path: "Foundations of software architecture/Foundations of software architecture.md"
source_url: https://github.com/denyspoltorak/metapatterns/wiki/Foundations%20of%20software%20architecture/Foundations%20of%20software%20architecture
source_license_note: "See namespace README; preserve attribution and source links."
---

# Foundations of software architecture

> Imported source page from Denys Poltorak's *Architectural Metapatterns* wiki. Source path: `Foundations of software architecture/Foundations of software architecture.md`.

This part defines some ideas which are used throughout the book:

- [[wiki/concepts/source/foundations-of-software-architecture/modules-and-complexity|Complexity]] and its relation to modules, coupling and cohesion.
- [[wiki/concepts/source/foundations-of-software-architecture/forces-asynchronicity-and-distribution|Forces]] (including non-functional requirements), their conflicts, and how those are resolved through asynchronous communication and distribution of system components.
- Different [[wiki/concepts/source/foundations-of-software-architecture/four-kinds-of-software|kinds of software systems]]: [[wiki/concepts/source/foundations-of-software-architecture/four-kinds-of-software|control]], [[wiki/concepts/source/foundations-of-software-architecture/four-kinds-of-software|interactive]], [[wiki/concepts/source/foundations-of-software-architecture/four-kinds-of-software|streaming]], and [[wiki/concepts/source/foundations-of-software-architecture/four-kinds-of-software|computational]].
- [[wiki/concepts/source/foundations-of-software-architecture/arranging-communication|Communication paradigms]]: [[wiki/concepts/source/foundations-of-software-architecture/orchestration|orchestration]], [[wiki/concepts/source/foundations-of-software-architecture/choreography|choreography]] and [[wiki/concepts/source/foundations-of-software-architecture/shared-data|shared data]].


Please feel free to skip (through) it as you probably know most of them quite well.

## Contents:

- [[wiki/concepts/source/foundations-of-software-architecture/modules-and-complexity|Modules and complexity]]
- [[wiki/concepts/source/foundations-of-software-architecture/forces-asynchronicity-and-distribution|Forces, asynchronicity, and distribution]]
- [[wiki/concepts/source/foundations-of-software-architecture/four-kinds-of-software|Four kinds of software]]
- [[wiki/concepts/source/foundations-of-software-architecture/arranging-communication|Arranging communication]]
  - [[wiki/concepts/source/foundations-of-software-architecture/programming-and-architectural-paradigms|Programming and architectural paradigms]]
  - [[wiki/concepts/source/foundations-of-software-architecture/orchestration|Orchestration]]
  - [[wiki/concepts/source/foundations-of-software-architecture/choreography|Choreography]]
  - [[wiki/concepts/source/foundations-of-software-architecture/shared-data|Shared data]]
  - [[wiki/concepts/source/foundations-of-software-architecture/comparison-of-communication-styles|Comparison of communication styles]]
