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


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mudasobwa" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mudasobwa/120/5298_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mudasobwa
                    <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 Cure</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group quote-modified" data-username="Schultzer" data-post="8" data-topic="76329">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/schultzer/48/4339_2.png" class="avatar"> Schultzer:</div>
<blockquote>
<p>[…] stick with hard science […]</p>
</blockquote>
</aside>
<p>I am not so sure. I love rules for this clinking sound they do when you break them. The humanity could not (arguably) survive without the tablets, covered with 10 anti-patterns. If Leonardo stuck with the hard science, his heritage would have narrowed to a couple of murals.</p>
<p>In 2026, the Newton’s laws of motion are not hard science anymore, but I do still estimate when I’m to arrive at the destination without applying the relativistic adjustment.</p>
<p>We should not stick at all. They write the “anti-patterns” paper, I do write my rant, we talk, and everyone benefits from the argument.</p>
<blockquote>
<p><strong>Truth springs from argument amongst friends</strong> — David Hume</p>
</blockquote> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="392671" 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/anti-antipatterns-in-elixir-library-guidelines/76329/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-392671" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="392671"
                     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="392676" data-post-id="392676">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I cannot agree more.</p>
<p>There’ll always be fuzzy at the edges of such guidelines, but usually someone starting out (without the tools of making their own tradeoffs yet) is unlikely to operate just in that fuzzy realm. In the past I’ve had my own experiences – before such guidelines existed – of trying to do something like ecto does it just for <a class="mention" href="/u/michalmuskala" rel="nofollow">@michalmuskala</a> to tell me ectos architecture is not where you want to start. The issues with it becomes really obvious once you start looking at the hoops ecto has to jump through with <code>Repo.put_dynamic_repo</code> - apis, which can be avoided if you do not have lagacy to maintain.</p>
<p>There however comes the time where you land on the fuzzy portion as well, but with the guidelines in mind you might be able to layer e.g. global behaviour over overridable per call/per process options instead of leaving the global switches as the only option.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="392676" 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/anti-antipatterns-in-elixir-library-guidelines/76329/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-392676" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="392676"
                     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="392725" data-post-id="392725">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Very good post.</p>
<p>While I agree with some points and don’t agree with the others in the post, I think that it highlights the bigger problem behind it: <strong>Official language documentation is not a place for coding recommendations</strong>. Here are my points why it should be changed or removed:</p>
<ol>
<li>
<p>This can be just a regular documentation. Instead of saying “avoid using application env”, I think that <code>Application</code> module doc should be extended to something like “application env is global, so it is not applicable in cases where different configurations may be used simultaneously”. And this point is more important than it seem: documentation must be <em>easily discoverable</em>, and when engineer learns about application env, they must learn about the possible drawbacks of it in the documentation about application env. Engineer won’t randomly stumble across some doc with guidelines.</p>
</li>
<li>
<p>This is a poor band aid. Imagine you stumble across the nuclear plant and you find the big red button which says “Immediate self-destruction. Do not press it under any circumstances”. Why would a plant have this button in the first place if it’s so bad and wrong?</p>
<p>Coming back to Elixir, you can change the language to make wrong things inexpressible or just make sure that the developer explicitly acknowledges the drawbacks. For example, add the <code>mix new --library</code> which would generate a template for library without <code>config/</code> directory and no connection to <code>config/</code> in <code>mix.exs</code>. Or rename the <code>Application.get_env</code> to <code>Application.GlobalEnv.get</code>. Or for supervised processes, add the <code>Task.Supervisor</code> in the generated root supervisor code. Or for exceptions in control flow: deprecate handling exceptions without stacktrace and make sure that developer must always explicitly state that their <code>rescue</code> is handling the stacktrace, thus developer is acknowledging that this is not just a control flow, it is an exception which collects the stacktrace into a list, which affects performance.<br>
These examples are not important and may be wrong, I am just trying to bring attention that the language can be self-contained and it can lead engineers to correct solutions without any recommendations. “Good” things can be easier to express than “bad” things.</p>
</li>
<li>
<p>This is opinionated. Again, I can list many thing I personally find more important than any of those present in the guidelines. For example, “Try to avoid using Application and instead expose the root supervisor which can be started independently”. Or “avoid singleton processes with global names”. Or “dont install any executables or download any binaries in runtime”, etc. We can’t fit all our experience in this guideline, it will always be incomplete, insufficient.</p>
</li>
<li>
<p>It would make a great blog post, but the official language documentation brings too much authority. I’ve been participating in discussions during code reviews (defending not only my own code) where this doc and the infamous “code smells” doc were used as the arguments appealing to the highest authority: the language documentation itself. And you may say that these guidelines are only guidelines, not strict rules, but that’s misleading. First, almost every other line in documentation is a strict rule, and I would argue that documentation must be as strict and as precise as possible. Second, it is just the weight of authority, it is really hard to argue with the opinion of the core team member or the language creator (as it should be), but the language documentation is the ultimate boss and I think that it is too much for just recommendations.</p>
</li>
</ol>
<hr>
<p>However, these code smells and guidelines are good in a sense that they highlight the problems the language has. And having recommendations articles in docs won’t help. These problems require proper solutions which include changing the language or improving the regular documentation.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="392725" 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/anti-antipatterns-in-elixir-library-guidelines/76329/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-392725" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="392725"
                     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="392745" data-post-id="392745">
  <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>In the age of LLMs, these anti-patterns can and will be replaced with various homemade or community linters – based on <code>ast-grep</code>, or just your own Elixir AST analyzer (Claude Fable rolled a primitive version of that for me in 2h).</p>
<p>I tend to agree that anything that people spot as “anti-patterns” in official docs loses <em>all</em> nuance immediately and people start following it unconditionally, with zero critical thought. I’ve been on the receiving end of “Why are you questioning Jose Valim, do you know better than him?” and my response of “I likely don’t but he’s not here now and he does not know the intricacies of our projects, requirements and priorities” absolutely did not land even when I presented an alternative. On that basis alone, I dislike the “official anti-patterns” and have been vocal about it in the past. Dogma is rarely good.</p>
<p>On the other hand, if that leads to little bit less crappy code out there, it would be a win. I have my doubts but in the grand calculus of the entire Elixir area, it’s probably still a net gain.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="392745" data-batch-url="/posts/batch_likers">
                        3
                      </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/anti-antipatterns-in-elixir-library-guidelines/76329/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-392745" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="392745"
                     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="392753" data-post-id="392753">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="jhogberg" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jhogberg/120/24176_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  jhogberg
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Erlang Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="Asd" data-post="14" data-topic="76329">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/a/c68b51/48.png" class="avatar"> Asd:</div>
<blockquote>
<ol start="2">
<li>This is a poor band aid. Imagine you stumble across the nuclear plant and you find the big red button which says “Immediate self-destruction. Do not press it under any circumstances”. Why would a plant have this button in the first place if it’s so bad and wrong?</li>
</ol>
</blockquote>
</aside>
<p>I’m not sure this analogy holds. I’d rather compare anti-patterns to Freon, which is by many measures a great thing but one whose side-effects weren’t discovered until much later. Quite often we have to deprecate things after learning they’re bad after lots of trial and error.</p>
<aside class="quote no-group quote-modified" data-username="Asd" data-post="14" data-topic="76329">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/a/c68b51/48.png" class="avatar"> Asd:</div>
<blockquote>
<ol start="4">
<li>[…] where this doc and the infamous “code smells” doc were used as the arguments appealing to the highest authority: the language documentation itself.</li>
</ol>
</blockquote>
</aside>
<p>At which point I’m sure you politely pointed out that the document itself says to not take it as dogma, and that a particular anti-pattern may indeed be the best approach to the problem at hand.</p>
<aside class="quote no-group" data-username="dimitarvp" data-post="15" data-topic="76329">
<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>I tend to agree that anything that people spot as “anti-patterns” in official docs loses <em>all</em> nuance immediately and people start following it unconditionally, with zero critical thought. I’ve been on the receiving end of “Why are you questioning Jose Valim, do you know better than him?” and my response of “I likely don’t but he’s not here now and he does not know the intricacies of our projects, requirements and priorities” absolutely did not land even when I presented an alternative. On that basis alone, I dislike the “official anti-patterns” and have been vocal about it in the past. Dogma is rarely good.</p>
</blockquote>
</aside>
<p>If someone does not have the confidence to make a judgment call over whether a particular “anti-pattern” is justified given the circumstances, then they’ve pretty much declared themselves incompetent. If we simplify things a bit (perhaps too much) our whole industry is about adapting <em>our particular requirements</em> into something machines can work with, and we’d be entirely redundant if that could be done by following the documentation without reflection. Someone would’ve turned that into a program that does it for us by now, and to the extent that Claude Code et al can do it, we’re still needed for grounding the result in reality.</p>
<p>Hence, I’d say the fault lies not with the documentation but with the folks who take recommendations as gospel and/or wield them like a cudgel.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="392753" 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/anti-antipatterns-in-elixir-library-guidelines/76329/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-392753" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="392753"
                     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="392759" data-post-id="392759">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thats exactly the problem, obviously you could just say that whatever place that person work at is toxic and they should find a new place to work ASAP. But that would miss the whole point of this, that people might be in a place where they don’t have that much control, and should we really make it easier for incompetent people to do the wrong thing?</p>
<p>There are better ways to help people then writing a declaration.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="392759" 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/anti-antipatterns-in-elixir-library-guidelines/76329/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-392759" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="392759"
                     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="392762" data-post-id="392762">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Just to add my 2c, the anti-patterns section has helped me more than it has caused issues when I was starting out.</p>
<p>Also, trying to pander to the lowest denominator, i.e. those who are not able to interpet the “this isn’t gospel” part, is a losing battle. If it isn’t this, then there’d be something else to latch onto. If the anti-patterns were taken out from the Elixir docs and Jose hosts it on his own or dashbit’s blog, you’re going to still run into the same exact problem with those people at work but now newcomers would likely not see it.</p>
<p>It’s really a people problem of <em>that workplace</em>, not the language maintainers’, in my opinion. Obviously not to discount the difficulty of that problem.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="392762" data-batch-url="/posts/batch_likers">
                        3
                      </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/anti-antipatterns-in-elixir-library-guidelines/76329/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-392762" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="392762"
                     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="392764" data-post-id="392764">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mudasobwa" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mudasobwa/120/5298_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mudasobwa
                    <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 Cure</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="pjode" data-post="18" data-topic="76329">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/pjode/48/31180_2.png" class="avatar"> pjode:</div>
<blockquote>
<p>It’s really a people problem of <em>that workplace</em>, not the language maintainers’</p>
</blockquote>
</aside>
<p>Well, I (actually, nobody) never said that’s the maintainers’ problem.</p>
<p>The problem is wording. And the “<em>quod licet Iovi, non licet bovi</em>” mentality.</p>
<p>Check how Fred Hebert <a href="https://learnyousomeerlang.com/" rel="noopener nofollow ugc">did the very same thing with an elegance</a> (“<em>Don’t drink too much kool-aid</em>” notes instead of “<em>Anti-patterns</em>”.)</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="392764" 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/anti-antipatterns-in-elixir-library-guidelines/76329/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-392764" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="392764"
                     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="392766" data-post-id="392766">
  <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 group-Erlang-Core-Team" data-username="jhogberg" data-post="16" data-topic="76329">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jhogberg/48/24176_2.png" class="avatar"> jhogberg:</div>
<blockquote>
<p>Hence, I’d say the fault lies not with the documentation but with the folks who take recommendations as gospel and/or wield them like a cudgel.</p>
</blockquote>
</aside>
<p>Absolutely. And sadly that’s exactly what is happening: they wield the antipatterns like a cudgel.</p>
<p>Conversely, adding such documentation they perceive as being handed a cheap and easy-to-use cudgel. It’s a two-pronged problem.</p>
<p>I’ll agree that we can’t ban having rocks in the city just because somebody can use them as a murder weapon though. <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>
<p>A lot of people just want to get something done and move on; I sympathise with that in a startup setting – but a nuance often missed is that <strong>“moving fast and breaking things” while keeping customers satisfied hits a plateau, <em>hard</em>, sooner than they expect</strong>. Just a mere 6 months later your CEO is in talks with 4 more customers and now you suddenly don’t have only one customer anymore and lo and behold, half your system has hardcoded business rules inside the code, global state everywhere (how people allow more than the absolute very minimum amount of <code>Application.get_env</code> calls in their code remains a mystery to me), sync tests (in Elixir of all PLs!), an app full of timeline processing people still uses <code>DateTime.utc_now</code> and not a easy-to-mock shim, etc.</p>
<p>And then the classic problem: “Why can’t you just do X? We moved so quickly before!”. If I hear that one more time this year, I might actually go retire to farm tomatoes and potatoes.</p>
<p>The problem with good practices is that people wisen up about them 6-12 months down the line. The long tail of negative consequences of “winging it” and “do you know better than Jose Valim?” <em>is not visible in the meetings where your experience gets overruled by vibes and impatience</em>. It’s always later.</p>
<p>The amount of times I was called by former colleagues (CEOs included) telling me “You were right, Dimi” might sound like a covert brag but with the years this began giving me bitterness much more than satisfaction.</p>
<aside class="quote group-Erlang-Core-Team" data-username="jhogberg" data-post="16" data-topic="76329">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jhogberg/48/24176_2.png" class="avatar"> jhogberg:</div>
<blockquote>
<p>If someone does not have the confidence to make a judgment call over whether a particular “anti-pattern” is justified given the circumstances, then they’ve pretty much declared themselves incompetent.</p>
</blockquote>
</aside>
<aside class="quote no-group" data-username="pjode" data-post="18" data-topic="76329">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/pjode/48/31180_2.png" class="avatar"> pjode:</div>
<blockquote>
<p>Also, trying to pander to the lowest denominator, i.e. those who are not able to interpet the “this isn’t gospel” part, is a losing battle. If it isn’t this, then there’d be something else to latch onto.</p>
</blockquote>
</aside>
<p>Agreed on the premise and you’re both crushingly correct. The nuance here is that often people can’t just leave a bad workplace, <em>especially</em> today when the illusion that “devs are easy to get rid of and get a new one” is still in full swing for a lot of businesses, and many of them have severely reduced their hiring. Add to that the fact that Elixir, much to my regret, remains niche, and you get a picture of “well maybe I shouldn’t leave because my experience yet again got overruled and I know people will call me in a year telling me I was right”.</p>
<p>Let’s not forget a lot of people are with families and just leaving and finding a new job might be anything but “just leave and find a better place”; kids need clothes, school tuition, and a thousand other things.</p>
<p>So very often one has to stay and fight a doomed battle with people who made up their minds three years ago.</p>
<p>But I don’t fully detest that. When I was in such less privileged positions, I partially learned to navigate stubborn people. And as mentioned above, not all are truly unreasonable; some are just overwhelmed and rushing. Sitting them down and trying to dissect a problem works, part of the time, especially when you show them that you all are fighting the same problems and have the same mission.</p>
<hr>
<p>And I agree with <a class="mention" href="/u/mudasobwa" rel="nofollow">@mudasobwa</a>; framing and phrasing matters a lot. But admittedly, I have no better idea. I’d not put those antipatterns in the official docs in the first place – but that ship has sailed.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="392766" 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/anti-antipatterns-in-elixir-library-guidelines/76329/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-392766" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="392766"
                     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="392767" data-post-id="392767">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="mudasobwa" data-post="19" data-topic="76329">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mudasobwa/48/5298_2.png" class="avatar"> mudasobwa:</div>
<blockquote>
<p>Well, I (actually, nobody) never said that’s the maintainers’ problem.</p>
</blockquote>
</aside>
<p>To clarify, it was a response to remarks about workplace scenarios which was definitely mentioned at least once and without me going back through the thread, I feel like, was referenced more than once. So it was an extrapolated implication since there’s only 2 parties in that scenario. Apologies, as I thought my wording when I submitted was clear it was an implication and not a call out to people’s explicit statements.</p>
<aside class="quote no-group" data-username="dimitarvp" data-post="20" data-topic="76329">
<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>The nuance here is that often people can’t just leave a bad workplace</p>
</blockquote>
</aside>
<p>Yes for sure. I was picturing an individual, I think it was your post mentioning an incident of, (loosely quoting) “you think you know more than Jose”, and not an entire workplace.</p>
<p>That said, is a workplace really that bad because they force everyone to strictly adhere to the anti-patterns section, or is it that a workplace is bad because of something more general, such as not trusting their developers, or whatever may be the case. If a workplace forced the anti-patterns section as gospel, even though it says not to, but otherwise was a good place to work, I’d be able to live with that since that’s rarely the case <img src="https://forum.elixirforum.com/images/emoji/apple/laughing.png?v=15" title=":laughing:" class="emoji" alt=":laughing:" 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="392767" 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/anti-antipatterns-in-elixir-library-guidelines/76329/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-392767" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="392767"
                     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/76329/load_more?page=3">Load more posts (6 remaining)</a>
</div></template></turbo-stream>