Tenets
- Each message contract should be self-describing and independently evolvable
Source(s): Claude code dump,
“Each message contract should be self-describing and independently evolvable” — where does this come from? I should be honest: that’s not a single attributable quote. It’s a synthesis of well-established messaging principles from multiple sources: Enterprise Integration Patterns (Hohpe & Woolf) — the Document Message pattern: each message carries all the data the receiver needs. Udi Dahan / NServiceBus guidance — messages should be owned by one logical endpoint; sharing types across services creates coupling. MassTransit documentation — explicitly advises against sharing message types across service boundaries via shared assemblies. SOA principles — “share contract, not class” (Don Box’s four tenets of SOA, later refined by Microsoft’s SOA guidance). Postel’s Law / Tolerant Reader pattern (Martin Fowler) — consumers should be resilient to schema changes they don’t care about, which requires messages to evolve independently. DDD bounded contexts — each context owns its own model; sharing model types across contexts is an anti-pattern.