What would be your choice for setting up a new SaaS project for 2022?
In addition to the nice arguments about using what you know, i&#x27;d also like to offer the following link: <a href="http:&#x2F;&#x2F;boringtechnology.club&#x2F;" rel="nofollow">http:&#x2F;&#x2F;boringtechnology.club&#x2F;</a> (or in video form: <a href="https:&#x2F;&#x2F;www.oreilly.com&#x2F;library&#x2F;view&#x2F;oscon-2015-video&#x2F;9781491927991&#x2F;video218406.html" rel="nofollow">https:&#x2F;&#x2F;www.oreilly.com&#x2F;library&#x2F;view&#x2F;oscon-2015-video&#x2F;978149...</a>)<p>So essentially, my additional suggestion would be to choose battle tested software, that has few unknown unknowns and the limitations and quirks of which are familiar to both you and the industry.<p>I&#x27;ll also share a few subjective recommendations below, some of which don&#x27;t explicitly answer the OP&#x27;s question, but might be helpful nonetheless.<p>In regards to boilerplate and turnkey solutions:<p><pre><code>  - they may or may not exist in the form that you wish and when they do, they&#x27;ll possibly be SaaS or will need to be adapted anyways
  - for example, Firebase is pretty popular, but also SaaS, so there&#x27;s vendor lock in
  - something like Parse might be useful and can be self hosted: https:&#x2F;&#x2F;parseplatform.org&#x2F;
  - have a look here for more options: https:&#x2F;&#x2F;gist.github.com&#x2F;PARC6502&#x2F;ee4db400a05e6eb6d0981bb8cd4e4c1c
  - that said, for any complicated bits, especially those that will make you legally liable, use external services: typical use cases could be e-mails (SendGrid or something else) and payments (Stripe or PayPal, though some dislike PayPal)
</code></pre>
In regards to front end:<p><pre><code>  - React is popular, yet changes comparatively fast and can therefore make you deal with lots of external tech debt (e.g. hooks)
  - Angular is a good &quot;batteries included&quot; option, yet kind of heavy and TS may or may not be good for you
  - Vue is reasonably stable, apart from the v2&#x2F;3 migration, it should slow down in a year or two making it even more stable, good middle of the road option
  - Svelte is still too new
  - as far as CSS frameworks go, i&#x27;d just commit the sin of using Bootstrap, since it&#x27;s exceedingly boring and pretty simple
</code></pre>
In regards to back end:<p><pre><code>  - PHP (Larvel), Ruby (Rails), Node (Express.js over Koa&#x2F;Deno for now) or Python (Django over Flask for now) are all good options for simple CRUD apps, yet may struggle a bit with scheduled processes and the like, performance probably isn&#x27;t too much of a concern initially
  - Java (Spring Boot) or .NET (ASP.NET Core or whatever) are also really dependable choices when you need something with a more sophisticated lifecycle (e.g. Quartz for scheduled processes), however can also come with lots of technical complexity and the frameworks in particular can slow you down a bit
  - other languages like Go&#x2F;Rust&#x2F;Kotlin are promising yet more niche, as would using another paradigm than OOP - if you feel comfortable with that and aware of what you&#x27;re signing up for, go ahead
</code></pre>
In regards to data storage:<p><pre><code>  - MariaDB&#x2F;PostgreSQL for when you need a relational DB, the former is okay for simple CRUD (and has good tooling), whereas the latter is more advanced and possibly a better choice if you enjoy in database processing or have to work with GIS data (PostGIS is great), though the tooling feels off (pgAdmin pales in comparison to MySQL Workbench, though some don&#x27;t care about ER models and generating scripts from those, so DataGrip etc. are also good)
  - MongoDB for non-relational data or simply cases where not having a schema is permissible, personally wouldn&#x27;t recommend it that often, but it&#x27;s one of the most established options out there
  - S3 or a compatible implementation (MinIO or Zenko) for storing files and blobs of whatever sorts that you need
  - Redis for a key-value storage, it just works
</code></pre>
In regards to web servers:<p><pre><code>  - round robin DNS can take you far and specialized load balancers aren&#x27;t always a necessity, though you might want to look into Cloudflare for some protection anyways (debatable, some dislike one corpo having that much control)
  - Caddy is probably one of the better choices, gives you Let&#x27;s Encrypt out of the box, is performant enough for most cases and has a nice configuration format (even though IMO v2 is worse than v1)
  - Nginx is also really common and decent for most use cases, though a bit more problematic for proxying in comparison to Caddy
  - Apache has also recently gotten support for Let&#x27;s Encrypt baked in (mod_md in 2.5 https:&#x2F;&#x2F;httpd.apache.org&#x2F;docs&#x2F;trunk&#x2F;mod&#x2F;mod_md.html), though apart from that it&#x27;s sometimes unpleasant to use and the new functionality might need a while until stable
  - Traefik is also liked by some people, like a bit more advanced Caddy, but personally haven&#x27;t used it, maybe look into it
</code></pre>
In regards to making your services talk to one another:<p><pre><code>  - REST is a pretty good option for most cases (consider OpenAPI too)
  - avoid SOAP for the most part (WSDL was an awesome idea, but is a pain in practice)
  - gRPC seems like a pretty established option too, but REST should be enough
  - GraphQL also seems to have a lot of hype around it, but REST should be enough (unless working with highly dynamic content)
</code></pre>
In regards to runtime environments:<p><pre><code>  - target something common across all of your application components, such as OCI containers (typically with Docker or Podman)
  - if using containers (which can get rid of a lot of ops pain points, if used correctly), consider simple orchestration, like Docker Swarm (with Portainer) or Nomad
  - that&#x27;s also really good because of overlay networks, so you don&#x27;t end up misconfiguring something and exposing your DB to the world, instead every exposed port should be explicitly defined and under normal circumstances just be your web servers (and maybe a container that acts as a proxy for you to access other containers&#x27; ports through SSH tunneling, though only with key auth etc.)
  - if you are someone who likes dabbling in more advanced tools, cautiously consider K3s, don&#x27;t always pick a &quot;full&quot; Kubernetes distro
</code></pre>
In regards to where to actually run your stuff:<p><pre><code>  - generally, i&#x27;d just go for a VPS to avoid any sort of a vendor lock and to migrate between providers more easily, should the need ever arise
  - Hetzner: one of the better platforms out there for getting your stuff to run https:&#x2F;&#x2F;www.hetzner.com&#x2F;cloud
  - Scaleway: another relatively affordable platform (though prices changed a while back) https:&#x2F;&#x2F;www.scaleway.com&#x2F;en&#x2F;
  - Time4VPS: an affordable option, though the UI is a bit antiquated https:&#x2F;&#x2F;www.time4vps.com&#x2F;?affid=5294 (what i use, affiliate link)
  - Contabo: rather good deals, especially for storage https:&#x2F;&#x2F;contabo.com&#x2F;en&#x2F;
  - DigitalOcean: many also enjoy their offerings and especially the project grouping functionality https:&#x2F;&#x2F;www.digitalocean.com&#x2F;
  - Vultr: a good alternative to DigitalOcean https:&#x2F;&#x2F;www.vultr.com&#x2F;
  - colocation: some also do this with their own hardware, but that can be somewhat expensive
  - large platforms: unless necessary, avoid AWS, Azure, GCP, Oracle Cloud etc., since they can be really expensive
</code></pre>
In regards to OS distributions:<p><pre><code>  - generally prioritize EOL dates over most other things, as long as you use the most popular distros out there
  - in practice, the choice would have been between CentOS and Ubuntu LTS, but the former is now dead
  - so, just go with Ubuntu, or if you dislike canonical, go with Debian
</code></pre>
In regards to architectures:<p><pre><code>  - you can go pretty far with a single database and a monolith, don&#x27;t introduce accidental complexity, since that will make dealing with domain complexity harder
  - consider writing a modular monolith and ideally make the monolith horizontally scalable with feature flags: https:&#x2F;&#x2F;blog.kronis.dev&#x2F;articles&#x2F;modulith-because-we-need-to-scale-but-we-also-cannot-afford-micro-services
</code></pre>
Other considerations:<p><pre><code>  - cut corners, but have backups
  - test those backups
  - have unit tests for your core business functionality and validations
  - have integrations for most of the stuff that you can write them for
  - please have separate test environments for anything that you deploy
  - please have clear onboarding instructions ready for when you need to grow</code></pre>