Seam
Description
The boundary where two systems with different native primitives, formats, or conventions have to interoperate — where translation happens, where round-tripping is lossy, and where the interesting failure modes live. Object-relational impedance mismatch (Ambler) is the canonical engineering case: OOP and relational tables can each represent the same domain, but neither’s primitives map cleanly onto the other’s, so the boundary leaks. The diagnostic question — “what is the native primitive on each side, and what gets lost when you cross?” — separates seams from arbitrary interfaces. A clean interface (REST API speaking JSON to a client expecting JSON) is not a seam in the load-bearing sense; a translation point where structure or semantics get squeezed across an awkward fit is.Triggers
User-initiated: User describes friction at an integration point, impedance mismatch, format-translation pain, or “the bug is at the boundary.” Vocabulary cues: “impedance mismatch,” “interface,” “boundary,” “handoff,” “translation.” Agent-initiated: Agent notices that two systems being connected have different native primitives, and the connection is doing lossy translation. Candidate inference: “what is the lossy direction; what gets dropped on round-trip?” Situation-shape signals: Bugs that only fire at integration points (not inside either system alone). Documentation that says “see the docs for system X on how to populate this field.” Refactor proposals that say “let’s wrap their interface in our adapter.”Exclusions
- Homogeneous systems — two services on the same platform speaking the same idiomatic API; the “seam” is essentially absent, just a function-call boundary.
- Internal abstractions within a single mental model — class hierarchies inside one codebase aren’t seams in the cross-system sense; the friction is more about cohesion than format translation.
- One-way pure consumption — reading a static file format from a fixed library; the loss happens once, not on round-trip.
Structure
Relationships
- surface — every seam is a surface from each side; the catalog separates them because the questions differ.
- leaky-abstraction — leaks happen at seams; the abstraction’s container ends, the substrate’s begins, and the mismatch shows.
- multi-channel-ingest — each channel is one seam; the higher-order concept is what coordinates many seams into a unified store.
- active-gate-vs-passive-audit — gates often sit at seams (validate-at-boundary); audit trails record what crossed seams.
- adapter — adapter is the named pattern for translating across one specific seam.
Examples
Object-relational mismatch · computer-science
Object-relational mismatch · computer-science
Christopher Alexander, Sara Ishikawa & Murray Silverstein, *A Pattern Language: Towns, Buildings, Construction* (Oxford University Press, 1977). · architecture-and-design
Christopher Alexander, Sara Ishikawa & Murray Silverstein, *A Pattern Language: Towns, Buildings, Construction* (Oxford University Press, 1977). · architecture-and-design
Agent ↔ tool boundaries · computer-science
Agent ↔ tool boundaries · computer-science
Async / sync boundaries · computer-science
Async / sync boundaries · computer-science
Internationalization / localization · computer-science
Internationalization / localization · computer-science
Joel Spolsky, "The Law of Leaky Abstractions," *Joel on Software* (2002). · computer-science
Joel Spolsky, "The Law of Leaky Abstractions," *Joel on Software* (2002). · computer-science
open() takes thirty seconds.The seam structure is exact: the abstraction and the substrate are the two systems with different native assumptions, the interface is the boundary, and Spolsky’s point is that bugs and surprises concentrate there. His “grim conclusion” is the seam’s defining property — the abstraction saves you time working but not time learning, because to debug the leak you must understand both sides of the boundary, the clean abstraction and the messy substrate it never fully conceals.Inference: Wherever an abstraction hides a substrate, treat the boundary as a seam where the substrate’s behavior will eventually surface, and budget to understand both sides. Spolsky’s law is the warning against trusting an abstraction’s promises at its edge: the more you rely on it, the more you need to know what it sits on, because the leak — the performance cliff, the timeout, the surprising failure — always appears at the boundary, not in the interior of either layer.Markdown-in-repo vs Google-Docs review · computer-science
Markdown-in-repo vs Google-Docs review · computer-science
Michael C. Feathers, *Working Effectively with Legacy Code* (Prentice Hall, 2004), ch. 4 "The Seam Model." · computer-science
Michael C. Feathers, *Working Effectively with Legacy Code* (Prentice Hall, 2004), ch. 4 "The Seam Model." · computer-science
REST API ↔ event-driven systems · computer-science
REST API ↔ event-driven systems · computer-science
Scott W. Ambler, "The Object-Relational Impedance Mismatch" (agiledata.org essay) and *Agile Database Techniques* (Wiley, 2003), ch. 7. · computer-science
Scott W. Ambler, "The Object-Relational Impedance Mismatch" (agiledata.org essay) and *Agile Database Techniques* (Wiley, 2003), ch. 7. · computer-science