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.
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 hosting and deployment solutions come in many different ways. Here are some of them which we prefer in our projects.
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.
Well known cloud hosting providers like AWS, Google Cloud, Microsoft Azure or Digital Ocean 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.
When you need a full control over your infrastructure:
With managed solutions this is not always possible:
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.
As something that sits in between of SaaS over PaaS and pure PaaS I would mention the Digital Ocean 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 Digital Ocean 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.
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:
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!
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!