SaaS tools that we use to build products in 2021
Artem Rudenko
Software engineer, founder of ottofeller.com
Table of contents
The year 2020 comes to its final day. It was a year full of events, especially full of virtual events, due to well known circumstances. And now we are getting very close to the year 2021, which is going to be better, brighter and hopefully a less virtual year. Everyone from OttoFeller would love to wish you all the best in the New Year! This blog post is our annual recap which covers SaaS tools and platforms that help us in delivering projects for our amazing customers. We had been using these tools in 2020, and will be using most of them in 2021. Let's dig into details.
Hosting of JAMStack projects
Our main specialization is digital products. In other words the majority of our projects are JAMStack web apps. With the frontend built on Next.js. So, it's not a surprise that we host a lot of our projects on Vercel. Being founded by authors of Next.js, Vercel is an amazing SaaS platform that significantly speeds up collaboration and iteration over projects features. It works well for small startups who need quick iteration cycles, as well as for big companies where a smooth collaboration is a key to successful projects.
One of the greatest things about Vercel is that it's not just a hosting provider. It's a comprehensive SaaS platform for web developers that enables dozens of integrations . E.g. you can enable an integration that runs Lighthouse performance check right after website deployment. Or you can connect a DB to your project, not even leaving Vercel's dashboard! The platform seems to grow at a fast pace, and it is very likely that they are going to become a one-stop solution for delivering web apps in 2021.
Netlify is another service that is worth mentioning. It is very similar to Vercel. For us it works best when it comes to static websites, and especially to Gatsby. Unfortunately we found that Netlify doesn't play super smoothly with Next.js out of the box. It requires some manipulations with extra plugins in order to make Next.js server side rendering work, otherwise they deploy Next.js projects as prebuilt static websites. Other than that, it's a great tool for a quick deploying of a static website in a highly maintainable way.
Backend and DB
Things become more complicated when it comes to backend tools and processes. In case of frontend stuff everything is simple, as JavaScript and static HTML/CSS files can always be deployed by uploading them to web server. Backend solutions are often intricate, there are much more development platforms than just JavaScript or TypeScript. Don't forget about a DB! You will always want a managed DB SaaS, instead of maintaining self-hosted DB cluster. It is expensive not just for a startup, but even for a medium-sized company.
Backend hosting and deployment solutions come in many different ways. Here are some of them which we prefer in our projects.
A SaaS over PaaS
Or managed PaaS. Sounds a bit weird, but it describes accurately what platforms like Render.com do. They let one to abstract away from details of PaaS management with all its related DevOps work and give you an all-in-one applications and DB hosting. They sell resources and a high level API that allows deploying apps in a very quick and seamless way. By apps I mean any apps — a next.js app right from Github repo, Hasura instance, or Redis node. Maybe Celery? Almost everything you can imagine!
The downside of this approach is a cost. If you have a few weekly hours of DevOps guy in your team to manage a small Kubernetes cluster, then this way is probably not the most efficient one for you.
Pure PaaS
Well known cloud hosting providers like AWS, Google Cloud, Microsoft Azure or DigitalOcean provide raw computational and infrastructure resources. Virtual servers, DB and computational clusters, load balancers, firewalls and others. You will not find there an API for deploying your apps magically right from Github repo, everything needs to be done manually by DevOps specialists.
It seems like there is no advantages of pure PaaS over the managed approach, but let's look at a different angle.
When you need a full control over your infrastructure:
- You would want everything to be in one place
- You would probably want to fine tune the configuration of your setup
- Of course you would prefer to avoid a vendor lock and keep the ability to switch the vendor any time you want
- And I'm absolutely confident that you would want to decide when to update your software to a new major version.
With managed solutions this is not always possible:
- Very often you will end up with multiple providers serving different pieces of your product. Imagine that your app requires an exotic DB, not supported by your managed PaaS service, now you need to find another provider and learn its API
- Things like when and how a cluster starts to scale up, and even scale down can be critical to projects with high load. Default settings of managed PaaS services are not always perfect.
- Finally. When a managed PaaS API or their CLI API updates and the new version introduces incompatibility you are forced to update either immediately or during a transition period.
These are the reasons why sometimes we prefer deploying complete full stack projects to Kubernetes. All the issues listed above are not the case when you run the entire product with all the services or microservices in a single self-hosted Kubernetes cluster.
A hybrid approach
As something that sits in between of SaaS over PaaS and pure PaaS I would mention the DigitalOcean Apps Marketplace. It allows deploying a virtual server with preinstalled app by click of a button. You still manage computational resources on your own, but you don't need to provision apps and network services manually. Worth mentioning that there is an API for provisioning the apps. For us DigitalOcean Apps Marketplace is a perfect option for dev teams. For example there is a Hasura app which essentially is a ready to go solution with Hasura instance and PostrgeSQL DB in a single Droplet — it's perfect when you need to quickly spin up a staging environment backend.
Authentication
No matter if you are an enterprise or a small startup — communication between frontend and backend apps of your digital product must be safe and secure. The very first step that you need to take in this direction is establishing a strong authentication process. There are a lot of options for achieving this, either in-house or 3rd party SaaS. In the majority of our projects we prefer delegating authentication to Auth0 .
It has a number of advantages:
- Most important one. Auth0 manages a secure authentication process for us. Implicitly they don't even recommend authenticating users on your side within your app. Because it poses security concerns
- They enable social login experience right out of the box, no coding required. The list of social login providers is enormous, you will definitely find the one that you need.
- Everything is customizable. Login page template, email templates, even the restrictions for new users password.
Finally, Auth0 have a brilliant developers platform. Their SDKs are very well documented, and their API allows interacting with every step of the process, at any level. Moreover, all the configurations and templates can be exported and imported by mean of a CLI tool — this is super convenient for those who get used to keep all the project related stuff in a single place!
Let me put it all together
There are different ways to build and deploy a modern web app, millions of them! One that we prefer in 2020, and tested in numerous projects is Next.js for the frontend, Hasura for everything on the backend, Auth0 for users authentication and Kubernetes to rule them all.
Although it's our preferred way, we still would use Vercel for some projects, and Render for some others. It just may be reasonable. Before you decide on what platform should your product be based on put the downsides of each platform on the table and consciously pick the platform that has less disadvantages for your situation.
Happy New Year and Happy New Products!
Other articles
Gradual rollouts with AWS Lambda
Learn how to mitigate deployment risks using AWS Lambda's gradual rollout feature, enabling safer, incremental updates to your product's backend.
Using Tailwind to fill in the gaps in your team's CSS knowledge
Many engineering teams are favoring Tailwind CSS over plain CSS for its ease of styling web frontends with utility classes, addressing scalability issues encountered with traditional CSS as project size grows.