I’m often asked about the tech stack I use to build SaaS products. I’m a strong proponent of using whatever you already know best, because for most startups it simply does not matter that much. That being said, these are some of the noteworthy technologies I’ve chosen to use, and reasons why I keep them around.
I found Elixir after spending many years in the Ruby world. There’s a lot to love about Ruby (and Rails), but after building and scaling a large production application for five years, I grew weary of the Ruby “magic” that draws so many to that ecosystem. I love the functional paradigm (no bugs caused by mutability!) and the inherent scalability of the Erlang VM that sits beneath the language. Phoenix (the Rails analogue in the Elixir world) comes with strong conventions baked in, but overall feels less magical.
Ruby on Rails does scale, but I would contend that Elixir/Phoenix is generally more resource efficient. I ran SavvyCal on single Heroku dyno for two years (for a just few hundred bucks a month).
Before delving into TypeScript, I spent a few years writing Elm and developed a strong appreciation for type systems. TypeScript feels like the right balance of type enforcement with practical escape hatches for when you don’t have time to embrace the full rigor.
I came to the world of React shortly after hooks and functional components were becoming mainstream. I’ve never actually written a class-based component. In retrospect, I think I caught it at a really good time when the designers of the framework were really hitting their stride with good ergonomics.
I can’t imagine going back to writing vanilla CSS now having used Tailwind for a number of years.
Eleventy is my static site generator of choice these days. Prior to Eleventy, I was a Jekyll user. Eleventy powers this site and the SavvyCal marketing site. I love the flexibility it affords for building templates of all different languages into one seamless website. I use a mix of Markdown, Nunjucks, Liquid, and vanilla HTML templates in my sites. For SavvyCal, I use the Ghost Content API to pull article data into my Eleventy site with only a few lines of code.
I moved from Heroku to Fly.io for hosting SavvyCal, initially because I wanted to take advantage of node clustering capabilities with Elixir. I’ve since been impressed with Fly’s reliability, performance, and support.
When migrating away from Heroku, we replaced Heroku Postgres with Crunchy Bridge. I can’t stress enough how stellar their support has been!