Most systems that fail under load have a boundary in the wrong place. The code is rarely the problem.
Profiling finds hot code. It cannot find a missing seam. A pricing engine we took apart had a twelve-second median that had been tuned for years. Decomposition gave a six-fold improvement in weeks.
What we design
- Boundaries. Where state must be consistent, and where eventual consistency is correct. Moving a boundary after teams have formed around it is very costly.
- Delivery guarantees. "We use Kafka" is not a guarantee. A transactional outbox with idempotent consumers keyed on a deterministic identifier is.
- Failure modes. Which components may degrade, which must not, and what each does when a dependency stops answering.
How we work
We work with your engineers, in the open. Every consequential decision goes into an ADR with the alternatives and the reason for the choice.
We sequence a migration so each step is valuable on its own and can be reversed. We use the strangler-fig pattern, with live traffic behind the existing interface and no cutover weekend. A step that cannot be rolled back gets split until it can.