* Authentication / Authorization
* Usage monitoring
* API Gateway
* Billing calculations
* Invoice generation and sending
* Customer support (including portal to manage account)
I have left the specifics of the software out on purpose however it is primarily REST API based.So far I have looked at building on top of Kubernetes with Keycloak for auth; Kong (free) for API gateway; cron jobs to calculate daily bills, update a database and send monthly invoices. It's ugly, takes more time than I would like to spend to maintain and develop and means I lose time spent working on my core business.
Are there any best practices/design patterns/architectures for building a small-medium scalable SaaS platform?
I am open to experiences with managed services and heavy vendor lock-in as previously I tried to avoid it but the flexibility (that I have not used) is a tradeoff with time and effort required.
- Use React with NextJS. Stopping messing with state and routing issues.
- Use GraphQL instead of REST. Stop spending so much time writing well-structured API endpoints.
- Purchase TailwindUI [0]. Stop pretending to be a UI designer and start implementing features.
- Put everything in containers and host on Render [1] or Heroku. Stop spending time managing infra before you've found product-market fit.
Remove everything that stands between you and solving a business problem. Everything else is completely irrelevant. Do whatever you can to get to market.
It makes more business sense to pay $50/mo for Heroku and Auth0 than spending a month building infra and authentication, which you'll probably get wrong anyway.
If I were to do this all over again, I'd probably go with PHP+Symfony/Laravel or Ruby on Rails. Something hyper-practical. I thought I'd never say this, but it's true. Development is fast. Recruiting is cheap. There are builtin patterns so it's easy to get help online.
That being said, I do love React.
Connect it to something like Stripe, deploy it on e.g. Heroku or so (I personally use AWS Elastic Beanstalk for almost all my projects, mostly because I feel most comfortable there) and you should be almost there.
I have 2 side projects where I'm the solo developer, one runs on Symfony, the invoices are generated, but after they're sent, I need to manually check them (but each invoice is 100-200 US$, so it's ok).
A second project runs on Django and is subscription based, here the invoices are higher in volume but only 5 US$ each. There billing goes via Stripe (among others) and is handled automatically.
Check out https://www.indiehackers.com as well for some inspiration.