Rationale, currently the system once it has all data from the external system, does all updates in a single call. If anything fails, we would execute the entire call again. If another relevant transaction happens in the interim time, we don't have a way to handle it. The large task record created, with spurious properties, makes it difficult to trace and debug.
- All reads and updates are done in a single call.
- The large transaction code, is partially idempotent, but not fully.
- We don't have a way to handle out of order events.
- We don't have a way to retry errors.
- Traceability is not good.
- There is no queue monitoring.