2+ years ▸ Worked on NHS of Ukraine and few other large projects ▸ Maintain 20+ public Elixir repos used in production ▸ Contribute back as much as I can
concurrently ▸ The syntax to track step on which failure occurred is ugly ▸ To test it you need a complex failure injection for API client stubs ▸ Easy to miss some errors - monster else clause
on long running transactions for databases. A long lived transaction is a Saga if it can be written as a sequence of transactions that can be interleaved with other transactions. The database management system guarantees that either all the transactions in a Saga are successfully completed or compensating transactions are run to amend a partial execution.
multiple atomic steps ▸ Each step consist from transaction and compensation ▸ When transaction fails compensation are run to semantically amend it's effects ▸ Compensation and transactions should be idempotent
Synchronize state across databases ▸ To run distributed transactions Sage can help to elegantly organize logic in your domain contexts. Still young but well-documented and covered with tests.