The Aggregate Had Its Day. Dynamic Consistency Boundary is Next.
Based on Axoniq’s livestream with Allard Buijze, Martin Dilger, and Adam Dymitruk, this article explains how Dynamic Consistency Boundaries replace aggregates to improve agility in event-sourced systems.
There is a familiar moment in many architecture workshops. The event model is clean. The domain language is precise. Business and engineering are aligned. Then someone asks, “Where is the aggregate boundary?” What follows is rarely productive, and it's exactly what a Dynamic Consistency Boundary (DCB) was designed to solve.
A long debate emerges over whether a customer and an order are one entity or two, or whether a line item belongs inside or outside a transaction boundary. Progress stalls, not because the domain is unclear, but because the architecture demands a single static answer to a question that changes with every operation.
This is not a people problem. It is an architectural constraint. Dynamic Consistency Boundaries address this constraint directly by replacing static, pre-declared aggregate boundaries with operation-specific consistency scopes.
What Problem Do Aggregates Solve?
Aggregates originated in Domain-Driven Design (DDD) as a way to enforce transactional consistency. They define a unit of state that can be loaded, validated, and committed atomically. In event-sourced systems, this means replaying every event belonging to an aggregate to reconstruct its current state before applying a command.
This approach assumes that every command requires the full historical state of the aggregate. In practice, this assumption rarely holds.
Consider the operation of canceling an order. The only fact required to make that decision is whether the order has already been canceled. Yet an aggregate-based implementation loads the entire event history of the order: creation, line items, pricing updates, shipping changes, and address modifications. A single boolean decision requires reconstructing all past state.
This is not a trade-off between safety and performance. It is an architectural artifact of a boundary defined too broadly for most operations. The result is unnecessary I/O, higher contention, and tighter coupling between unrelated business rules.
How Dynamic Consistency Boundary Change the Model
Dynamic Consistency Boundary reverses this assumption. Instead of defining a single consistency boundary per entity, DCB defines a boundary per operation. Each command specifies exactly which subset of events must be observed to enforce its business rule.
To cancel an order, the system queries only for OrderCanceled events associated with that order identifier. If none exist, it appends a new cancellation event under a conditional consistency check. No full aggregate replay is required. No unrelated state is loaded. No contention is introduced by price changes or shipping updates occurring in parallel.
As explained during the discussion, DCB is about selecting precisely what must be known from the past in order to make a decision. That selection may be small or large, but it is driven by the business rule itself rather than by a predefined object boundary. In practice, most operations require very little historical context, and this shifts both performance and design characteristics in a fundamental way.
Decoupling Operations from Shared State
Aggregates enforce a subtle form of coupling. Every operation that touches an entity must share the same reconstructed state, even when those operations have little in common. Adding a line item and canceling an order become peers simply because they share a noun, not because they share business meaning.
Dynamic Consistency Boundaries decouple operations at the state level. Each operation defines its own consistency scope based on the data it needs. Cancellation checks only for cancellation events. Line item addition may require item counts and pricing events. A spending limit check may span events across multiple orders.
The boundaries are no longer fixed at design time. They emerge from the business rules themselves. This reduces artificial dependencies between unrelated operations and allows each rule to evolve independently.
Eliminating Technical Events and Sagas
In aggregate-based systems, cross-boundary communication often requires technical events and sagas. When one aggregate must react to changes in another, state is copied through intermediary events that exist solely to propagate information. Sagas coordinate these propagations, introducing orchestration logic that does not belong to the business domain.
With Dynamic Consistency Boundaries, operations can directly query the events they require, regardless of where those events originated. The need to replicate state across streams disappears. Many sagas become unnecessary because the architectural barrier they were created to bridge no longer exists.
As Martin observed, this results in an event model that maps directly to business meaning without technical intermediaries. Events remain readable by domain experts and do not encode architectural workarounds. The cognitive load required to understand system behavior drops significantly.
Performance Characteristics in Practice
A common concern about Dynamic Consistency Boundaries is that broader or more flexible queries will degrade performance. This concern assumes that operations will frequently require large swaths of history. In practice, the opposite is true.
Most business operations narrow their scope compared to aggregate replay. Tag-based queries target only the events relevant to a specific rule. Optimistic locking applies only to the selected boundary, not to every event in a stream. A price update on an order does not block a cancellation check unless the cancellation rule explicitly depends on price.
Support for this model is provided by Axon Framework 5 and Axon Server through tag indexing and conditional appends. These mechanisms allow consistency to be enforced without global locks and without replaying unrelated history. For operations that genuinely require broad context, such as analytics or portfolio-wide checks, the cost is explicit and visible rather than implicit and universal.
Boundaries That Evolve Without Migration
Aggregate boundaries are structural. Once defined, changing them typically requires event migration, upcasters, or data transformation. Over time, systems accumulate historical constraints that make evolution expensive and risky.
Dynamic Consistency Boundaries are logical rather than structural. They are defined by queries, not by how events are physically partitioned. Changing a boundary means changing which events are selected for a given operation. Historical data remains untouched. The same event store can be reinterpreted under new business rules without rewriting history.
This creates a form of architectural liquidity. The system’s understanding of the domain can evolve while its data remains stable. For long-lived systems operating in changing business environments, this distinction determines whether evolution is routine or traumatic.
Organizational Implications
The debate over aggregate boundaries is not merely technical. It consumes engineering time, introduces ambiguity into event models, and slows delivery. Technical events and sagas further widen the gap between business language and implementation.
Dynamic Consistency Boundaries reduce this friction. Event models remain aligned with domain concepts. New engineers can reason about behavior by reading events rather than tracing orchestration code. Business stakeholders can participate in design discussions without translating architectural constructs into domain language. Compliance and audit teams can interpret event histories without technical mediation.
When new requirements arrive that would previously force boundary redesign, the system adapts by changing query scopes rather than restructuring data. This transforms change from a migration problem into a modeling decision.
Conclusion
Aggregates solved important problems in an earlier phase of distributed system design. They provided a practical way to enforce transactional consistency when systems required fixed boundaries and monolithic state reconstruction.
Dynamic Consistency Boundaries address a different set of problems: operational specificity, architectural decoupling, and long-term evolution. They replace static boundaries with rule-driven scopes, reduce technical artifacts in event models, and allow systems to change without rewriting their past.
The aggregate had its day. Dynamic Consistency Boundary defines what comes next.
This article is based on a technical deep dive from Axoniq’s recent livestream conversation with Allard Buijze, Martin Dilger, and Adam Dymitruk.
Frequently Asked Questions about Dynamic Consistency Boundaries
Q: What is a Dynamic Consistency Boundary (DCB)?
Dynamic Consistency Boundary (DCB) is an architectural approach used in event sourcing and Domain-Driven Design (DDD) where consistency is defined per operation rather than per aggregate. Instead of loading an entire aggregate, each command selects only the subset of historical events required to enforce the specific business rule it must guarantee.
Watch this short explainer video >>
Q: How does a Dynamic Consistency Boundary differ from aggregates?
Aggregates impose a fixed transactional boundary that all operations must share. A Dynamic Consistency Boundary allows each operation to define its own consistency scope, based on the events needed to validate its rule, reducing unnecessary coupling between unrelated behaviors.
Q: Why can aggregates create architectural friction?
Aggregates require teams to define consistency boundaries early in the design process, often before real usage patterns are fully understood. This can lead to oversized aggregates, unnecessary state loading, technical events, and complex saga orchestration created primarily to work around rigid boundaries.
Q: How does Dynamic Consistency Boundary improve performance in event-sourced systems?
Dynamic Consistency Boundary improves performance by reducing the amount of history that must be read and validated for most operations. Instead of replaying an entire aggregate event stream, the system reads only the tagged events relevant to the rule being enforced, lowering I/O, reducing contention, and enabling higher concurrency.
Q: Do Dynamic Consistency Boundaries eliminate the need for sagas?
Not entirely, but they often reduce the need for technical sagas. Many sagas exist solely to propagate state between aggregates; with DCB, operations can query the events they need directly, eliminating many intermediate events and coordination workflows.
Q: Can Dynamic Consistency Boundaries span multiple entities or streams?
Yes. A Dynamic Consistency Boundary can span multiple entities or event streams when a business rule requires it. The boundary is defined by the rule being enforced rather than by entity ownership of the data.
Q: How do Dynamic Consistency Boundaries evolve over time?
Dynamic Consistency Boundaries are logical and query-based, making them easier to change. Adjusting a boundary typically means updating which events an operation reads, rather than restructuring aggregates or migrating historical event streams.
Q: What infrastructure enables Dynamic Consistency Boundaries?
Dynamic Consistency Boundaries are supported in Axon Framework 5 and Axon Server, which provide capabilities such as tag-based event indexing, conditional appends, and optimistic boundary locking to enforce rule-level consistency.
Q: Are Dynamic Consistency Boundaries a replacement for aggregates?
DCB shifts the focus from entity-centric modeling to operation-centric consistency. While aggregates remain useful in many scenarios, Dynamic Consistency Boundaries provide a more flexible approach for modern event-sourced systems where business rules often span multiple entities or evolve over time.




