Jul 16, 2026 · Alejandro Santana · Architecture · Migration · AWS
Review an event-driven migration before the first deploy
The questions that expose ownership, replay, cutover, and rollback risks before a migration becomes production work.
An event-driven migration is safer when it is treated as a sequence of operational changes, not a one-time diagram exercise. Before deploying the first new consumer, a team should be able to explain what event is emitted, who owns it, how it can be replayed, and how the old path will be retired.
The review starts with one narrow flow. Pick a business action, follow it from the command that begins it to the state change that completes it, and name every durable boundary in between. If the path cannot be described clearly for one action, making the whole system event-driven will only spread the uncertainty.
Define the event as a contract
An event is not a database row copied into a message. It is a statement that something meaningful happened. Its name, schema, producer, and compatibility rules should make that meaning clear.
Write down whether consumers may receive duplicate deliveries, whether ordering matters, and how a consumer knows which schema version it received. A producer that evolves without these answers can force every downstream team into a coordinated release.
Choose a replay path before there is an incident
The normal delivery path is only half of the design. Teams also need a safe way to inspect, correct, and replay failed work. That might mean a dead-letter queue, a failure destination, an event archive, or an application-level retry record.
The important point is ownership. Decide who is allowed to replay, what idempotency key makes replay safe, and which side effects must not happen twice. A replay button without these controls is just a faster way to repeat an unknown failure.
Make cutover observable
During a staged migration, run the old and new paths with a specific comparison in mind. Count accepted commands, emitted events, completed side effects, and failures for both paths. Capture enough correlation data to explain a mismatch without manually joining several dashboards.
Start with a small traffic slice or a bounded customer cohort when possible. The objective is not to prove that the new path can process a happy-path event; it is to learn whether it behaves correctly under the real timing, retries, and partial failures of production.
Plan the rollback boundary
Code is often easy to roll back. Published events and data transitions may not be. For every migration wave, state what can be reversed automatically, what needs a compensating action, and what is intentionally one-way.
A good migration plan leaves the team with a sequence of small decisions they can validate. That is much easier to operate than one large conversion that only becomes understandable after it has already changed the system.