<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="381729" data-post-id="381729">
  <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>The problem is that a “business domain” which is not allowed to have invalid state at any time is not a real thing that exists in the real world. It can only be constructed with extraordinary harm to the UX, which is what the article painstakingly explains with careful examples.</p>
<p>The perspective that you are coming from is very common. You imagine a situation in which the state is allowed to be invalid for a little while, as a treat, but once it reaches the backend it must necessarily be beaten into shape by validators and never allowed to deviate again. It is <em>this</em> mentality which Wittens argues, correctly, is incompatible with reality.</p>
<p>I say this as a <em>user</em> of computers, not as a programmer: I am absolutely sick of software that is built this way. “Enterprise” software, which has somehow escaped the enterprise and now terrorizes the rest of us everywhere we turn. It’s exhausting. We can do better.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381729" 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/value-object-and-primitive-obsession-code-smell/39529/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-381729" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381729"
                     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 #21"></div>
  </section>
</div>
    <div class="postbit" id="381731" data-post-id="381731">
  <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>The disconnect, fundamentally, is that you imagine this complexity to be “of the frontend” rather than “of the application”. It is <em>you</em>, not him, who views the world through this lens.</p>
<p>The complexity which some backend engineers like to pretend does not exist is the essential complexity of the application itself. It’s not accidental, and it’s not something to be avoided. Your <em>purpose</em> as a computer programmer is to solve for it properly rather than push it away.</p>
<p>The split between backend and frontend is very real, but amounts to little more than a network connection. The concerns of the application exist as a <em>whole</em>, not in separate parts.</p>
<p>The reason you cannot use tools like cascading deletes to solve the described problem is that the application needs to have full control and understanding of what is being deleted. If the user presses “undo” and a delete cascades, you have now lost the information needed to perform the symmetric “redo”.</p>
<p>If this is not immediately obvious to you it is likely because you have never <em>tried</em> to implement undo/redo in a real app, in which case I strongly recommend you give it a go. That’s the only way things will ever get better.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381731" 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/value-object-and-primitive-obsession-code-smell/39529/23">Post #22</a>
	                </div>
	            </div>
              <div id="likers-container-381731" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381731"
                     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 #22"></div>
  </section>
</div>
    <div class="postbit" id="381732" data-post-id="381732">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<blockquote>
<p>The problem is that a “business domain” which is not allowed to have invalid state at any time is not a real thing that exists in the real world.</p>
</blockquote>
<p>Having modelled numerous business domains now, and implemented them, this is absolutely false. It seems to me that you’re blurring lines. The business domain is actually something you -can- control and manage, establishing clear boundaries and ensuring that valid state is the only way in which a bounded context can operate safely. You’re blurring the lines with your point about Enterprise software, and I see such arguments made a lot, that because X is done badly, X must be bad. This is a false dichotomy. And to be honest I don’t really know what you mean by “Enterprise software”. It’s a rather loaded term that means different things to different people.</p>
<blockquote>
<p>You imagine a situation in which the state is allowed to be invalid for a little while, as a treat, but once it reaches the backend it must necessarily be beaten into shape by validators and never allowed to deviate again.</p>
</blockquote>
<p>Not once it reaches the backend, once it reaches a domain boundary. It’s a subtle but technically important piece.</p>
<p>Also, replying to a separate comment you made to someone else: for context, I <strong>have</strong> implemented undo/redo and guess what - that was in a DDD application and it was technically gorgeous, with enforced valid state at all times. At the time we could not believe how easily event sourcing (in particular) handled this component, literally out of the box.</p>
<p>Coming back to the topic at hand, let’s think about something like an email address. If you want to work with valid email addresses in your domain, how do you enforce that? Just assume that the string that is provided is always a valid email and push any errors further down your stack, maybe minutes or months after the invalid email was created?</p>
<p>I realise you’re not saying “never enforce valid state”, but it also seems a stretch to extrapolate that out to “valid state is never possible”. My experience (of which I have over 25 years, as a software engineer and CTO), has demonstrated otherwise. In fact, I would go so far as to say that the best applications I have built, have been in the last 5-10 years as I’ve learnt about DDD and the power it brings to software development.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381732" 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/value-object-and-primitive-obsession-code-smell/39529/24">Post #23</a>
	                </div>
	            </div>
              <div id="likers-container-381732" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381732"
                     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 #23"></div>
  </section>
</div>
    <div class="postbit" id="381734" data-post-id="381734">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="garrison" data-post="23" data-topic="39529">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>The disconnect, fundamentally, is that you imagine this complexity to be “of the frontend” rather than “of the application”. It is <em>you</em>, not him, who views the world through this lens.</p>
</blockquote>
</aside>
<p>This simply begs the question. The burden is on the author to provide arguments in support of this point but unfortunately I think the vast majority of their examples are <em>not</em> well chosen since they concern use cases which very clearly pertain to FE contexts. Decoupling logic designed to handle those cases (which very well might not want to enforce validity!) from BE systems is not “pretending it does not exist.”</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381734" 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/value-object-and-primitive-obsession-code-smell/39529/25">Post #24</a>
	                </div>
	            </div>
              <div id="likers-container-381734" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381734"
                     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 #24"></div>
  </section>
</div>
    <div class="postbit" id="381735" data-post-id="381735">
  <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>I only replied because you mentioned game development. I have little interest in a discussion on modeling business domains. I’m sure you’re very good at it, certainly better than me.</p>
<aside class="quote no-group" data-username="Oddman" data-post="24" data-topic="39529">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/oddman/48/39728_2.png" class="avatar"> Oddman:</div>
<blockquote>
<p>I realise you’re not saying “never enforce valid state”, but it also seems a stretch to extrapolate that out to “valid state is never possible”.</p>
</blockquote>
</aside>
<p>I appreciate your attempt to argue in good faith here, but you have still (I’m sure unintentionally) misrepresented my point.</p>
<p>It’s not that valid state is never possible, but that ensuring state is valid <em>at all times</em> as it transitions between valid states is not possible. This is a concept which is hard to understand in the abstract, which is why I provided a link to an article with what are, at least to me, clear and helpful examples.</p>
<p>There are exceptions to everything, and there <em>are</em> cases where you want to guarantee “validity” and normalize data. Bureaucratic business processes are the canonical example. Email addresses are probably not a great example (in fact it is very common <em>not</em> to verify them), but passwords would do just as well, and in fact the same author <a href="https://acko.net/blog/apis-are-about-policy/" rel="noopener nofollow ugc">has another excellent article on that topic</a>.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381735" 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/value-object-and-primitive-obsession-code-smell/39529/26">Post #25</a>
	                </div>
	            </div>
              <div id="likers-container-381735" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381735"
                     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 #25"></div>
  </section>
</div>
    <div class="postbit" id="381736" data-post-id="381736">
  <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>Of course you have every right to your opinions, but I don’t really care if the author has successfully roasted backend devs or not. This article had immediate utility for me: there are certain types of computer program which I struggled to implement before reading it, and now I do not. So I share it when I can, in case the same is true for someone else. It might not be true for you!</p>
<p>Personally I am not interested in drawing a line between frontend and backend contexts; I think systems should be designed as a whole. But maybe this is orthogonal.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381736" 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/value-object-and-primitive-obsession-code-smell/39529/27">Post #26</a>
	                </div>
	            </div>
              <div id="likers-container-381736" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381736"
                     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 #26"></div>
  </section>
</div>
    <div class="postbit" id="381740" data-post-id="381740">
  <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
                    <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>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="sodapopcan" data-post="15" data-topic="39529">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sodapopcan/48/34668_2.png" class="avatar"> sodapopcan:</div>
<blockquote>
<p>Gotta call this one out as Changesets are not just about validation but also about, ahem, changes.</p>
</blockquote>
</aside>
<p>I probably should have been clearer earlier, but <code>I never said they are only about validation</code>.</p>
<p>From the official docs:</p>
<blockquote>
<p>Changesets allow filtering, <strong>type casting</strong>, <strong>validation</strong>, and constraints when manipulating structs,</p>
</blockquote>
<p>For the last 5+ years, I’ve been using changesets to enforce a baseline of correctness in what is, frankly, a pretty YOLO typing environment. If I have the proper tools, I would be doing that at the edge only (I tried that, I tried the discipline route, it didn’t work, and I refuse to blame the hard working talented people I work with)<br>
The main reason I never built a separate package is simple: I didn’t want to add more fragmentation or cognitive load to the ecosystem or to teams. People already know Ecto. That’s good enough, for now.</p>
<p>It has served me well. After 9 years working with Ecto and Phoenix and building production systems in Elixir, I’m comfortable saying I understand when Ecto is appropriate and how to use it responsibly.</p>
<p>Personally, I’m pragmatic about this. I don’t feel strongly either way. At this point, I care more about what works well for teams than about ideological purity.</p>
<p>Anyway, I am moving on from the Ecto discussion.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381740" 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/value-object-and-primitive-obsession-code-smell/39529/28">Post #27</a>
	                </div>
	            </div>
              <div id="likers-container-381740" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381740"
                     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 #27"></div>
  </section>
</div>
    <div class="postbit" id="381750" data-post-id="381750">
  <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>LOL, uh sorry miscommunication on my part (and sorta misdirected squarely at you).  Of course “changes” include validations (hence “hand-in-hand”).  The params-manipulation thing is just a <em>huge</em> pet peeve of mine and I always assumed that it stems from people thinking changesets is only about validations.  Ok, no need to talk about Ecto any further.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381750" 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/value-object-and-primitive-obsession-code-smell/39529/29">Post #28</a>
	                </div>
	            </div>
              <div id="likers-container-381750" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381750"
                     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 #28"></div>
  </section>
</div>
    <div class="postbit" id="381756" data-post-id="381756">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="yordisprieto" data-post="1" data-topic="39529">
<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>What is your take about the “primitive obsession” code smell in Elixir?</p>
</blockquote>
</aside>
<p>The most senior answer I can give here is: *It depends* haha <img src="https://forum.elixirforum.com/images/emoji/apple/upside_down_face.png?v=15" title=":upside_down_face:" class="emoji" alt=":upside_down_face:" loading="lazy" width="20" height="20"></p>
<p>Jokes aside, generally speaking, I do think that primitive obsession is a real problem, especially when modeling rich domains. However, the opposite can certainly be abused as well.</p>
<p>I guess my rule of thumb is usually to think if the abstraction is useful/ provides anything on top of the raw value, for instance:</p>
<p>a) Is the data correlated? <em>(in case of multiple values)</em><br>
b) Is the shape static or dynamic? <em>(enforceable keys)</em><br>
b) Do I need to enforce the shape? <em>(structs vs maps, match by type)</em><br>
c) Does the shape bring any value to the system? <em>(Does it provide information, improve validation, or overall understanding and maintainability of the system?)</em></p>
<aside class="quote no-group" data-username="garrison" data-post="14" data-topic="39529">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p><a href="https://acko.net/blog/i-is-for-intent/" rel="noopener nofollow ugc">Free yourself of this mentality before it’s too late</a>.</p>
</blockquote>
</aside>
<p>It might be just be me, but I found this article quite boring to read and somewhat pedantic, to be honest, but again, maybe I’m not as enlightened as the author on the matter.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381756" 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/value-object-and-primitive-obsession-code-smell/39529/30">Post #29</a>
	                </div>
	            </div>
              <div id="likers-container-381756" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381756"
                     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 #29"></div>
  </section>
</div>
    <div class="postbit" id="381762" data-post-id="381762">
  <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
                    <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>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group quote-modified" data-username="thiagomajesk" data-post="30" data-topic="39529">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/thiagomajesk/48/31904_2.png" class="avatar"> thiagomajesk:</div>
<blockquote>
<p>The most senior answer I can give here is: <em>It depends</em> haha <img src="https://forum.elixirforum.com/images/emoji/apple/upside_down_face.png?v=15" title=":upside_down_face:" class="emoji" alt=":upside_down_face:" loading="lazy" width="20" height="20"></p>
</blockquote>
</aside>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://yordisprieto.com/context-is-king">
  <header class="source">

      <a href="https://yordisprieto.com/context-is-king" target="_blank" rel="noopener nofollow ugc">yordisprieto.com</a>
  </header>

  <article class="onebox-body">
    <div class="aspect-image" style="--aspect-ratio:690/387;"><img src="https://yordisprieto.com/opengraph-image.png?opengraph-image.18aq0s7h3wel8.png?dpl=dpl_6NziXPLPm7csvyzKdQfAiAVW7fhC" class="thumbnail" alt="" width="690" height="388"></div>

<h3><a href="https://yordisprieto.com/context-is-king" target="_blank" rel="noopener nofollow ugc">Context Is King | Yordis Prieto</a></h3>

  <p>Context rules everything around us. Without context, there is no understanding.</p>


  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>
 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381762" 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/value-object-and-primitive-obsession-code-smell/39529/31">Post #30</a>
	                </div>
	            </div>
              <div id="likers-container-381762" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381762"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-last-post cat-last-post" title="Last post!"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <span class="all-loaded">— All posts loaded —</span>
</div></template></turbo-stream>