Building a CQRS/ES web application in Elixir using Phoenix
I&#x27;ve done a number of event-sourced projects, and have built a good amount of tooling over time to support the work.<p>There&#x27;s one overarching issue I see early on in the adoption process.<p>The difference between what is being called &quot;traditional&quot; architecture here and event sourcing is in which things that have to be correct from the very start. I.e.: The things that you can change later in traditional vs event-sourced are different. If you don&#x27;t know realize that this is the case, and proceed with developing an event-sourced system, you&#x27;ll end up facing decisions that you&#x27;d expected to be able to reverse later which are not reversible.<p>Architecture at its root is concerned primarily with &quot;reversibility&quot; - understanding which decisions can be reversed and which can&#x27;t and making sure that you get the irreversible decisions correct up-front, and focus design efforts on them.<p>If you&#x27;ve only ever built systems under a single paradigm, CRUD for example, then you might not even be aware of the differences in reversibility concerns between paradigms.<p>I know folks who&#x27;ve succeeded wonderfully with event sourcing and I know folks who&#x27;ve failed. I don&#x27;t know anyone who has failed with event sourcing who were not themselves to blame for the failure. Some of those have refused to consider the possibility that they are the failure&#x27;s root cause, and then derided others who point that out, as has been done here in this discussion.<p>Event sourcing is a big leap. There is a lot of presumed knowledge that isn&#x27;t easily spelled out in bite-sized chunks like blog posts and tweets. You won&#x27;t learn it (and wield it safely) if you believe that all things should be as readily-consumed as Meteor over Mongo, or Rails, or pick-your-forms-over-data tool.<p>If you don&#x27;t work to become aware of the dominant paradigm that shapes your preconceptions, then it will be next to impossible to leverage another paradigm without polluting it with concerns that are counterproductive.<p>The things that need the application of your intellect in event sourcing are not the things that need the application of your intellect in &quot;traditional&quot; (or any other) architectural paradigm. Square pegs, round holes, etc. But since our perception of the squareness of the pegs is filtered through the lens of our own predispositions, we may not even know that we&#x27;re in the process of attempting to force-fit things that need a tight fit, and that will cause project failure without the tight fit.<p>Event sourcing makes things simple - far simpler than ORM, for example. But it only does so when approaching it from its own predispositions, rather than the predispositions (especially unrecognized) of some foreign and impertinent approach.<p>I find the prospect of working on &quot;traditional&quot; systems depressing now. I find having to solve problems that shouldn&#x27;t exist in the first place to be soul-crushing. I have an expectation of productivity that is sustained and sustainable over the long haul, and doesn&#x27;t decrease even as the size of the system&#x2F;team&#x2F;complexity and expectations grow.<p>But, I&#x27;ve been following event sourcing since it&#x27;s unnamed, prototypical forms in 2006. I started putting it into practice many years later. I didn&#x27;t expect it to come to me fully formed after watching a handful of conference presentations, and I didn&#x27;t expect it to come to me as easily as other architectural paradigms and approaches I&#x27;ve used in the past.<p>I&#x27;m still experiencing new realizations about event sourcing. The journey isn&#x27;t done yet, but I&#x27;m far better off than I was.<p>I&#x27;ve compared notes with colleagues who are also quite deep into the transition and have heard similar observations repeated back to me: I can do an event-sourced system today as fast as I could have built the same system in a rapid-prototyping tool like Rails in years past. However, unlike Rails (for example), my productivity, and my team&#x27;s productivity remains stable, and changes in scale and complexity of the business and its organization don&#x27;t induce the panic that it used to.<p>And my expectation for the quality and the caliber of the implementation has only increased - and dramatically so relative to the implementations I still occasionally see in &quot;traditional&quot; systems.<p>But had I not had to put some distance between my own mind and its hard-won-yet-entrenched preconceptions I might not have seen the instincts and subconscious mechanisms which surely would have led me to underestimating how and where I needed to focus in order to not build elaborate structures that I would have been crushed by in the end.<p>If anyone is really and truly interested in digging into event sourcing, and really seeing it through its own lens (by becoming aware of the existing lens we all may have), I&#x27;d love to help out. Yes, I make money doing this, and yes, I have a vested interest - but I also spend a lot of volunteer time with devs who are earnestly trying to get to the point where event-sourcing and all of its unfamiliar challenges are just another thing that was learned and facility cultivated over time.<p>I can also help ween you off a compulsion to adopt event sourcing for a project that you want to do as fast as you can with a paradigm that you do already have a grasp of. Either way.<p>Ultimately, I find the potential of a future with event sourcing far brighter than one without, but I&#x27;ve had to cross many bridges and dismantle many self-imposed obstructions to get there. I hope that others are open to these kinds of experiences and that we have more profound conversations about event sourcing experience reports from the other side of the chasm.<p>My 2 cents, anyway.