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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I can across this post looking for something else and while I’m like a half year late to the party…</p>
<aside class="quote no-group" data-username="sodapopcan" data-post="29" data-topic="69829">
<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>The key thing here is that if you don’t use Ash, you are going to be faced with learning some well-meaning (hopefully) soul’s bespoke framework</p>
</blockquote>
</aside>
<p>So, all of this. Seriously. I know I’m late to the party but +1 and +more.</p>
<p>I plan on doing a write-up of my own on Ash. We’re a little over a year in on it the <em>reason</em> I decided to use it was because I was dealing with a bespoke framework that <em>I made</em> and knew in and out. Even though I’m something of a documentation fascist, it wasn’t enough to train my small team well enough. It worked okay but… Ash does so much more. It was almost depressing personally, haha. “OMG! This is ah-mazing! Why didn’t I do that?”</p>
<p>I have taken a few startups from cradle to grave and we always end up building some form of this stuff. Authorization, mapping API calls to queries, auto generation of specs, some way to integrate documentation about resource into the specs, some kind of standard for CRUD interfaces, etc. The list goes on.</p>
<p>My own framework grew out of my first experiments in Elixir and luck made it part of a company about 18 months later because we needed something <em>now</em>. It was a good learning experience and all, but when we were doing a bunch of migration and starting another application I was more versed with Ash and thought we’d give it a go.</p>
<p>Another huge issue with bespoke frameworks isn’t just all the issues <a class="mention" href="/u/sodapopcan" rel="nofollow">@sodapopcan</a> mentioned. Even with my relatively wide latitude at my job, trying to get people outside of engineering to invest time and energy into <em>tooling</em> is a pain. A huge pain. Getting an executive to think about anything “holistic” is already a huge mountain to climb in most institutions. My thought was, “We can plug away at this (maybe) or someone else can continue growing a system with a community.” That’s a big win over Maybe Next Sprint™ which is nothing but code speak from Product for “never” or “feel free to do that on your own time.”</p>
<p>My place of business is in a safer place with Ash than it is with some internally grown toolset. If <em>I</em> drop dead, there is still support, a book, patches, oversight, a community, etc. Yeah, maybe there is a risk of <a class="mention" href="/u/zachdaniel" rel="nofollow">@zachdaniel</a> vanishes one day, but if you’re running a bespoke framework, you’re <em>already</em> at risk for that with fewer safety nets.</p>
<p>A year in, it’s been a win. <a class="mention" href="/u/zachdaniel" rel="nofollow">@zachdaniel</a> has been an amazing, unpaid source of support. I update the framework weekly at this point because the few breaks it has caused get fixed sometimes in under an hour after I pop over to the Discord. On top of that, watching ZD’s presentations, reading his blogs, and going through what was done philosophically with Ash gave me a huge comfort level about him being someone who “just gets it.”</p>
<p>I’ve had no issue adding a couple little features I thought would be nice, fixing bugs, and contributing. The community is just lovely.</p>
<p>I wish I could contribute more! Unfortunately, I’ve been too busy putting the framework to work at my day job and it’s helped me personally no longer be the sort of technical bottleneck on my team. I can focus on my actual experience in our business domain which is so much better than all the bike-shedding this framework solves.</p>
<p>I’ve even had to build my own API layer to conform with my company’s “standards” and while it wasn’t nothing, Ash’s introspection and reflection did exactly what I needed them to do. Basically overnight I have an API that’s more capable than pretty much every microservice in our infrastructure. Why? Because the basics that almost every bloody business logic system will absolutely have to take care of are <em>already</em> taken care of!</p>
<p>Okay, last plug because really, I need to do this write up anyway…</p>
<p>We added Ash incrementally and were able to learn as we went. I don’t find that resource system to be that hard to grasp. Maybe that’s because my own frameworks have always worked similarly, but… that was easy. Our early Ash work is <em>awkward</em> (in some respects because we were trying to force some of our own conventions on it out of habit) and we have learned a lot since, but you know what? The early stuff still conforms to the interfaces and works fine. We even mixed and matched Ecto queries in there where we didn’t understand things. It works fine.</p>
<p>Okay, one more one more thing…</p>
<p>I came from the Rails world. People throw the word “magic” around a lot. Code you don’t understand often looks downright magical, especially DSLs. That’s the point. I feel like there’s been an unnecessary backlash against “magic” because… I actually have no idea why. If something seems like magic, check out the documentation and/or get a book. LiveView is pretty bloody magical and I want it to stay that way! Sometimes I feel that software developers will do anything to get out of reading books and documentation, including reinventing wheels solved very well by existing DSLs, lol.</p>
<p>Okay. Done now. Try Ash though because it rules. It takes some time. It’s a lot to absorb. Odds are, you need most of it anyway.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="377451" data-batch-url="/posts/batch_likers">
                        18
                      </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/my-thoughts-on-ash/69829/32">Post #31</a>
	                </div>
	            </div>
              <div id="likers-container-377451" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="377451"
                     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>