I don’t want to push this thread OT but I don’t see those things as being complex in the grand scheme of things and some of them are shared with Elixir in most web apps.
Most web apps written in any language will likely want:
- At least a persistent database, such as postgres
- A reverse proxy to properly handle things like SSL termination, redirects, static file caching, country detection, basic load balancing and many other features that nginx supports
- A way to execute tasks in the background and periodically.
Popular languages like Python and Ruby have battle hardened tools to solve background tasks in all shapes and forms (Celery in Python and Sidekiq in Ruby).
In Elixir, chances are you’d still want to use Oban or another library because in a realistic app you’d want a bunch of features like separate queues, retries, cancelling, uniqueness and scheduled tasks along with a dozen other things a robust background / que library will offer.
The only extra added complexity you may encounter in another tech stack is using Redis, but Redis is one of the most least complicated things to manage from an infrastructure POV. You can leave it running untouched for months or years and it’ll run like a champion. Lots of cloud providers also provide fully managed Redis servers too if you’re into using services like that.
Throw in a bit of Docker and suddenly that Redis complexity kind of goes away even if you decide to self manage it. You can literally add 5 lines of YAML to 1 file and now you have Redis up and running along with the rest of your stuff.
Redis also doubles as a cache back-end and has great support in popular web frameworks.
I haven’t directly used cron in years on any web app because periodic tasks are solved problems with background tools like Celery. It’s also especially nice because it’s distributed too and you can keep your web server pretty much entirely stateless.
Everyone has their preferences but personally I would rather use tools that thousands of folks have been using for many many years because they have a ton of edge cases ironed out and are super well explored and supported. I prefer working in an environment where I can solve the business needs of my apps without having to reinvent a new library from scratch every step of the way.
It’s especially nice when more opinionated frameworks also take care of common things too, because at least you can be confident the library or functionality won’t stop being supported over night because one person decides they are not using it anymore.


















