DEV Community

vindarel
vindarel

Posted on

1 2

Is Elixir or Common Lisp the best language for building a bootstrapped B2B SaaS in 2024?

There was this article and discussion on Lobster last month.

I'll give you the key takeaway right now:

the best language/tooling to start a SaaS with is the one you already know.

Now let's discuss some more.

I want to be convinced and find the Graal, but I’m still torn between Python, and now Common Lisp. When I take a look to maybe rewrite my Python/Django app to Elixir, I miss stuff: no admin dashboard (unless you pay 300USD), no automatic DB migrations unlike Django and CL’s Mito (yet I don’t have Ecto experience so maybe it’s a non issue) (I've been point to Ecto migrations, that's a valid point), a lot of code generation (they rot, don’t they?)…

LiveView? I can use HTMX, its websockets extension, Unpoly, and they are cross-stack. No compile-time type checks, like Python, unlike CL; a deployment story in-between Python (dangerous) and CL (build and send a binary) and, because I am now spoiled with CL’s richness of image-based interactive features, I see much less of them in Elixir (no “compile this function ad get warnings”). And oh, there’s some syntax to pay attention to again, those { % => etc. Elixir’s Emacs modes don’t look good when Slime or Sly offer a ton of features. With Elixir I’m back at the terminal which feels like a regression.

I’m spoiled.

So, is Elixir really the best language for building a bootstrapped SaaS? Python/Django, I admit, despite their flaws, have arguments. For a solo developer, Common Lisp is hyper productive. Its web offering is minimal but if you know the web, plug in a DB, HTMX, a login system and you’re on tracks. CL won’t have shiny dashboards (wait, does it? Grafana dashboard for SBCL and Hunchentoot: memory, threads, requests per second, GC state…) and a supervision tree (only ruricolist/moira to monitor and restart background threads), but you can get a GenServer-inspired actor library (mdbergmann/sento), and I believe they share runtime features: efficiency, live reload is doable. Last but not last, CL is maybe easier to use for other tasks: ingest data efficiently (SBCL is fast), small-ish binaries, scripts (now easier with my CIEL helper).

Elixir is absolutely more shiny and enterprise ready and I don’t know what I miss, but there’s nothing ideal for a rewrite…

Now, after this comment of mine I've been pointed to Torch and Ecto's Gen.Migration, the two looking super useful. Good points. I also started to write my CRUD admin dashboard for Common Lisp, let's see how this goes…

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (2)

Collapse
 
vindarel profile image
vindarel

Also, Torch relies on code generation… I am not a fan, but maybe it works well in practice and the generated doesn't bit-rot too quick? Experience will tell.

Collapse
 
vindarel profile image
vindarel

update: Elixir now has a nice CRUD dashboard with Backpex: hexdocs.pm/backpex/readme.html

(I'm also building my own for CL, unreleased, we'll see how it goes)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more