I’m pleased to be collaborating with Zachary Daniel to discuss his background & work on the Ash framework. You can read more about Ash here: https://ash-hq.org/
Hayden: Thank you for taking the time to speak to me, I’d imagine most people in the Elixir community are familiar with you & your work but just in case: could you give a short introduction to your background?
Zach: Sure! I’ve been working with Elixir for about 7 years now, coding professionally for close to 10. I’ve been active in the open source community for quite some time now, but a few years ago I started building Ash Framework, which is currently my primary focus. I’ve worked at lots of startups, I’ve even founded and failed my own. Through that I’ve seen tons of projects start, grow, stall (and a few fail). It’s my mission to make this better.
Hayden: How were you first introduced to Elixir? Was there anything specific that made you pursue it as a career choice?Zach: I was working at a startup that was having some scaling issues. We were on RethinkDB and Node, and knew that we needed to switch to Postgres. We built an ETL service in python that failed constantly. And it always liked to do it on Friday at 5PM! So we knew we needed something that could handle the complexity of ETL from a noSQL database to a SQL database. This meant handling all kinds of failures and bad data conditions gracefully. We also knew that we needed to choose something that had a great story for working with Postgres on the backend, and Ecto & Phoenix were an amazing choice for us.
Hayden: How would you describe Ash to a new user?
Zach: This is a question for the ages. Ash is a declarative, resource-oriented application development framework. The best way to think about Ash is an ecosystem of tools designed to help you build your application layer. By application layer, we mean the core of your app, that contains your data, interactions and rules. Applications come in all shapes and sizes, and Ash’s goal is to provide building blocks that can be used to do anything you can dream up. Then, we provide a suite of extensions that allow you to derive traditionally very difficult parts of your application directly from your resource definitions.
Hayden: In terms of your target audience, who would you say will benefit most from trying Ash for the first time?
Zach: The Ash audience has a wide range. People who are unfamiliar with Elixir, or coding in general often find that it allows them to do more with less. More senior engineers often identify with Ash’s mission to stop solving the same problem over and over again, and instead to build a unified tool chain for building applications. With plenty of people in between, I think it really comes down to whether or not the concepts of declarative design or our motto “model your domain, derive the rest” intrigue you. If so, come on down!
Hayden: As someone that hasn’t written much code, I’m intrigued by the thought process around creating a new language, tool or framework. Obviously we all use products we’d love to improve but how did you actually get that into action? How would you describe the process of taking Ash from an idea to a reality?
Zach: Honestly, it came out of the union frustration and joy! I love Elixir, both the technology and the community. At the same time, the way that applications are built was frustrating me to no end. Constantly reinventing the wheel, hodge lodging disparate tools to get the job done. I set out to fix this frustration using the best tool for the job!Hayden: Looking back, is there anything you would have approached differently during the process?Zach: It's hard to say. In hindsight there are a lot of design decisions I could have done better, but hindsight is 20/20. I think it would have been nice to move a bit slower, be a bit more intentional. There are a lot of little messes under the hood in the codebase to clean up (a process we’re undergoing now). All in all, though, I’m pleased with where things are at and where we’re headed!
Hayden: Has anything taken you by surprise during the process? Has it been as you expected?
Zach: This journey has been packed with surprises. Just seeing how a community grows, people come and go, the awesome connections that people make has been inspiring. Probably the most surprising thing is how polarizing Ash has been. There are tons of people who are pretty ardently opposed to Ash. I think a large portion of them are opposed to what they think Ash is. This comes from a combination of them having never used the tool, it resembles things that burned them in the past, and me not being the best at explaining exactly what it is I’m building. Plenty of people are picking up a saw, trying it out and saying “This is the worst hammer I’ve ever used!” With that said, there are plenty of valid criticisms of Ash and I don’t want to discount anyone who disagrees with our ideas by saying “Oh, they just don’t get it”. At the end of the day, what matters to me is that we’ve got a great community of people shipping applications and helping each other out.
Hayden: I understand that you’re averaging over 3,000 downloads a week, that’s great growth in a niche community. Seeing as you personally interact with users via Discord, how are you finding the scaling process as the user base grows?
Zach: It's going better than I thought it would! For a long time the community was held together essentially by late nights and long hours from me. And while that is still a factor, there are plenty of people stepping in to help support each other. Alembic’s support has of course been a game changer in that arena. Their funding of my work has helped them of course, but it has also made a massive difference to other Ash users.
Hayden: What do you have in mind for upcoming changes/improvements to Ash?
Zach: There are two major components missing to Ash resources that are on the short list, and progress is being made on them currently. Those are bulk actions (we have bulk creates/upserts) and atomic changes. Those two will round out the feature set allowing for all kinds of new and powerful capabilities. The other big one that we’re working on is generators. We don’t have them yet, so currently everything is very manual to set a project up.
Hayden: I know you’re quite active within the community, where can we see you sharing your wisdom next?
Zach: We’ve got a training coming up at ElixirConf 2023, and I’ll also be giving talk there about Ash 3.0, where we’ve been and where we’re headed. I’ve already heard from a bunch of Ash users that are attending, and I’m super excited to see everyone!
Hayden: I understand Alembic has been very supportive of your work on Ash, could you tell me more about them?
Zach: Absolutely! They’ve been so gracious in allowing me to push Ash further and support the community. This project wouldn’t be what it is today without their support. They’re using Ash, Elixir, LiveView and all sorts of other modern tech to ship high quality applications at light speed. Its been a joy working with a group of people so sharp. I’ve learned a lot, and many of them have even contributed to Ash!
Hayden: Last question, we always like to finish with this one: what would you tell your Elixir beginner self?
Zach: This is a good question. I’d tell myself to take it easy. The code will be there tomorrow. Elixir is so much fun for me that its so easy to get sucked in to every new and interesting problem, and forget the world around me. So I’d tell myself to go outside, get some fresh air, touch grass. There is more to life writing code, despite how it may feel sometimes.
Hayden: Thank you so much for taking the time out to speak with me, I look forward to sharing this with the community :)
Zach will be offering training at Elixir Conf, buy tickets here:
https://2023.elixirconf.com/#tickets
Check out Alembic here: https://alembic.com.au/