At Helpshift, we face managing complexity of these side effects which touch 10s of different systems. Each side effect poses a failure scenario which can lead to it's own business decision. Compounded failures pose even more complexity. To add to the problems we extending the codebase to add new business logic regularly.
I will present a solution which is a combination of Clojure and FP following techniques. We will also discuss how ideas when combined together can create an elegant solution,
1. Data - Side effects definition as data
2. Almost no syntax - Minimal definition
3. Many functions for one DS - Multiple execution and failure recovery modes for side effects