Reconsidering Phoenix Moving Forward
From hype to hard truths
Tags: opinion, phoenixIt has been a while since I wrote any blog posts. This was primarily due to me doing some internal introspection in my hopes, wants, dreams and desires regarding my career and the way forward in these unknown times of AI.
Personally, I really enjoy programming, and for the foreseeable future I don’t see myself caving in to the desires of using it to write code. I will most certainly use it to review some pieces of code I wrote, and ask it for implementation suggestions, but I will remain in control of the code and the quality of the applications that I produce.
The downwards spiral
I read this article the day it was published: Phoenix.new - The Remote AI Runtime for Phoenix. The TLDR is that Phoenix now has an AI agent supplied by Fly.io and it understands Elixir and Phoenix more than other AI tools apparently, so is a much better choice at vibe coding Phoenix apps.
The part from the article that concerned me the most is this:
I’m already using Phoenix.new to triage phoenix-core Github issues and pick problems to solve. I close my laptop, grab a cup of coffee, and wait for a PR to arrive
Now I don’t want to dunk on Chris at all. This is not that kind of post. I appreciate everything he has built and he is one of the OSS maintainers that I absolutely respect the most. But, knowing that the core maintainers are experimenting with AI agents to actively contribute to the framework itself is very concerning for me.
A framework is part of an application’s core architecture. They should aim to be as stable and reliable as possible, because they’re foundational. If this were happening in some optional generator for a feature that might or might not be useful then I would have totally been okay with the use of AI. But in phoenix-core
?
With the latest 1.8.0 release the framework now ships with AGENTS.md
, and sure we can manually delete it, but it shows how opinionated the framework is in shoving features you never asked for down your throat.
Another point about how opinionated Phoenix is, is how they changed phx.gen.auth
in 1.8.0. IMHO, it was great as is. Now it comes with magic links by default, with no way to opt out unless the user goes to their settings and provides a password. What???
The alternative
For me the alternative is simple. Just stick with good ‘ol Rails for everything. I respect the heck out of DHH for standing his ground in this uncertain time and doubling down on his statement that Ruby is for humans. We don’t need machines writing or reading Ruby. For those of us that have worked with Ruby we know how readable and understandable it is.
I totally get how you need to copy and paste some wild functional mess from JavaScript into ChatGPT to get an understanding of what is happening and maybe to make a couple of simple changes. We don’t have that concern in Ruby. Code is executed in a predictable way and it is concise and the purpose is clear.
Rails is also still maintained by hand, DHH is still in control of everything that goes in, and he sure as hell won’t be doing it with his laptop closed and just waiting for machine trained regurgitated slop to be fed into the framework.
I have always been on the side of the Rails users shouting out about the lack of a built-in auth (to name one missing feature). Although we did get a very basic auth generator in Rails 8, what I love about it is that it doesn’t assume much. It doesn’t force features you don’t need (or want) on you.
I totally get why Rails has (and lacks) the features it does now. The Rails maintainers are extremely considerate about not wasting your time with things you will need to painstakingly delete manually after scaffolding a new application.
Conclusion
In conclusion, I am still very troubled by the direction Phoenix is heading. That being said, this is all my personal opinion. Take it with the lightest grain of salt. There is no perfect language or framework. Some devs might love all this AI agent crap being stuffed into the frameworks, while it is a disappointment for others.
I really wanted to use Phoenix more in my personal projects. But from here on out I will be dedicating more time to Ruby and Rails instead. I still work for a company using Elixir and Phoenix heavily, so while this isn’t goodbye, it is more of a rebalancing of where I spend my personal coding energy.