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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="bglusman" data-post="20" data-topic="23853">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bglusman/48/9459_2.png" class="avatar"> bglusman:</div>
<blockquote>
<p>feel there’s still a lack of specificity to some of the alternatives put forwards besides “use structs” etc.</p>
</blockquote>
</aside>
<ul>
<li>
<p>Structs are mostly enforced at compile time. They save you from a part of errors you’d otherwise get at runtime.</p>
</li>
<li>
<p>Structs blow up at runtime if you touch them the wrong way (as your colleague did). And they give you a very clear error message.</p>
</li>
<li>
<p>Structs convey the message that you <em>really</em> want a certain piece of data to be shaped this way or that way. A good programmer will stop and think “why do they disallow removing of keys from this thing?” and maybe go and ask their colleague in charge of that code – this fosters communication in the team which is always a good thing.</p>
</li>
<li>
<p>Structs will slap you on the wrists if you introduce a new field and make it mandatory (the <code>@enforce_keys [:field_a, :field_b, ...]</code> annotation just above the <code>defstruct</code> expression) and you’ll have an exact list of compile errors to work through, which accelerates your work (as opposed to getting paranoid and adding more and more tests which might not even catch the problems that can come into existence by introducing the new field).</p>
</li>
</ul>
<p>The benefits are practical and numerous but mostly gravitate towards “you get errors earlier and thus can react before any production / customer / business data can be harmed”.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="135797" 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/indiffererentaccess-adaptation-of-hashwithindifferentaccess-to-elixir-maps-plug/23853/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-135797" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135797"
                     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="135798" data-post-id="135798">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="bglusman" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bglusman/120/9459_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  bglusman
                    <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="dimitarvp" data-post="19" data-topic="23853">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/48/38664_2.png" class="avatar"> dimitarvp:</div>
<blockquote>
<p>This is not about that. It’s about introducing a module/structure that has an implicit and thus potentially surprising behaviour.</p>
</blockquote>
</aside>
<p>I liked what Elixir Outlaws had to say about the whole explicit/implicit dichotomy…  you may be right that this is “implicitly” doing something but, well…  if thats true aren’t all plug pipelines doing things implicitly?  Are they all bad?  What makes this implicit behavior bad (particularly if it just replaces all string keys with atom keys) and other “implicit” behavior ok? I think it’s all on a spectrum and part of an evolving set of community norms and standards, I admit this is pretty far outside them at the moment and quite likely it should stay there, but that’s a different question then whether this is fundamentally more implicit/bad than other kinds of transformations…</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="135798" 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/indiffererentaccess-adaptation-of-hashwithindifferentaccess-to-elixir-maps-plug/23853/23">Post #22</a>
	                </div>
	            </div>
              <div id="likers-container-135798" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135798"
                     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="135799" data-post-id="135799">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Have you checked <a href="https://github.com/thechangelog/changelog.com" rel="noopener nofollow ugc">Changelog.com’s GitHub repo</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="135799" 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/indiffererentaccess-adaptation-of-hashwithindifferentaccess-to-elixir-maps-plug/23853/24">Post #23</a>
	                </div>
	            </div>
              <div id="likers-container-135799" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135799"
                     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="135800" data-post-id="135800">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="bglusman" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bglusman/120/9459_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  bglusman
                    <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">
								<p>That was the first one I went and looked at actually.  They still had a number of strings in their controllers. (mostly references to “slug” at a quick second glance, but still…)</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="135800" 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/indiffererentaccess-adaptation-of-hashwithindifferentaccess-to-elixir-maps-plug/23853/25">Post #24</a>
	                </div>
	            </div>
              <div id="likers-container-135800" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135800"
                     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="135801" data-post-id="135801">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<pre data-code-wrap="elixir"><code class="lang-elixir">def show(conn, %{"photo" =&gt; %{"width" =&gt; w, "height" =&gt; h}, "lat" =&gt; lat, "lon" =&gt; lon} = params) do
  # Convert string param values to integers or floats and do whatever must be done with them.
end
</code></pre>
<p>I am not saying Changelog’s code is exemplary, don’t get me wrong. Some things in there I’d very definitely approach differently. I believe the advice you’re given above by others is simply discovering that it’s just best to convert outside [and potentially malicious] data to a safe format your internal modules can work with, <em>as quickly as possible</em>. That includes potentially converting it to structs (see the “Parameter object” refactoring pattern for details). The edges of your app have to be rock-solid and that <em>might</em> include some ugly code. But keep it contained in the controllers and nowhere else.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="135801" 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/indiffererentaccess-adaptation-of-hashwithindifferentaccess-to-elixir-maps-plug/23853/26">Post #25</a>
	                </div>
	            </div>
              <div id="likers-container-135801" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135801"
                     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="135802" data-post-id="135802">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="bglusman" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bglusman/120/9459_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  bglusman
                    <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">
								<p>I’m not against structs, but some of the recommended usage of them feels to me like people who want to make Elixir into a statically typed language, or make it seem closer to one… which isn’t a <em>bad</em> thing or something I’m against, but it’s not fundamentally  “correct” either… it probably can/does lead to lower defect rates, but it also can make some refactoring and/or features take longer to develop, and part of what I value in Elixir is how flexible and fast to iterate/change it is… and it’s a big part of what my employers seem to value in it too.  In many parts of the application there’s tolerance for bugs if we get substantial velocity out of it while we’re under time pressure and/or experimenting with new features that are not yet fully baked in scope or shape.  I value the ability to start off more flexible and gradually harden the system over time and as needed.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="135802" 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/indiffererentaccess-adaptation-of-hashwithindifferentaccess-to-elixir-maps-plug/23853/27">Post #26</a>
	                </div>
	            </div>
              <div id="likers-container-135802" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135802"
                     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="135803" data-post-id="135803">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="bglusman" data-post="23" data-topic="23853">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bglusman/48/9459_2.png" class="avatar"> bglusman:</div>
<blockquote>
<p>if thats true aren’t all plug pipelines doing things implicitly?</p>
</blockquote>
</aside>
<p>No. They all modify one and the same object (per user / request, not globally). Nothing surprising or implicit about that, it’s just that some open-source plugs and pipelines save you the trouble of doing a ton of otherwise mundane work by yourself. I do not call that implicit behaviour, I call it convenience and you can lift the veil of mystery there by inspecting Phoenix’s source code which isn’t that big. <img src="https://forum.elixirforum.com/images/emoji/apple/wink.png?v=15" title=":wink:" class="emoji" alt=":wink:" 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="135803" 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/indiffererentaccess-adaptation-of-hashwithindifferentaccess-to-elixir-maps-plug/23853/28">Post #27</a>
	                </div>
	            </div>
              <div id="likers-container-135803" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135803"
                     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="135804" data-post-id="135804">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="bglusman" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bglusman/120/9459_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  bglusman
                    <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">
								<p>Sorry, the real time convo here is getting a little unwieldy/confusing, but thank you for the input and thoughts!  And I agree this is all definitely best handled at the boundaries whenever possible, or perhaps I should say whenever practical as its always <em>possible</em>.  There’s a huge diversity of what actually happens though, and once you have enough code where that’s not happening, part of the question is how to iteratively change code that works but isn’t designed they way you’d like and safely, gradually improve its design.  This came up as one far-fetched idea to explore along that path is all.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="135804" 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/indiffererentaccess-adaptation-of-hashwithindifferentaccess-to-elixir-maps-plug/23853/29">Post #28</a>
	                </div>
	            </div>
              <div id="likers-container-135804" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135804"
                     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="135805" data-post-id="135805">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="bglusman" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bglusman/120/9459_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  bglusman
                    <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">
								<p>Hmm…  so here’s an interesting question…  why doesn’t Phoenix and/or Plug use a struct instead of a bare map for its params objects coming through plug? If it did, a) it might do something like this more naturally, and/or b) I could make something like this that only worked this way on those Params structs…</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="135805" 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/indiffererentaccess-adaptation-of-hashwithindifferentaccess-to-elixir-maps-plug/23853/30">Post #29</a>
	                </div>
	            </div>
              <div id="likers-container-135805" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135805"
                     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="135806" data-post-id="135806">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="bglusman" data-post="23" data-topic="23853">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bglusman/48/9459_2.png" class="avatar"> bglusman:</div>
<blockquote>
<p>What makes this implicit behavior bad (particularly if it just replaces all string keys with atom keys) and other “implicit” behavior ok?</p>
</blockquote>
</aside>
<p>If you <em>only</em> do that, it’s a perfectly fine scenario. But introducing a module that has to choose between resolving a string key or an atom key and one having precedence over the other – that’s definitely implicit / surprising behaviour.</p>
<aside class="quote no-group" data-username="bglusman" data-post="27" data-topic="23853">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bglusman/48/9459_2.png" class="avatar"> bglusman:</div>
<blockquote>
<p>’m not against structs, but some of the recommended usage of them feels to me like people who want to make Elixir into a statically typed language, or make it seem closer to one… which isn’t a <em>bad</em> thing or something I’m against, but it’s not fundamentally “correct” either…</p>
</blockquote>
</aside>
<p>Care to elaborate? Static typing has a number of advantages. Any error you can push to compile time as opposed to runtime is one less sleepless night for you fixing bugs at 2:30 AM.</p>
<aside class="quote no-group" data-username="bglusman" data-post="27" data-topic="23853">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bglusman/48/9459_2.png" class="avatar"> bglusman:</div>
<blockquote>
<p>it probably can/does lead to lower defect rates</p>
</blockquote>
</aside>
<p>It very definitely does, not “probably”, at least in my and many others’ experience.</p>
<aside class="quote no-group" data-username="bglusman" data-post="27" data-topic="23853">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bglusman/48/9459_2.png" class="avatar"> bglusman:</div>
<blockquote>
<p>and part of what I value in Elixir is how flexible and fast to iterate/change it is… and it’s a big part of what my employers seem to value in it too.</p>
</blockquote>
</aside>
<p>That’s nothing that much older languages like PHP cannot give you as well. You clearly see the writing on the wall that Elixir’s creators and/or community would like more compile time enforcement, I see no point in you contesting this or arguing against it. Ruby is also extremely dynamic.</p>
<aside class="quote no-group" data-username="bglusman" data-post="27" data-topic="23853">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bglusman/48/9459_2.png" class="avatar"> bglusman:</div>
<blockquote>
<p>In many parts of the application there’s tolerance for bugs if we get substantial velocity out of it while we’re under time pressure and/or experimenting with new features that are not yet fully baked in scope or shape.</p>
</blockquote>
</aside>
<p>This is a very telling sign that I’d never work with your employers. <img src="https://forum.elixirforum.com/images/emoji/apple/smiley.png?v=15" title=":smiley:" class="emoji" alt=":smiley:" loading="lazy" width="20" height="20"></p>
<aside class="quote no-group" data-username="bglusman" data-post="27" data-topic="23853">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bglusman/48/9459_2.png" class="avatar"> bglusman:</div>
<blockquote>
<p>I value the ability to start off more flexible and gradually harden the system over time and as needed.</p>
</blockquote>
</aside>
<p>That’s <strong>exactly</strong> what Elixir is giving you and you seem to fight it here in this thread. You can use your map with indifferent access; nobody is going to come to you and torture you with electric needles for it. But you also have the option to gradually harden your system <em>right now</em> and you seem to refuse by arguing with me and the others here.</p>
<p>So I am a little confused. You seem to get exactly what you want with Elixir but now, faced with the choice, you don’t want to use it the way you said you would. Help me understand?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="135806" 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/indiffererentaccess-adaptation-of-hashwithindifferentaccess-to-elixir-maps-plug/23853/31">Post #30</a>
	                </div>
	            </div>
              <div id="likers-container-135806" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="135806"
                     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 #30"></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/23853/load_more?page=4">Load more posts (24 remaining)</a>
</div></template></turbo-stream>