Make failure recoverable
Every distributed flow needs an answer for timeout, retry, duplication and partial success.
Architecture
These are anonymised examples of the kinds of architecture problems I work on. The emphasis is on decisions, trade-offs and operating behaviour rather than client-specific implementation details.
Enterprise integration
A multi-system flow where Salesforce initiates business actions while SAP remains the system of record for downstream commercial processing.
Multiple dependent calls can turn a single user action into a fragile chain if transaction boundaries are not explicit.
Keep Salesforce focused on customer and process context while middleware owns cross-system routing and transformation.
Use correlation IDs, retriable operations and visible error states so failures can be recovered without duplicate business transactions.
Callout limits, response times, idempotency, partial success, data ownership and operational monitoring.
Service architecture
A support architecture where the challenge is not simply assigning work, but balancing capacity, priority, skills and customer context.
Routing rules become hard to operate when business priority, agent availability and exception handling are mixed together.
Separate assignment logic, service automation and agent experience so each can evolve independently.
Make queue behaviour and fallback paths observable rather than relying on hidden automation.
Capacity models, re-routing, ownership changes, duplicate case creation and automation recursion.
Engineering architecture
A codebase scales better when developers do not have to reinvent trigger control, logging, async orchestration and configuration for every feature.
Feature-by-feature code often creates duplicated logic, inconsistent error handling and test fragility.
Use clear layers and reusable platform utilities while resisting frameworks that add abstraction without reducing complexity.
Make behaviour testable at service boundaries and use metadata for genuinely variable business configuration.
Bulkification, transaction state, recursion, async limits, log usefulness and coupling between UI and domain logic.
Architecture principles
Every distributed flow needs an answer for timeout, retry, duplication and partial success.
Know which system owns the data, which layer owns orchestration and where transformation belongs.
A design is incomplete if support teams cannot understand what happened when something fails.