← Patterns

Integration vs. Composition

Core Concept

Integration makes the experience better inside. Composition makes the system better alongside everything else. These are opposing forces in system design, and the history of computing is largely the story of which won in different contexts.


The Pattern

When designing a system, you face this tension at every level:

ChoiceIntegrationComposition
Data formatProprietary binary (fast, rich)Plain text (universal, greppable)
StorageCustom database (optimized)Filesystem + git (composable)
ProtocolCustom API (tailored)Standard protocol (interoperable)
EnvironmentAll-in-one IDE (seamless)Unix tools + editor (flexible)
KnowledgeWalled garden (curated)Open graph (extensible)

The trap: Integration feels better during demos. Composition wins over years. The enclosed system impresses on day one and frustrates on day 1,000. The composable system frustrates on day one and becomes indispensable by day 1,000.


Where I’ve Seen It


The Design Principle

When in doubt, compose. You can always add integration on top of composable primitives (entity index on top of files, rituals on top of markdown). You cannot easily add composability to an integrated system (extracting data from Notion is hard; extracting data from markdown is trivial).

The hierarchy of durability:

  1. Ideas survive across systems (Smalltalk’s OO ideas live everywhere)
  2. Protocols survive across implementations (HTTP, TCP/IP, MCP)
  3. Environments don’t survive — they get replaced

Invest in ideas and protocols. Build environments lightly and be ready for them to change.



Cross-References