<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="364677" data-post-id="364677">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="christhekeele" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/christhekeele/120/1039_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  christhekeele
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="katafrakt" data-post="3" data-topic="70777">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/katafrakt/48/34763_2.png" class="avatar"> katafrakt:</div>
<blockquote>
<p>Ability to replay the state is great, but it seems that the state is still a primary concept and events are secondary.</p>
</blockquote>
</aside>
<p>I’m inclined to agree with <a class="mention" href="/u/zachdaniel" rel="nofollow">@zachdaniel</a> here: if the interface and observable behaviour are the same—and in this case, not strictly defined to begin with—the implementation detail of the persistence model shouldn’t disqualify.</p>
<p>Admittedly, when I first learned about the pattern I myself was nerd sniped by the persistence mechanism turning how I’d thought about state management to that point on its head. But this implementation seems like a pragmatic compromise that works elegantly with Ash fundamentals and avoids some of the expensive projection work laid out in the OG recipe, so I’m more than fine with it.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="364677" data-batch-url="/posts/batch_likers">
                        4
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ashevents-event-sourcing-made-simple-for-ash/70777/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-364677" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="364677"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="364689" data-post-id="364689">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ademenev" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ademenev/120/31942_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ademenev
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote group-Ash-Core-Team" data-username="zachdaniel" data-post="7" data-topic="70777">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/zachdaniel/48/31980_2.png" class="avatar"> zachdaniel:</div>
<blockquote>
<p>What we’re doing, however, is persisting to the projections directly while persisting to the authoritative event log, which is just an implementation detail</p>
</blockquote>
</aside>
<p>What would happen if event persisting succeeds, but the original action itself fails?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="364689" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ashevents-event-sourcing-made-simple-for-ash/70777/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-364689" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="364689"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="364702" data-post-id="364702">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="zachdaniel" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/zachdaniel/120/31980_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  zachdaniel
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Creator of Ash</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>They would roll back together.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="364702" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ashevents-event-sourcing-made-simple-for-ash/70777/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-364702" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="364702"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="364866" data-post-id="364866">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="yordisprieto" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/yordisprieto/120/20915_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  yordisprieto
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>If I am able to construct a given piece of information from the events alone, and the state of my system is derived by it, call it whatever you want.</p>
<p>It is totally fine to have some event sourced systems that guarantees transaction with some piece of State and Event Log; some shortcuts for optimization sake, still, I would personally avoid it, but meh, “It Depends ™️”</p>
<p>That also means that “state” is second class citizen and I should be able to delete it at any time.</p>
<hr>
<p>From Greg Young incoming Book (unedited):</p>
<p>Event Sourcing says that all of our current state is derived off of the events that we store. That is it.</p>
<p>It only states that every piece of state that we have is derived off of this series of events which are structured into (a) log/logs.</p>
<p>It does not matter if we are discussing say a piece of state such as a domain object in memory or whether we are discussing a piece of state such as a table off in a database. ALL of that state is directly derived off of the log of events. Beyond this, any of that state can be thrown away at any moment and rebuilt from scratch by replaying those same events as they are by definition derived off of the log of events. The state is in fact a direct “interpretation”.</p>
<hr>
<p>Have been over half a decade in exclusive event sourcing systems in Elixir so I am happy to see a bit more movement around the topic. Hopefully Ash understand of event sourcing wouldn’t cause problems. Definitely having fun over the weekend with it.</p>
<p>My immediate comment is that I do not see a way to have multiple events, or how to control the event types. Without it, it would be more CDC (Change Data Capture) than Event Sourcing, the event type dimension and control its data is extremely important to understand intent.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="364866" data-batch-url="/posts/batch_likers">
                        5
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ashevents-event-sourcing-made-simple-for-ash/70777/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-364866" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="364866"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="364986" data-post-id="364986">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="vasspilka" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/vasspilka/120/2026_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  vasspilka
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hello, since EventSourcing has been a really important stepping stone in my career and I’ve invested significant time to understand and implement it I want to throw in my 2 cents. First I should note that I may be biased, but in my head EventSourcing (ES) and Domain Driven Design (DDD) are linked, even though one may use ES without DDD or DDD without ES they only have substantial impact when together. Without DDD, ES can be easily replaced with CDC (Change Data Capture) having less effort and effectively the same benefits. As such when I mention ES, it is assumed DDD is present.</p>
<p>I’ve done some form of ES in 4 companies so far, of which I must say only 1 saw substantial benefits using it, the other 3 had almost no benefit and in some cases I would argue it slightly hurt them. The reason? The business did not care for ES (even though they hired engineers to implement it).</p>
<p>The longer I’ve been working with EventSourcing and CQRS the more it has been becoming clearer that it’s not primarily a software architecture per say (even though it certainly is one) but rather it’s a <strong>business strategy</strong>. To successfully implement it you need you need 3 things ordered by importance:</p>
<ol>
<li>A complex domain and Domain experts who understand it</li>
<li>Business who sees ES as their competitive advantage</li>
<li>A technical implementation</li>
</ol>
<p>ES exists to deal with complex problems, it’s a slow and steady approach. Technically we present the benefits of ES as enforced audit-log, async communication, having a time-machine and the ability to recreate state. But in fact the main benefit is the ability to handle ever increasing complexity on a logarithmic curve. Dealing with domain complexity however is not an engineering problem, it’s a business problem. ES/DDD requires a change in the methodology of how software is build, and it must start from the top, the business has to become an active part in designing the software, and that is done though defining Events and how they affect the state of the application.</p>
<p>So getting back to the subject of Ash Events, I think it’s a cool addition to the Ash ecosystem, but overall I don’t find that it will help businesses who want to adopt an ES/DDD strategy. Ash is pretty opinionated on how software is build (through Resources and Actions) that’s a far cry from Events, Aggregates and Handlers. The “Ash way” does not push you towards the change in methodology for building ES software, rather it makes it easier to write declarative resource oriented software (which is amazing in it’s own right).</p>
<p>In contrast, let’s take a look on Commanded, an ES/CQRS framework, it is also very opinionated, however it “pushes” you toward thinking about Events and how they affect the state of your application as the primary concern. Now don’t get me wrong, Commanded as any framework has it’s drawbacks, there are many times I   found it was getting in the way of what we designed as a business, but with even with it’s flaws the intent on focusing on the right thing was there.</p>
<p>So in my opinion the “Ash way” is very different than the “ES/DD way” and I would not recommend it for a business that has decided to do ES. Nonetheless I am sure people will make use of some of the features AshEvents will provide to applications doing the Ash way.</p>
<p>All that being said I love Ash and it’s declarative way of doing things. That’s exacly why I choose to do my startup in Ash, “ES/DDD” is only really worth it when a particular business needs it.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="364986" data-batch-url="/posts/batch_likers">
                        12
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ashevents-event-sourcing-made-simple-for-ash/70777/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-364986" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="364986"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #15"></div>
  </section>
</div>
    <div class="postbit" id="365009" data-post-id="365009">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="zachdaniel" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/zachdaniel/120/31980_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  zachdaniel
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Creator of Ash</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I see the argument here, and ultimately I think we’re on the same page. AshEvents is predicated on “assuming you like what Ash code and design looks like, how can you opt into the other benefits of Event Sourcing”.</p>
<p>A fundamental concept with Ash is that your application should not need to be shaped as an architectural decision. If you’re using event sourcing as a <em>code organization</em> tool then:</p>
<ol>
<li>It’s not a strategy I would choose</li>
<li>Ash doesn’t stop you from doing that at all</li>
</ol>
<p>For example, it’s trivial to have an Event resource, and then a <code>process</code> action that routes events to event handlers, and those event handlers could even be Ash actions if you want.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="365009" data-batch-url="/posts/batch_likers">
                        4
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ashevents-event-sourcing-made-simple-for-ash/70777/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-365009" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="365009"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="365010" data-post-id="365010">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="yordisprieto" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/yordisprieto/120/20915_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  yordisprieto
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>People would need to give up to Resources being around Nouns, and make most of the Resources verbs-made-nouns (workflows) to be effective.</p>
<p>Consequently, Ash needs to provide a robust projection system to have different materialized views and have Resources without any operation that is a side effect (UPDATE, DELETE, INSERT), purely exposing information.</p>
<p>The projection and query side is where I was excited about Ash and its capabilities since it would reduce a lot of boilerplate code and simply a ton.</p>
<p>I feel that Ash could succeed for most business out there since it is a local decision to make, and that is awesome. Still, it requires education around it.</p>
<p>I am supportive of alternatives, while being very careful on misunderstanding what the problems could be in the future, almost 90% of blog posts out there complaining about Event Sourcing mentions some of the following.</p>
<ul>
<li>Change Data Capture (the dimension of the granular event type and its data is gone, everything becomes a 1% CREATE, 1% DELETE, 98% UPDATE events, major red flag)</li>
<li>CRUD and Noun-Based Resources mindset instead of focusing on Workflows/Processes/Verbs</li>
<li>Kafka</li>
<li>Separate database</li>
<li>CQRS as a top-level architecture decision</li>
<li>Event Sourcing as a top-level architecture decision</li>
</ul>
<p>When in reality, all event sourcing is about is having a ledger of events that I can reply at any point to have a projection into a given state I want.</p>
<p>DDD, CQRS, Event Consistency, Separate databases, etc; that is just noise added on top of what event sourcing is. That does not means it doesn’t play nice or they are bad things neither.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="365010" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ashevents-event-sourcing-made-simple-for-ash/70777/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-365010" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="365010"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #17"></div>
  </section>
</div>
    <div class="postbit" id="365014" data-post-id="365014">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="garrison" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  garrison
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Can anyone who has used event sourcing in a real application explain the purpose/advantages? I have had a hard time understanding the purpose of the pattern at the application level.</p>
<p>In particular, I don’t understand why anyone would ever “need” to replay events up to a particular state in this way. You already <em>have</em> the state, no?</p>
<p>I understand why someone would use ES as theory for, say, implementing a database on top of a shared log, or as a framework for building a CRDT implementation, and so on. But I don’t get the impression that’s what people are using these tools for.</p>
<p>I assume this is just ignorance on my part, and this seems like a good place to ask since a few individuals above appear to have actually done this <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="365014" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ashevents-event-sourcing-made-simple-for-ash/70777/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-365014" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="365014"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #18"></div>
  </section>
</div>
    <div class="postbit" id="365016" data-post-id="365016">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="zachdaniel" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/zachdaniel/120/31980_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  zachdaniel
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Creator of Ash</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="yordisprieto" data-post="18" data-topic="70777">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/yordisprieto/48/20915_2.png" class="avatar"> yordisprieto:</div>
<blockquote>
<p>People would need to give up to Resources being around Nouns, and make most of the Resources verbs-made-nouns (workflows) to be effective.</p>
</blockquote>
</aside>
<p>They would, but this doesn’t bother me too much if they are looking to model things in that way. Ash is ultimately a middle-ground domain &amp; application modeling tool. If you want to think of your app in terms of events, it’s all good by me.</p>
<p>Ash provides everything you need to project side effects transactionally alongside application changes.</p>
<aside class="quote no-group" data-username="yordisprieto" data-post="18" data-topic="70777">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/yordisprieto/48/20915_2.png" class="avatar"> yordisprieto:</div>
<blockquote>
<p>When in reality, all event sourcing is about is having a ledger of events that I can reply at any point to have a projection into a given state I want.</p>
</blockquote>
</aside>
<p>Agreed, meaning the AshEvents strategy qualifies for the term <img src="https://forum.elixirforum.com/images/emoji/apple/+1.png?v=15" title=":+1:" class="emoji" alt=":+1:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="365016" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ashevents-event-sourcing-made-simple-for-ash/70777/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-365016" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="365016"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #19"></div>
  </section>
</div>
    <div class="postbit" id="365017" data-post-id="365017">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sodapopcan" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sodapopcan/120/34668_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sodapopcan
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>A bank account comes to mind for me.  I think it’s <em>much</em> safer to replay all of history than to continually add to and subtract from a single “balance” entry.  And of course simpler to find out what accounts looked like at exact points in the past.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="365017" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/ashevents-event-sourcing-made-simple-for-ash/70777/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-365017" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="365017"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #20"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/70777/load_more?page=3">Load more posts (24 remaining)</a>
</div></template></turbo-stream>