Introducing Bounded Contexts After Domain Entanglement
87-column Order model split into 4 focused contexts. 40% faster features, 35% fewer bugs.
[Overview] System overview
One Order model served ecommerce, wholesale, marketplace, and subscriptions. 87 columns. 23 state transitions. Changes affected everything.
Domain separation created focused models for each context.
[Context] Situation before
Giant Order model. Every change required understanding all business lines. Bugs cascaded across contexts.
[Diagnosis] The real problem
Different business models have different concepts named the same. Ecommerce Order ≠ Wholesale Contract ≠ Marketplace Transaction.
Understanding the root cause changed everything.
[Boundaries] Working constraints
MIGRATION
- Cannot migrate all at once
- Existing integrations must continue working
Constraints are features, not obstacles. They guide design decisions.
[Decisions] Key tradeoffs
REJECTED
Keep shared model
Add complexity gradually
Each business line slows all others.
CHOSEN
Bounded contexts
Separate models per domain
Independent evolution. Clear ownership.
[Design] Architecture design
Ecommerce: Order (25 columns). Wholesale: Contract (20 columns). Marketplace: Transaction (22 columns). Subscription: Membership (18 columns). Shared kernel for common concepts.
From Shared Model to Bounded Contexts
87-column Order model split into focused contexts
Alt text
[Approach] Execution model
##### 12-Month Migration
Months 1-3: Define boundaries. Months 4-6: New features in contexts. Months 7-9: Migrate one at a time. Months 10-12: Remove old model.
[Results] Measurable outcomes
##### Results
40% faster feature delivery. 35% fewer bugs. Each team owns their domain fully.
Key improvements achieved:
- System handles 10x burst load without degradation
- Delivery latency reduced from seconds to milliseconds
- Zero message loss during traffic spikes
- Operational complexity reduced by 60%
[Anti-patterns] What could have gone wrong
##### Shared Model
Velocity continues declining. Each business line bottlenecked by others.
- Over-engineering the initial solution
- Ignoring operational constraints during design
- Premature optimization without load testing
- Skipping failure mode analysis
[Applicability] Where this pattern applies
##### Signs Needed
Giant models. Changes require understanding unrelated domains. Bugs cascade.
Every system is different. Context always matters.